Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Button OnClick wird nicht ausgelöst.. (https://www.delphipraxis.net/67618-button-onclick-wird-nicht-ausgeloest.html)

Angel4585 17. Apr 2006 18:28


Button OnClick wird nicht ausgelöst..
 
Hallo zusammen,

ich hab folgendes Problem:

Hiermit mach ich in Stringgrid einen bzw. mehrere Buttons:

Delphi-Quellcode:
procedure TForm1.StringgridDrawCell(Sender : TObject; ACol, ARow : Integer; Rect : TRect; State : TGridDrawState);
begin
if (ACol = 2) and (ARow > 0) and (Stringgrid1.Objects[ACol,ARow] = nil) then
  begin
  Stringgrid1.Objects[ACol,ARow]:=TButton.Create(Stringgrid1);
  with TButton(Stringgrid1.Objects[ACol,ARow]) do
    begin
    Name := 'sgButton'+IntTostr(ARow);
    Parent:=Stinggrid1;
    Top:=Rect.Top;
    Left:=Rect.Left;
    Width:=Rect.Right-Rect.Left;
    Height:=Rect.Bottom-Rect.Top;
    OnClick:=MyOnClick;
    end;
  end;
end;

procedure TForm1.MyOnClick(Sender : TObject);
begin
if Sender is TButton then
  with TButton(Sender) do
    Stringgrid1.Cells[0,StrToint(Copy(Name,9,Length(Name)-9))]:='Clicked';
end;
mein kleines aber feines Problem ist jetzt, dass das zugewiesene OnClick nicht ausgeführt wird. weis jemand was da noch fehlt?

MfG :angel:

SirThornberry 17. Apr 2006 18:47

Re: Button OnClick wird nicht ausgelöst..
 
bist du dir sicher das nicht ins OnClick gesprungen wird? hast du dort mal einen Haltepunkt gesetzt?

Angel4585 17. Apr 2006 18:53

Re: Button OnClick wird nicht ausgelöst..
 
ja türlich habbich.. iss nich rein... ich kann draufklicken.. aber es springt einfach net rein..

SirThornberry 17. Apr 2006 18:57

Re: Button OnClick wird nicht ausgelöst..
 
an dem source ist eigentlich alles richtig. Hast du probiert ob das ganze richtig funktioniert wenn du die Buttons nicht auf dem Stringgrid sondern auf dem Form direkt anlegst? Du könntest zum Debuggen auch mal den kreierten Button auf eine Zwischenvariable zuweisen und ohne "with" durchprobieren ob alles richtig gesetzt wird. Da der Button ja offensichtlich richtig erzeugt wird und auch sichtbar ist hätte ich noch die Vermutung das sich ein anderes Control in den Vordergrund schiebt so das der Click nie beim Button ankommt.

mkinzler 17. Apr 2006 18:58

Re: Button OnClick wird nicht ausgelöst..
 
Warum schreibst du ARow nicht als .Tag in den Button, dann ist es im Eventhandler die richtige Zeile zu finden.
Delphi-Quellcode:
procedure TForm1.MyOnClick(Sender : TObject);
begin
if Sender is TButton then
  with TButton(Sender) do
    Stringgrid1.Cells[0,Tag]:='Clicked';
end;

Angel4585 17. Apr 2006 19:00

Re: Button OnClick wird nicht ausgelöst..
 
@mkinzler: Danke für den Tipp, ist aber OT da er da nie ankommt.

@SirThornberry: der Buttonclick wird ja animiert, also sollte er auch ausgelöst werden und ankommen oder?

SirThornberry 17. Apr 2006 19:02

Re: Button OnClick wird nicht ausgelöst..
 
wenn der "click" animiert wird sollte der Klick auch ausgelöst werden. Deswegen hatte ich auch vorgeschlagen das danze mal auf eine Zwischenvariable zu zuweisen um zu debuggen ob da wirklich das OnClick richtig zugewiesen wird.

Angel4585 17. Apr 2006 19:09

Re: Button OnClick wird nicht ausgelöst..
 
Delphi-Quellcode:
var b : TObject;
...

procedure TForm1.Button1Click(Sender : TObject);
begin
b:=TButton.Create(Self);
with TButton(b) do
  begin
  Parent:=Self;
  Name:='Testb1';
  Top:=0;
  Left:=0;
  Width:=100;
  Height:=100;
  OnClick:=MyOnClick;
  end;
end;
hier funktioniert das OnClick. Also er springt bei nem Klick rein. Und jetzt?

mkinzler 17. Apr 2006 19:12

Re: Button OnClick wird nicht ausgelöst..
 
Setze mal zum Test in deinem originallem Programm den Parent der Buttons auf die Form. Es scheint hier ein Problem der Eventweiterreichnung des StringGrids zu geben.

SirThornberry 17. Apr 2006 19:13

Re: Button OnClick wird nicht ausgelöst..
 
[OT]Die b-Variable wäre bei dem Test lokal besser aufgehoben[OT]

Ich würde dir wenn es so funktioniert mal empfehlen das in die andere Funktion einzubauen. Also dort mit einer Zwischenvariablen arbeiten und dann die Zwischenvariable auf das "Objects" zuweisen


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 Uhr.
Seite 1 von 2  1 2      

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