AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Zur Laufzeit erstellte Buttons - OnClick weigert sich
Thema durchsuchen
Ansicht
Themen-Optionen

Zur Laufzeit erstellte Buttons - OnClick weigert sich

Ein Thema von tkoenig · begonnen am 4. Jul 2011 · letzter Beitrag vom 5. Jul 2011
Antwort Antwort
Seite 1 von 3  1 23      
tkoenig

Registriert seit: 16. Mär 2010
Ort: Dresden
19 Beiträge
 
Delphi XE7 Professional
 
#1

Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 11:10
Mahlzeit zusammen,

ich weiß, dass dieses Thema hier regelmäßig hoch kommt und habe die Suche bemüht, leider hat mir keine der Lösungen dort weitergeholfen.
Ich habe mir eine Klasse geschrieben, die das TStringGrid um Buttons erweitert und diese in die entsprechenden Zellen einfügt. Funktioniert alles einwandfrei, nur leider bringt meine Zuweisung der OnClick-Routine gar nichts. Kann mir vielleicht jemand einen Schubs in die richtige Richtung geben?

Delphi-Quellcode:
 TButtonGrid = class
  private
    {...}
    Procedure ClickAction(Sender: TObject);
  published
    {...}
    Procedure AssignButtons(Captions: Array Of String);
    {...}
  end;

implementation

procedure TButtonGrid.AssignButtons(Captions: array of String);
var i,j: integer;
begin
  SetLength(Buttons,high(Captions)+1);
  for i := 0 to high(Buttons) do
  begin
    SetLength(Buttons[i],StringGrid.RowCount-StringGrid.FixedRows);
    for j := 0 to high(Buttons[i]) do
    begin
      Buttons[i,j] := TButton.Create(StringGrid);
      Buttons[i,j].Parent := StringGrid;
      Buttons[i,j].Caption := Captions[i];
      Buttons[i,j].Name := 'TBGButton_'+inttostr(i)+'_'+inttostr(j);
      Buttons[i,j].Tag := strtoint(inttostr(i) + inttostr(j));
      SetButtonPosition(Buttons[i,j]);
      SetButtonSize(Buttons[i,j]);
      Buttons[i,j].OnClick := ClickAction; // <-----------
    end;
  end;
end;

{...}

procedure TButtonGrid.ClickAction(Sender: TObject);
begin
  showmessage('hallo');
end;
Ich bekomme keine Fehlermeldung, leider sagt mir aber auch keiner der Buttons hallo...

Grüße
tkoenig
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#2

AW: Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 11:29
Liegt das nicht daran, dass dein Event-Handler private-Deklariert ist?

Ich würde das eher so schreiben:
Delphi-Quellcode:
 TButtonGrid = class
  private
    {...}
    FClickAction: TNotifyEvent;
  published
    {...}    
    Procedure AssignButtons(Captions: Array Of String);
    property ClickAction: TNotifityEvent read FClickAction write FClickAction;
    {...}
  end;
Edit: bin heute wohl noch nicht wach. So müsste es nun stimmen

Geändert von blackfin ( 4. Jul 2011 um 11:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 11:35
Hallo,

Schreib mal statt
Buttons[i,j] := TButton.Create(StringGrid);

das hier:

Buttons[i,j] := TButton.Create(Self);

@blackfin: das hat doch damit nichts zu tun. Und dein Lösungsvorschlag hat irgendwie nichts mit dem Problem zu tun
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

AW: Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 11:37
ok du hast recht ich hol mir lieber mal nen kaffee...

*merkzettel schreib*: nicht schreiben, wenn man noch nicht wach ist.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 11:37
Wer denn nun der Owner ist, dürfte für das Problem aber auch keine Rolle spielen, oder hab ich was verpasst? Das soll aber nicht heißen, dass self nicht besser wäre
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
tkoenig

Registriert seit: 16. Mär 2010
Ort: Dresden
19 Beiträge
 
Delphi XE7 Professional
 
#6

AW: Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 11:42
Self bringt allerdings Fehlermeldung ('Inkompatible Typen: TComponent und TButtonGrid').. Nein, habe nicht abgeleitet, TButtonGrid hält nur die Komponenten vor.

Code:
Buttons[i,j] := TButton.Create(Buttons[i,j]);
bringt gleiches Ergebnis wie vorher: nichts passiert.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 11:48
Achso du bist nicht in nem Formular.. Jedenfalls.. Schau mal, dass deine Buttons ein Formular als Owner bekommen.

@DeddyH: Das einzige was mir eingefallen ist war, dass die Button-Messages an das StringGrid gesendet werden und dieses die Messages verwirft, weil es nichts damit anfangen kann (Theorie). Deshalb dachte ich es könnte evtl helfen wenn man das Formular zum Owner macht.

Kann aber auch sein, dass ich da auch falsch liege. Mir fällt aber jetzt nichts besseres ein. Der Code sieht ja prinzipiell in Ordnung aus..
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 11:50
Beim Parent könnte ich mir sowas evtl. noch vorstellen, beim Owner weniger. Man könnte ja spaßhalber das ButtonGrid einmal von TComponent ableiten, dann sollte es sich auch zum Owner machen lassen. Allerdings fürchte ich, dass das nichts bringt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
tkoenig

Registriert seit: 16. Mär 2010
Ort: Dresden
19 Beiträge
 
Delphi XE7 Professional
 
#9

AW: Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 12:05
Beim Parent könnte ich mir sowas evtl. noch vorstellen, beim Owner weniger. [...]
Yep, daran liegts. Wenn ich die Form als Parent setze, sagen mir die Buttons "hallo". Vielen Dank für eure Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Zur Laufzeit erstellte Buttons - OnClick weigert sich

  Alt 4. Jul 2011, 12:08
Naja, gut wenns klappt, aber schön ist das dann auch nicht. Die Buttons gehören somit nämlich NICHT zum Grid. Wenn du das Grid verschiebst dann verschieben sich z.B. nicht die Buttons und die Koordinaten für Left/Top werden relativ zum Formular angegeben und nicht relativ zu deinem Grid (fällt nicht auf wenn dein Grid bei 0/0 sitzt).
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 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