Autor Beitrag
toenne
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Fr 18.03.11 23:40 
Ich laboriere gerade an einem etwas merkwürdigen Problem.
Ich habe eine Hauptform wo zwei Integer-Variablen definiert werden, XSpinE und YSpinE.
Über einen Button wird eine zweite Form aufgerufen die zwei SpinEdits enthält, SpinEditX und SpinEditY.

Aufruf der zweiten Form:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm_Main.SpeedButton1Click(Sender: TObject);
begin
 XSpinE := 5;
 YSpinE := 4;
 Form_Mapping.ShowModal;
end;

(XSpinE und YSpinE werden normalerweise in der Mainform aus einer Ini-Datei gelesen bzw. dort beim Programmende zurückgeschrieben, ich habe sie nur testweise oben kurz vor dem 'Form_Mapping.ShowModal' direkt mit Zahlenwerten belegt)

Im FormActivate der zweiten Form sollen die SpinEdits nun voreingestellt werden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm_Mapping.FormActivate(Sender: TObject);
begin
 SpinEditX.Value := XSpinE;
 SpinEditY.Value := YSpinE;
end;


Merkwürdigerweise erscheint im SpinEditY aber immer 1, der Wert in SpinEditX ist korrekt.
Noch merkwürdiger aber: Vertausche ich XSpinE und YSpinE...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm_Mapping.FormActivate(Sender: TObject);
begin
 SpinEditX.Value := YSpinE;
 SpinEditY.Value := XSpinE;
end;

...dann erhält SpinEditX immer 1 und der Wert in SpinEditY ist korrekt!

Ja spinne ich jetzt? Wieso wird YSpinE nicht korrekt übergeben? :shock:

Gruss
Toenne


Edit:
Als Nachtrag noch der Hinweis dass das Schreiben in die Ini einwandfrei funktioniert. Im FormClose der zweiten Form wird YSpinE mit SpinEditY.Value belegt (YSpinE := SpinEditY.Value;), beim schliessen der Hauptform wird die Ini geschrieben. Habe ich SpinEditY von 1 auf irgendeinen anderen Wert geändert so erscheint der auch so in der Ini.
toenne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Sa 19.03.11 00:16 
Ewig lang grübelt man und kaum dass man im Forum postet findet man den (dämlichen...) Fehler: Im Objektinspektor war für beide SpinEdits bereits das OnChange-Event definiert. Dort aber wird am Ende YSpinE zurückgeschrieben:
ausblenden Delphi-Quelltext
1:
2:
 XSpinE := SpinEditX.Value;
 YSpinE := SpinEditY.Value;

Also wird als erstes SpinEditX vorbelegt. Das wird aber bereits als Change-Event bewertet und in die OnChange-Routine verzweigt. Zu diesem Zeitpunkt hat SpinEditY aber noch den Defaultwert 1...der prompt YSpinE zugewiesen wird. Also hat YSpinE in der nächsten Zeile SpinEditY.Value := YSpinE den Wert 1 der auch brav ins SpinEdit geschrieben wird :roll: .
Also flugs FormActivate geändert...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm_Mapping.FormActivate(Sender: TObject);
begin
 SpinEditX.Value := XSpinE;
 SpinEditY.Value := YSpinE;
 SpinEditX.OnChange := raster; // OnChange-Prozedur
 SpinEditY.OnChange := raster;
end;

...und auch das FormClose...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm_Mapping.BitBtnOKClick(Sender: TObject);
begin
 SpinEditX.OnChange := NIL;
 SpinEditY.OnChange := NIL;
 close;
end;

...und zu guter Letzt noch das OnChange-Event im Objektinspektor gelöscht -> funktioniert.

Da falle ich jedesmal wieder darauf rein dass eine Belegung von Komponenten (z.B. auch ScrollBar.Position := irgendwas) das OnChange-Event aufruft...nervig...

Gruss
Toenne
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 19.03.11 00:25 
Freut uns das wir helfen konnten. :mrgreen:

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.