![]() |
OnClick zur Runtime zuweisen
versuch grad einen History Funktion in mein Programm zu integrieren fü 10 Einträge
das Hinzufügen in ein MainMenu klappt
Delphi-Quellcode:
nun brauch ich für das OnClick auf die selben
var
x,y,HC : Integer; s,b : String; vName,Item : TMenuItem; ......... IniFile.WriteInteger('History','Count',HC+1); IniFile.WriteString('History',InttoStr(HC),'@'+NodeForDB+'@'+s+'@'); frmMain.History1.Clear; for HC := 0 to 10 do begin vName := TMenuItem.Create(Menu); b := IniFile.ReadString('History',InttoStr(HC),b); vName.Caption:=GetToken(b, '@', 3); // Entry versuche das grad so
Delphi-Quellcode:
+
// vName.OnClick := (frmMain.TreeView1.Selected := frmSearch.TreeItemSearch(frmMain.TreeView1,vname.Caption));
das führt aber zu Zitat:
|
Re: OnClick zur Runtime zuweisen
Du brauchst auch eine Methode mit der passenden Signatur
|
Re: OnClick zur Runtime zuweisen
Ähm wie bitte
|
Re: OnClick zur Runtime zuweisen
Mit Grundlagen hat man es scheinbar heutzutage nicht mehr so. Unter Signatur versteht man die Anzahl und Typen von Parametern und Rückgabewerten eine Prozedur/Funktion/Methode
|
Re: OnClick zur Runtime zuweisen
OnClick ist ein TNotifyEvent
Und das ist so definiert das es eine methode (procedure/funktion einer Klasse) sein muss ohne rückgabewert und mit einem Parameter vom Typ TObject. Wenn du diese Bedingungen erfüllst geht:
Delphi-Quellcode:
objectinstanz.OnClick = ClickMethode;
|
Re: OnClick zur Runtime zuweisen
Die Frage habe ich mir auch schon mal gestellt.
Aber warum klappt dann folgender Code nicht:
Delphi-Quellcode:
Meldung:
procedure ClickCustom(Sender: TObject);
begin ShowMessage('Test'); end; procedure TForm1.Button1Click(Sender: TObject); var A: Array of TButton; i: integer; begin SetLength(A,20); for i := 0 to Length(A)-1 do begin A[i] := TButton.Create(self); A[i].parent := Self; A[i].Top := i*3; A[i].Left := i*3; A[i].OnClick := clickcustom; A[i].Visible := true; end; end;
Code:
EDIT: Sinnvoll ist dieser Code nicht...
Inkompatible Typen: Methodenzeiger und reguläre Prozedur
|
Re: OnClick zur Runtime zuweisen
Wie der Compiler schon sagt: Du brauchst eine Methode und keine regüläre Procedure. Methode gibt es nur innerhalb von Klassen und sind die Procedure/Function von Klassen. Eine reguläre Procedure/Function ist eigenständig und gehört zu keiner Klasse.
|
Re: OnClick zur Runtime zuweisen
Okay überredet. Es funktioniert:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure ClickCustom(Sender:TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.ClickCustom(Sender: TObject); begin ShowMessage('Test'); end; procedure TForm1.Button1Click(Sender: TObject); var A: Array of TButton; i: integer; begin SetLength(A,200); for i := 0 to Length(A)-1 do begin A[i] := TButton.Create(self); A[i].parent := Self; A[i].Top := i*3; A[i].Left := i*3; A[i].OnClick := clickcustom; A[i].Visible := true; end; end; end. |
Re: OnClick zur Runtime zuweisen
Das begreif ich nicht
Delphi-Quellcode:
for HC := 0 to 10 do
begin vName := TMenuItem(Menu); b := IniFile.ReadString('History',InttoStr(HC),b); with vName do begin Visible := true; vName.Caption:=GetToken(b, '@', 3); // Entry Name := 'Item1'+InttoStr(HC); //Das Item Muss schon Existieren? // Parent := frmMain; frmMain.Item11.OnClick :=showmessage('test');//das Onclick ereignis existiert bereits und soll mit Showmessage.. überschrieben werden? weil ich zum jetzigen zeitpunkt ja noch nicht weiß was es machen soll frmMain.History1.Add(vName); |
Re: OnClick zur Runtime zuweisen
Du scheinst unsere Beiträge glatt zu ignorieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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