Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Controls in TValueListEditor (https://www.delphipraxis.net/104733-controls-tvaluelisteditor.html)

alf.stefan 10. Dez 2007 13:30


Controls in TValueListEditor
 
Hallo zusammen

ich habe ein TValueListEditor Komponente und will da Controls einbauen und natürlich auch die Ereignisse erhalten.
Das Einbauen klappt ganz gut nur mit der Ereignisbehandlungsroutine hab ich Probleme!

Delphi-Quellcode:
   
        // ....
    valueListEdit.InsertControl(TControl(aButton));
    aButton.Caption := 'squeeze';
    valueListEdit.Cells[0,1] := 'Button';
    // position des buttons mit den Positions-Daten der gewünschten Zelle
    aButton.Left := valueListEdit.ColWidths[0];
    aButton.Top := valueListEdit.valueListEdit.RowHeights[1];
    aButton.Width := valueListEdit.ColWidths[1];
    aButton.Height := valueListEdit.DefaultRowHeight;
    aButton.OnClick := btnOkClick;
wie gesagt der Button wird richtig angezeigt und in der Tabreihenfolge ist er auch drinn aber die Ereignisbehandlung funktioniert nicht.

Kann mir da jemand helfen? Vielleicht gibts ja auch ein Tutorial das dynamisch erzeugte Controlls im allgemeinen oder innerhalb von TValueListEditoren im speziellen behandelt.


Gruß

Stefan

alf.stefan 11. Dez 2007 12:19

Re: Controls in TValueListEditor
 
Hab selbst nochmal rumprobiert und Doku gelesen.

Was ich nicht wusste ist, dass ich die Message für das Control extra angeben und verbreiten (broadcasten) muss!?

Delphi-Quellcode:

procedure TForm1.FormCreate(Sender: TObject);
var
 msg : word;
begin

  aButton := TButton.Create(StringGrid1);
  aButton.OnMouseDown := Button1MouseDown;
  aButton.Left := StringGrid1.ColWidths[1];
  aButton.Top := StringGrid1.RowHeights[1];
  aButton.Height := StringGrid1.RowHeights[1];
  aButton.Width := StringGrid1.ColWidths[1];
  aButton.Caption:= 'Drück mich';

  StringGrid1.InsertControl(aButton);
  StringGrid1.Controls[0].Parent := stringGrid1;

  msg := WM_LBUTTONDOWN;
  StringGrid1.Broadcast(msg);
end;
Das funktioniert einigermaßen. Mit dem Schönheitsfehler, dass bei Programmstart der Event immer aufgerufen wird und ich weiss nicht wie ich das abstellen kann.

Gruß

Stefan
PS. ich weiß dass ich den Post im falschen forum gemacht hab das gehört eher zur VCL.. sorry.


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