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 OnSelect von ComboBox mit Parent StringGrid wird nicht ausgelöst (https://www.delphipraxis.net/211226-onselect-von-combobox-mit-parent-stringgrid-wird-nicht-ausgeloest.html)

Helmi 17. Aug 2022 15:27

OnSelect von ComboBox mit Parent StringGrid wird nicht ausgelöst
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen,

ich habe einen merkwürdigen Fehler entdeckt.

Ich habe ein StringGrid, in dem ich eine ComboBox anzeigen lasse (zum Auswählen von Werten in einer Zelle).
Soweit funktioniert es wie gewollt.

Von dem ComboBox nutz ich die Events OnSelect und OnExit.

Eigenartigerweise, wenn ComboBox.Parent die StringGrid ist, dann wird das Event "OnSelect" der ComboBox nicht ausgelöst.
"OnExit" aber schon.

"OnChange" wird ebenfalls nicht ausgelöst.

Ist die Form aber der Parent, dann funktioniert OnSelect.

Anbei ein Beispiel-Projekt.
Einfach in der zweiten Spalte auf die Zellen klicken und in der ComboBox etwas auswählen.

OnExit allein ist für die Anwendung aber zu spät, da ich dafür wo anders klicken müsste, anstatt nur auszuwählen.

Wie bekomm ich es nun dazu, OnSelect ausgelöst zu bekommen?

Uwe Raabe 17. Aug 2022 16:02

AW: OnSelect von ComboBox mit Parent StringGrid wird nicht ausgelöst
 
Das liegt an TCustomGrid.WMCommand, das versäumt ein inherited aufzurufen, wenn es mit dem NotifyCode nichts anfangen kann.

Abhilfe kann z.B. eine Interposer Klasse für TStringGrid liefern, die das entsprechend umsetzt, ist aber unschön.

Etwas aufwändiger, aber weniger invasiv: Zwischen ComboBox und StringGrid ein TPanel als Parent legen. Hier das Prinzip:
Delphi-Quellcode:
  ComboBox_aktiv := TComboBox.Create(self);

  var panel := TPanel.Create(Self);
  panel.BevelOuter := bvNone;
  panel.AutoSize := True;
  panel.Parent := StringGrid1;
  with ComboBox_aktiv do
    begin
      Parent   := panel;
//      Parent   := Form5;

      Style    := csDropDownList;
      Visible  := false;

      Items.Add('aus');
      Items.Add('ein');

      OnSelect := ComboBox_OnSelect;
      OnExit   := ComboBox_OnExit;
    end;

Helmi 17. Aug 2022 17:47

AW: OnSelect von ComboBox mit Parent StringGrid wird nicht ausgelöst
 
Danke für den Tipp mit dem Panel.

Hab das jetzt mal im Testprojekt eingepflegt und es funktioniert wunderbar.
War aber nicht wirklich aufwändig, man muss nur an ein paar Stellen ändern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 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