Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ComboBox in StringGrid: OnExit geht, OnChange geht nicht!!?? (https://www.delphipraxis.net/29898-combobox-stringgrid-onexit-geht-onchange-geht-nicht.html)

cs.rumpelstilzchen 16. Sep 2004 10:08


ComboBox in StringGrid: OnExit geht, OnChange geht nicht!!??
 
Hallo Leute! Ich bin neu hier und bitte um Nachsicht falls ich was verkehrt mache. :hi:

Zum Thema:

Ich progge gerade einen Abfrage-Editor für eine Datenbank. Die Abfragefelder habe ich als ComboBoxen zur Laufzeit erzeugt und den Grid-Zellen einer StringGrid (Name: SqlGrid) zugeordnet.

Code:
      MyFeld[iIdx] := TComboBox.Create(Self);
      MyFeld[iIdx].ItemHeight := SqlGrid.RowHeights[iIdx + 1];
      MyFeld[iIdx].Font := SqlGrid.Font;
      MyFeld[iIdx].BoundsRect := SqlGrid.CellRect(SQL_GRID_FELD,iIdx + 1);
      MyFeld[iIdx].Parent := SqlGrid;
      MyFeld[iIdx].Items := FeldStrings;
      MyFeld[iIdx].Style :=csDropDownList;
      MyFeld[iIdx].AutoCloseUp := true;
      MyFeld[iIdx].OnExit := MyFeldComboBoxExit;
      SqlGrid.Objects[SQL_GRID_FELD,iIdx + 1] := MyFeld[iIdx];
      MyFeld[iIdx].BringToFront;
Delphi-Quellcode:
procedure TDk32BstSqlComposerWnd.MyFeldComboBoxExit(Sender: TObject);
Funktioniert soweit prima... aber:

Ich möchte die Inhalte der ComboBoxen in einer Zeile voneinander abhängig machen, d.h. zu einem gewählten Datenbankfeld auch nur sinnvolle Inhalte anbieten.
Dazu habe ich eine Ereignisprozedur geschrieben und diese an die entsprechenden ComboBoxen dem Ereignis OnExit zugewiesen. Auch das funktioniert prima, aber...
... eigentlich wollte ich das Ereignis OnChange benutzen!

Delphi-Quellcode:
   MyFeld[iIdx].OnChange := MyFeldComboBoxExit;
Das funzt aber nicht! Es scheint, als würde das Ereignis gar nicht ausgelöst!
Testweise habe ich das ganze mal mit einer ComboBox im Formular ausprobiert, da geht das!

Es scheint also nur innerhalb einer StringGrid nicht zu gehen !! :cry:

Kann jemand helfen? :?:

Stevie 16. Sep 2004 14:53

Re: ComboBox in StringGrid: OnExit geht, OnChange geht nicht
 
Wie soll den OnChange aufgerufen werden, wenn du die ComboBox davorschaltest?
Dann wird die doch angesprochen und überhaupt nicht das Feld in der Grid, oder hab ich jetzt was falsch verstanden?

cs.rumpelstilzchen 16. Sep 2004 14:59

Re: ComboBox in StringGrid: OnExit geht, OnChange geht nicht
 
Hallo Stevie!

Ich benutze das Ereignis OnChange der ComboBox, nicht des Grids! Mit dem Ereignis OnExit geht das wie gesagt!

Christian Seehase 16. Sep 2004 16:35

Re: ComboBox in StringGrid: OnExit geht, OnChange geht nicht
 
Moin Rumpelstilzchen,

leg' das StringGrid mal auf ein Panel.
Das Panel solltest Du so einstellen, dass man anschliessend nichts mehr davon sieht (BevelInner und BevelOuter auf bvNone).
Als Parent für die ComboBox wird dann das Panel angegeben, nicht das StringGrid.
Beim StringGrid muss dann noch Align auf alClient gestellt werden, damit die relativen Positionen der Comboboxen passen.

cs.rumpelstilzchen 17. Sep 2004 09:40

Re: ComboBox in StringGrid: OnExit geht, OnChange geht nicht
 
Danke Christian, funktioniert! :hello:

Allerdings nur, wenn ich das Align nicht auf alClient lege, vermutlich weil ich das StringGrid mit einer vertikalen ScrollBar benutze!??!

Sieht zwar irgendwie etwas merkwürdig aus das Ganze, aber ist in Ordnung so!

Insgesamt ist das dann wohl ein 'Workaround' (schräg durch die Brust ins Auge), oder gibt es irgendeine plausible Erklärung warum das OnChange innerhalb eines StringGrids nicht funktioniert? Eigentlich mag ich dieses Getüftel mit übereinanderliegenden Objekten usw. nicht, ist irgendwie keine saubere Programmierung, oder?

Kommt sowas unter Windows/Delphi öfter vor? :wall:

Nochmals danke für die Hilfe! :thumb:

cs.rumpelstilzchen 17. Sep 2004 10:08

Re: ComboBox in StringGrid: OnExit geht, OnChange geht nicht
 
Nochmal ich!

Also ich hab mir das Ganze nochmal in Ruhe angesehen :coder2: und festgestellt, daß ich das Panel gar nicht brauche :idea: ! Ich kann als Parent genauso gut das Formular angeben :cyclops: !

Trotzdem danke für deinen Tip, ohne hätte ich das gar nicht herausgefunden! :thumb:

Christian Seehase 17. Sep 2004 15:16

Re: ComboBox in StringGrid: OnExit geht, OnChange geht nicht
 
Moin Rumpelstilzchen,

bitte, gerne.

Das Panel als Basis sollte nur die Berechnung der Position vereinfachen, da diese ja relativ zum Parent gerechnet wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz