Erst einmal enthält Dein Code 2 fundamentale Fehler:
1)
Du kannst im Abschnitt IF d=0 THEN der Anweisung ed_x2.Text:=... keinen Boolschen Wert (false) zuweisen!
So lässt sich Dein Code erst einmal überhaupt nicht kompilieren.
Ohnehin muss es vielmehr ed_x2.visible:=false heißen, was Du ja tatsächlich haben willst.
2)
In den beiden Auswertungen für x1 und x2 ist die abschließende Klammer falsch gesetzt!
Statt
x1 := -(p / 2) + sqrt(sqr(p / 2)) - q // falsch!
muss es richtig heißen
x1 := -(p / 2) + sqrt(sqr(p / 2) - q);
Gleiches gilt für die Auswertung von x2.
Zur Optimierung wäre es außerdem sinnvoll (aber nicht zwingend), den Term
sqrt(sqr(p / 2) - q) einmalig vorab der Auswertung von x1 und x2 zu berechnen, das Ergebnis in einer Variablen zu speichern und diese Variable dann anstelle des Terms in beide Gleichung zu übernehmen.
Alles, was Du sonst tun musst, ist es, im Programmlayout einen Button auf das Formular zu setzen und im
Button1Click-Event auf die Prozedur zur Berechnung zu verweisen.
Die beiden Editfelder für p und q sollten übrigens zur Absicherung gegen falsche, also nichtnumerische Eingaben geschützt werden.
Dazu im
KeyPress-Event beider Edits folgenden Code eintragen:
Delphi-Quellcode:
case key of
'0'..'9',',','-':;
#8:;
else
key:=#0;
end;
Warum Du die Anzeigen für x1, x2 sowie den Erfolgskommentar ('keine Lösung' etc.) in Editfeldern darstellen lässt, verstehe ich nicht, da ja dort keine Interaktion durch den Benutzer notwendig bzw. sinnvoll ist.
Wesentlich besser wäre es deshalb, die entsprechenden Ausgaben im Captiontext von Labels anzuzeigen.