![]() |
ButtonClick wird nicht ausgeführt
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen,
ich arbeite mit Delphi xe2 Starter und habe ein Phänomen, dass ich mir nicht erklären kann und was ganz schön nervig ist. Vereinzeln führen Buttons ihre ButtonClick Proceduren nicht mehr aus. Ich habe keine Ahnung, woran das liegen könnte... Anbei mal ein Screenshot, dass die Procedure dem Button zugewiesen ist und die Procedure (ich habe jetzt, nachdem die alte Procudure nicht mehr funktionierte eine einfache genommen).
Delphi-Quellcode:
Hat jemand einen Idee?
procedure TWSAgenda.ButtonZeitraumBearbeitenClick(Sender: TObject);
begin Showmessage('Hallo'); end; Vielen Dank Ykcim |
AW: ButtonClick wird nicht ausgeführt
Das was du hier gepostet hast sieht richtig aus...
Hast du mal einen Haltepunkt in die Zitat:
|
AW: ButtonClick wird nicht ausgeführt
Ja, habe ich gemacht. Wenn ich auf den Button klicke, verfärbt ersich, wie es alle Buttons machen, die man klickt, aber er läuft nicht in die Procedur rein. Es ist so, als gäbe es die Procedur gar nicht.
Ich habe schon an einen Fehler in Delphi xe2 gedacht und das ganze System heute Morgen neu aufgesetzt... Aber leider ohne Erfolg... |
AW: ButtonClick wird nicht ausgeführt
Wird evtl. irgendwo im Code der Eventhandler neu gesetzt?
|
AW: ButtonClick wird nicht ausgeführt
Nicht das ich das bewusst gemacht hätte...
Anbei der gesamte Code dieser Unit:
Delphi-Quellcode:
Die drittletzte Procedure (ButtonZeitraumBearbeitenClick) und die letzte (ButtonZieleBearbeitenClick) funktionieren nicht mehr... Die gleiche Procedure wird noch an einer anderen Stellen ausgeführt (ButtonAGendaBearbeitenClick), bei der einen klappt es und bei den zweien nicht mehr... Gestern Abend klappte es noch und heute morgen habe ich nur neu compiliert und dann reagierten die Buttons nicht mehr...
unit UnitAgenda;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.ExtCtrls, Vcl.Menus, Vcl.StdCtrls, Planner, AdvObj, BaseGrid, AdvGrid, Vcl.ImgList, W7Classes, W7Buttons, Vcl.Buttons, Codes; type TWSAgenda = class(TFrame) PanelAgenda: TPanel; PanelZeitraum: TPanel; PanelAgendaListe: TPanel; Panel3: TPanel; Splitter3: TSplitter; Splitter4: TSplitter; PopupZeitraum: TPopupMenu; PopupAgenda: TPopupMenu; bearbeiten1: TMenuItem; N1: TMenuItem; Zeitraumhinzufgen1: TMenuItem; Zeitraumlschen1: TMenuItem; bearbeiten2: TMenuItem; N2: TMenuItem; AgendaPunkthinzufgen1: TMenuItem; AgendaPunktlschen1: TMenuItem; Panel1: TPanel; Panel2: TPanel; PanelZiele: TPanel; Planner1: TPlanner; GridZeitraum: TAdvStringGrid; GridZiele: TAdvStringGrid; ImageList1: TImageList; ButtonAgendaBearbeiten: TSpeedButton; ButtonAgendaLoeschen: TSpeedButton; ButtonAgendaNeu: TSpeedButton; Panel7: TPanel; Splitter5: TSplitter; Splitter6: TSplitter; Panel6: TPanel; Splitter1: TSplitter; Splitter2: TSplitter; ButtonZeitraumBearbeiten: TSpeedButton; ButtonZeitraumNeu: TSpeedButton; ButtonZeitraumLoeschen: TSpeedButton; ButtonZieleBearbeiten: TSpeedButton; ButtonZieleNeu: TSpeedButton; ButtonZieleLoeschen: TSpeedButton; procedure FrameResize(Sender: TObject); procedure Planner1ItemDelete(Sender: TObject; Item: TPlannerItem); procedure Planner1ItemInsert(Sender: TObject; Position, FromSel, FromSelPrecise, ToSel, ToSelPrecise: Integer); procedure ButtonAgendaLoeschenClick(Sender: TObject); procedure ButtonAGendaBearbeitenClick(Sender: TObject); procedure ButtonAgendaNeuClick(Sender: TObject); procedure ButtonZeitraumLoeschenClick(Sender: TObject); procedure ButtonZeitraumBearbeitenClick(Sender: TObject); procedure ButtonZieleBearbeitenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; implementation {$R *.dfm} procedure TWSAgenda.FrameResize(Sender: TObject); begin ImageList1.GetBitmap(64, ButtonZeitraumBearbeiten.Glyph); ImageList1.GetBitmap(18, ButtonZeitraumNeu.Glyph); ImageList1.GetBitmap(5, ButtonZeitraumLoeschen.Glyph); ImageList1.GetBitmap(64, ButtonZieleBearbeiten.Glyph); ImageList1.GetBitmap(18, ButtonZieleNeu.Glyph); ImageList1.GetBitmap(5, ButtonZieleLoeschen.Glyph); ImageList1.GetBitmap(64, ButtonAgendaBearbeiten.Glyph); ImageList1.GetBitmap(18, ButtonAgendaNeu.Glyph); ImageList1.GetBitmap(5, ButtonAgendaLoeschen.Glyph); Panel1.Height:=round(PanelAgenda.Height*0.21); PanelZeitraum.Width:=round(PanelAgenda.Width*0.45); GridZeitraum.ColWidths[0]:=25; GridZeitraum.ColWidths[1]:=round((GridZeitraum.Width)*0.20); GridZeitraum.ColWidths[2]:=round((GridZeitraum.Width)*0.20); GridZeitraum.ColWidths[3]:=round((GridZeitraum.Width)*0.41); GridZeitraum.ColWidths[4]:=(GridZeitraum.Width-GridZeitraum.ColWidths[0]- GridZeitraum.ColWidths[1]-GridZeitraum.ColWidths[2])- GridZeitraum.ColWidths[3]-25; //PanelZiele GridZiele.ColWidths[0]:=25; GridZiele.ColWidths[2]:=40; GridZiele.ColWidths[1]:=Gridziele.Width-GridZiele.ColWidths[0]- GridZiele.ColWidths[2]-25; //Übershriften //Zeitraum GridZeitraum.Cells[0,0]:='Nr'; GridZeitraum.Cells[1,0]:='Von'; GridZeitraum.Cells[2,0]:='Bis'; GridZeitraum.Cells[3,0]:='Ort'; GridZeitraum.Cells[4,0]:='KW'; GridZiele.Cells[0,0]:='Nr'; GridZiele.Cells[1,0]:='Ziel'; GridZiele.Cells[2,0]:='Status'; end; procedure TWSAgenda.Planner1ItemDelete(Sender: TObject; Item: TPlannerItem); begin Planner1.FreeItem(Item); end; procedure TWSAgenda.Planner1ItemInsert(Sender: TObject; Position, FromSel, FromSelPrecise, ToSel, ToSelPrecise: Integer); begin with Planner1.CreateItemAtSelection do begin Text.Text:='Item created at runtime on '+Formatdatetime('hh:nn dd/mm/yyyy',Now); Update; end; end; procedure TWSAgenda.ButtonAGendaBearbeitenClick(Sender: TObject); begin if ButtonAgendaBearbeiten.Caption='Bearbeiten' then begin ButtonAgendaBearbeiten.Caption:='Speichern'; ButtonAgendaBearbeiten.Glyph:=nil; ImageList1.GetBitmap(29, ButtonAgendaBearbeiten.Glyph); ButtonAgendaNeu.Visible:=true; ButtonAgendaLoeschen.Visible:=true; end else begin ButtonAgendaBearbeiten.Caption:='Bearbeiten'; ButtonAgendaBearbeiten.Glyph:=nil; ImageList1.GetBitmap(64, ButtonAgendaBearbeiten.Glyph); ButtonAgendaNeu.Visible:=false; ButtonAgendaLoeschen.Visible:=false; end; end; procedure TWSAgenda.ButtonAgendaLoeschenClick(Sender: TObject); begin PostKeyEx32(VK_delete, [], False); end; procedure TWSAgenda.ButtonAgendaNeuClick(Sender: TObject); begin PostKeyEx32(VK_insert, [], False); end; procedure TWSAgenda.ButtonZeitraumBearbeitenClick(Sender: TObject); begin if ButtonZeitraumBearbeiten.Caption='Bearbeiten' then begin ButtonZeitraumBearbeiten.Glyph:=nil; ImageList1.GetBitmap(29, ButtonZeitraumBearbeiten.Glyph); ButtonZeitraumBearbeiten.Caption:='Speichern'; ButtonZeitraumNeu.Visible:=true; ButtonZeitraumLoeschen.Visible:=true; end else begin ButtonZeitraumBearbeiten.Caption:='Bearbeiten'; ButtonZeitraumBearbeiten.Glyph:=nil; ImageList1.GetBitmap(64, ButtonZeitraumBearbeiten.Glyph); ButtonZeitraumNeu.Visible:=false; ButtonZeitraumLoeschen.Visible:=false; end; end; procedure TWSAgenda.ButtonZeitraumLoeschenClick(Sender: TObject); begin showmessage(inttostr(Panel3.Font.Size)+','+inttostr(Panel6.font.Size)); end; procedure TWSAgenda.ButtonZieleBearbeitenClick(Sender: TObject); begin if ButtonZieleBearbeiten.Caption='Bearbeiten' then begin ButtonZieleBearbeiten.Caption:='Speichern'; ButtonZieleBearbeiten.Glyph:=nil; ImageList1.GetBitmap(29, ButtonZieleBearbeiten.Glyph); ButtonZieleNeu.Visible:=true; ButtonZieleLoeschen.Visible:=true; end else begin ButtonZieleBearbeiten.Caption:='Bearbeiten'; ButtonZieleBearbeiten.Glyph:=nil; ImageList1.GetBitmap(64, ButtonZieleBearbeiten.Glyph); ButtonZieleNeu.Visible:=false; ButtonZieleLoeschen.Visible:=false; end; end; end. Die Procedure soll eigentlich nur zwei Speedbuttons sicht bzw. unsichtbar machen und die Icons auf den Speedbutton steuern... |
AW: ButtonClick wird nicht ausgeführt
Funktioniert den irgendein Event bei diesen Buttons? Sind diese aktiv?
|
AW: ButtonClick wird nicht ausgeführt
Wie gross ist die CPU-Last?
|
AW: ButtonClick wird nicht ausgeführt
D.h. wenn Du einen Haltepunkt in die jeweils erste Zeile der Methode setzt, wird dieser nicht angesprungen? Übrigens ist es eher suboptimal, die Caption eines Buttons abzufragen und entsprechend zu reagieren, Du verlagerst damit die Logik in die Darstellung.
|
AW: ButtonClick wird nicht ausgeführt
Geh doch mal im Objektinspektor auf Ereignisse und guck dort ob unter OnClick deine procedure eingetragen ist.
|
AW: ButtonClick wird nicht ausgeführt
Laut Screenshot im Ausgangspost ist das der Fall, sonst wäre das auch mein erster Verdacht gewesen.
|
AW: ButtonClick wird nicht ausgeführt
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Zusammen,
vielen Dank für die Unterstützung! @mkinzler Zitat:
Die Button.Enable ist auf true gesetzt. @hathor Zitat:
@DeddyH Zitat:
Zitat:
@Zyklame Zitat:
Ich hoffe, alle Fragen vollständig beantwortet zu haben. Gruß Ykcim |
AW: ButtonClick wird nicht ausgeführt
Hallo,
wenn Du Dein Programm ausserhalb von Delphi ausführst - verhält es sich dann anders? Grüße Klaus |
AW: ButtonClick wird nicht ausgeführt
Nein, es verhält sich genau wie in Delphi - es tut sich bei den beiden Buttons nichts.
Das Problem ist, dass das jetzt schon öfter der Fall war und ich dann die Buttons neu erstellt habe... Aber auf Dauer ist das auch nichts... |
AW: ButtonClick wird nicht ausgeführt
Zumindest mir gehen die Ideen aus. Updatemäßig bist Du aktuell?
|
AW: ButtonClick wird nicht ausgeführt
.. und wenn Du einen Haltepunkt in die onClick Routine setzt bleibt dieser dann rot
nachdem Du das Programm gestartet hast? Grüße Klaus |
AW: ButtonClick wird nicht ausgeführt
Kann es sein, dass dein Formular, auf welches du den Frame platzierst, den Klick deiner Buttons abfängt?
|
AW: ButtonClick wird nicht ausgeführt
@Klaus01
Ja, der Haltepunkt bleibt rot. @gmc616 Interessante Idee. Wie kann ich das testen und woran erkenne ich das? Der Name des Buttons kommt in dem Ganzen Projekt nur einmal vor. @DeddyH Nein, ich habe noch nicht alle Updates durchgeführt. Aber dieser Fehler müsste ja dann bekannt sein, oder? Gruß Ykcim |
AW: ButtonClick wird nicht ausgeführt
Haben alle Buttons, den selben Parent/Owner?
|
AW: ButtonClick wird nicht ausgeführt
Wie bekomme ich raus, wer der Parent ist. Im OI gibt es keine Möglichkeit dafür...
|
AW: ButtonClick wird nicht ausgeführt
Ist in der Strukturansicht ersichtlich
|
AW: ButtonClick wird nicht ausgeführt
.. ein Schuss ins Blaue - kann das etwas mit den LiveBindings zu tun haben?
Grüße Klaus |
AW: ButtonClick wird nicht ausgeführt
Liste der Anhänge anzeigen (Anzahl: 1)
@mkinzler
Nein, dann haben sie nicht alle den gleichen Owner - siehe Anhang. Aber um noch einmal auf die Frage von gmc616 zurückzukommen: Ich habe ein Hauptformular, auf dem in PageControls verschiedene Frames liegen. Auf einem dieser Frames ist ein weiteres Frame mit eingebunden, um das es hier geht. Also Form --> Frame --> Frame (hier passiert der Fehler) Kann das Fehler verursachen? @Klaus01 Mit LiveBindings arbeite ich nicht - damit kenne ich mich garnicht aus... |
AW: ButtonClick wird nicht ausgeführt
Sind da irgendwo Actions verbaut?
Wäre es nicht soeine blöde Starter, dann hätte ich empfohlen mal die Debug-DCUs zu aktivieren und einen Haltepunkt in die Button-Klick-Methode der VCL reinzumachen. |
AW: ButtonClick wird nicht ausgeführt
Hört auf nachzudenken: Ich habe gerade das Frame mal direkt im HauptForm platziert und siehe da, jetzt funktioniert es.
Kann mir jemand erklären, was da passiert? Ist das ein no-go, wenn ich ein Frame in einem Frame platziere? Danke Ykcim |
AW: ButtonClick wird nicht ausgeführt
Liste der Anhänge anzeigen (Anzahl: 2)
Korrektur!
Ich habe das Frame gerade aus dem anderen Frame herausgelöscht und wieder neu eingesetzt - dann funktioniert es fast wieder. Warum kann das sein? Das fast deshalb, weil er irrationaler Weise bei dem einen Button die Reihenfolge der Buttons vertauscht und erst ab dem zweiten Mal sie wieder korrek anordnet. Das erste Mal drücken: Anhang1 Press1.jpg Das zweite Mal drücken: Anhang2 Press2.jpg Warum???
Delphi-Quellcode:
Vielen Dank
if ButtonZeitraumBearbeiten.Caption='Bearbeiten' then
begin ButtonZeitraumBearbeiten.Glyph:=nil; ImageList1.GetBitmap(29, ButtonZeitraumBearbeiten.Glyph); ButtonZeitraumBearbeiten.Caption:='Speichern'; ButtonZeitraumNeu.Visible:=true; ButtonZeitraumLoeschen.Visible:=true; end else begin ButtonZeitraumBearbeiten.Caption:='Bearbeiten'; ButtonZeitraumBearbeiten.Glyph:=nil; ImageList1.GetBitmap(64, ButtonZeitraumBearbeiten.Glyph); ButtonZeitraumNeu.Visible:=false; ButtonZeitraumLoeschen.Visible:=false; end; Ykcim |
AW: ButtonClick wird nicht ausgeführt
Ich hatte bei einem Projekt mit ähnlichen Problemen zu kämpfen, schlussendlich habe ich mich wieder von den Frames abgewendet.
Zitat:
|
AW: ButtonClick wird nicht ausgeführt
Ich habe jetzt mein Programm so umgebaut, dass ich keine Frames auf Frames mehr habe, sondern wennn noch Frames, dann direkt auf dem Hauptformular.
Damit ist der Fehler weg und alles klappt wieder so wie gewünscht. Vielen Dank an Alle für die Unterstützung. Gruß und noch einen schönen Abend Ykcim |
AW: ButtonClick wird nicht ausgeführt
Ich kenne das Problem.
Man baut einen Frame mit einem Button drauf und definiert ein OnClick-Event (TFrame1.OnButton1Click). Danach baut man den Frame in eine Form ein. Der Button funzt im Programm, alles bestens. Jetzt kann man aber dem Button auf dem Frame ein weiters OnClick-Event in der Form zuweisen (TForm1.OnFrame1Button1Click). Klick man dann im Programm auf diesen Button, wird nicht die OnClick-Prodedure des Frames gerufen, sondern die der Form. Und wenn im TForm1.OnFrame1Button1Click kein Code steht ... :zwinker: Ich denke genau das ist hier der Fall. Nun kann es passieren, dass man beim basteln die Form und den Frame in der IDE verwechselt, schließlich sehen beide "Fenster" fast gleich aus. Ein einfacher Doppelklick auf dem Button des Frames in der Form-Ansicht reicht, damit die IDE ein TForm1.OnFrame1Button1Click einfügt und damit quasi den TFrame1.OnButton1Click überschreibt. Normalerweise, wenn in diesen Event-Proceduren kein Code steht, entfernt die IDE diese Events und Proceduren wieder automatisch beim speichern bzw kompilieren, so das das eigentliche Event (des Frames) wieder "ziehen" müsste. Normalerweise ... , allerdings nicht immer, zb. dann, wenn ein Syntax-Fehler im Code der Form enthalten ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz