Ok, ich habe es mir mal angeschaut. Ich hätte viele Anregungen, ich bleibe aber mal bei diesem Thema und beschreibe einfach mal, wie ich diesem Verhalten auf die Spur ging.
Wenn man das Projekt startet, stellt man fest, dass egal, welchen Wert man in der TDBLookupComboBox wählt, keine Änderung in den DBEdit2 Textfeldern zu sehen sind. Diese sollten aber stattfinden bei:
Code: Alles auswählen
procedure TForm1.BerechneSumme (Dataset: TDataset);
begin
Form1.DBEdit2.Text:=FormatFloat('#,##0.000', Form3.Dbf1.FieldByName('WERT A [G]').AsFloat / 100 *
Form3.Dbf1.FieldByName('WERT A [%]').AsFloat +
Form3.Dbf1.FieldByName('WERT A [G]').AsFloat);
Form1.DBEdit3.Text:=FormatFloat('#,##0.000', Form3.Dbf1.FieldByName('WERT A [G]').AsFloat -
(Form3.Dbf1.FieldByName('WERT A [G]').AsFloat / 100 *
Form3.Dbf1.FieldByName('WERT A [%]').AsFloat));
end;
Nun stellt sich die Frage, warum nicht. Dazu legt man einen Breakpoint auf die erste Zeile der Procedure. Startet man nun das Programm und wählt einen Eintrag in der TDBLookupComboBox, stellt man fest, dass der Breakpoint niemals angesprungen wird. Fazit, die Procedure wird nie aufgerufen.
Dass diese aufgerufen wird, hast du (bzw. ich in meinem Projekt) hier festgelegt:
Code: Alles auswählen
procedure TForm1.FormShow(Sender: TObject);
begin
Form3.Dbf1.AfterScroll:=@BerechneSumme;
end;
Leider wird scheinbar TForm1.OnShow zu früh gefeuert, sodaß der Eventhandler nicht richtig eingetragen wird. Als Test für diese Theorie kannst du mal das Projekt starten, Form3 öffnen, Form3 wieder schließen, nun wird OnShow vom Form1 wieder aufgerufen und schon klappt es, wie gewünscht.
Du hast jetzt die Möglichkeit einen späteren Event für die Zuweisung zu suchen (z.B. OnActivate), ein TDatenModul zu verwenden (wie ich), ein TDbf auf dem aktuellen Formular zu platzieren oder einen vierten Weg zu probieren.
Bitte bei dem nächsten Minimalbeispiel den Ordner "lib" und auch die SQLite.dll (zumal nicht genutzt) nicht in das Zip tun.