Delphi-PRAXiS

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.

Gehstock 5. Okt 2007 16:31

Re: OnClick zur Runtime zuweisen
 
nein wie schon erwähnt verstehe ich nicht wie ich sie umsetzen kann

mkinzler 5. Okt 2007 16:37

Re: OnClick zur Runtime zuweisen
 
Delphi-Quellcode:
procedure TfrmNain.Klicker( Sender: TObject);
begin
    showmessage('test');//das Onclick ereignis
end;
...
frmMain.Item11.OnClick := frmMain.Klicker;

Gehstock 5. Okt 2007 16:45

Re: OnClick zur Runtime zuweisen
 
aber wie ich schon schrieb weiß ich ja jetzt noch nicht wie das onclick ereignis aussieht

der Plan der ganzen Sache ist das ich die letzten 10 klicks in einen Treeview als History speichere diese wird im Mainmenü abgelegt was auch schonmal klappt nun soll aber beim klick auf einen dieser Einträge der Treeview diesen Eintrag wieder anzeigen der wiederum eine Datenbankabfrage auslöst ergo sieht das onClick ereignis doch jedesmal anders aus

mkinzler 5. Okt 2007 16:49

Re: OnClick zur Runtime zuweisen
 
Nein warum? Du musst nur anders an die Sache rangehen und die 10 Clicks in einer liste zwischenspeichern.

Gehstock 5. Okt 2007 17:05

Re: OnClick zur Runtime zuweisen
 
Delphi-Quellcode:
frmMain.TreeView1.Selected := frmSearch.TreeItemSearch(frmMain.TreeView1,[b]vname.Caption[/b])
kann ich zur Runtime statt

Delphi-Quellcode:
vname.Caption
auch die Caption vom gedrückten Item zuweisen wenn ja wie

mkinzler 5. Okt 2007 17:20

Re: OnClick zur Runtime zuweisen
 
Wie meinst du das?


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