Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi OnClick zur Runtime zuweisen (https://www.delphipraxis.net/100863-onclick-zur-runtime-zuweisen.html)

Gehstock 4. Okt 2007 21:03


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:
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
nun brauch ich für das OnClick auf die selben
versuche das grad so
Delphi-Quellcode:
// vName.OnClick := (frmMain.TreeView1.Selected := frmSearch.TreeItemSearch(frmMain.TreeView1,vname.Caption));
+

das führt aber zu
Zitat:

[DCC Fehler] DBtools.pas(124): E2010 Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter'

mkinzler 4. Okt 2007 21:14

Re: OnClick zur Runtime zuweisen
 
Du brauchst auch eine Methode mit der passenden Signatur

Gehstock 4. Okt 2007 21:15

Re: OnClick zur Runtime zuweisen
 
Ähm wie bitte

mkinzler 4. Okt 2007 21:18

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

SirThornberry 4. Okt 2007 21:52

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;

axelf98 4. Okt 2007 22:13

Re: OnClick zur Runtime zuweisen
 
Die Frage habe ich mir auch schon mal gestellt.
Aber warum klappt dann folgender Code nicht:
Delphi-Quellcode:
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;
Meldung:
Code:
Inkompatible Typen: Methodenzeiger und reguläre Prozedur
EDIT: Sinnvoll ist dieser Code nicht...

Muetze1 4. Okt 2007 22:16

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.

axelf98 4. Okt 2007 22:19

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.

Gehstock 5. Okt 2007 16:10

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);

mkinzler 5. Okt 2007 16:19

Re: OnClick zur Runtime zuweisen
 
Du scheinst unsere Beiträge glatt zu ignorieren.


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