habe jahrelang mit Delphi programmiert und bin nun aber auch mit Lazarus hochzufrieden. Ein Unterschied wundert mich aber noch und macht die Handhabung eines TEdits schwierig.
In Delphi geht so etwas prima:
Code: Alles auswählen
procedure TFormMain.EditSpecLimChange(Sender: TObject);
var
st: string;
begin
If EditSpecLim.Modified then Begin
st := EditSpecLim.Text;
SpecLim := fvalx(st); // meine Funktion zur Umwandlung string zu real
SpecLim := Begrenzungd(SpecLim, 1, 100); // meine Funktion zur Begrenzung von reals
Berechnen; // Hier wird vieles neu berechnet - [b]auch Speclim selber könnte davon betroffen sein[/b]!
end;
end;
Aber unter Lazurus geht .Modified nicht korrekt und man kann in einer Endlosschleife landen!!
Deshalb habe ich diesen Workaround eingebaut:
Code: Alles auswählen
procedure TFormMain.EditSpecLimChange(Sender: TObject);
var
st: string;
begin
if not SimilarNumbers(SpecLim, fValx(EditSpecLim.Text), 3) and
(EditSpecLim.Text <> '') then
begin // now pretty good!!!
.... siehe oben!!
end;
Ich möchte, wenn intern SpecLim geändert wird zwar das TEdit aktualisieren, aber nicht noch einmal alles berechnen lassen.
In Firemonkey gibt es beim TEdit deshalb einen Split:
Man hat OnChange und OnTyping -das ist oft ganz praktisch.

Geht das auch in Lazarus???
Eine einfache Aufgabe wo man so etwas braucht ist z.B. wenn man aus Weg und Zeit die Geschwidigkeit v=s/t brechnen will. Wenn ich t eingebe, möchte ich z.B. v aktualisieren (s=const). Wenn ich v eingebe möchte ich z.B. t aktualiseren (s=const). Was jewals konstant gehalten werden soll könnten man per RadioButton festlegen - aber entscheidend ist das jeder TEdit sowohl Eingabe als auch Ausgabe sein kann!!!!
Hat jemand eine Idee?

Viele Grüße
Stephan