Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem beim Zuweisen einer Procedure (Menüs) (https://www.delphipraxis.net/32198-problem-beim-zuweisen-einer-procedure-menues.html)

Doc Morelli 20. Okt 2004 11:44


Problem beim Zuweisen einer Procedure (Menüs)
 
Hi @ll,

Delphi-Quellcode:
procedure RunProgram(str: String);
begin
{Hier wird dann das Programm, welches unter dem Pfad str zu finden
ist gestartet}
end;

procedure TForm1.Button1Click(Sender: TObject);
var m: TMenuItem;
    i: integer;
begin
for i := 1 to 10 do begin
    m := TMenuItem.Create(PopupMenu1.Items[0]);
    m.Caption := 'SubItem' + inttostr(i);
    m.Name := 'Name' + inttostr(i);
    m.OnClick := RunProgram('C:\...');
    item1.Add(m);
end;
end;
Ich will mehrere Untermenüs zu einem bestimmten Menü anlegen. Jedes Untermenü soll dann ein anderes Programm öffnen können. Nur gibt es bei:
Delphi-Quellcode:
    m.OnClick := RunProgram('C:\...');
immer folgenden Fehler:
Zitat:

[Fehler] Unit1.pas(45): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter'
Wie kann ich jetzt m.OnClick die entsprechene Procedure zuweisen???

MFG Doc

jim_raynor 20. Okt 2004 11:54

Re: Problem beim Zuweisen einer Procedure (Menüs)
 
Du musst eine eigene Procedure machen:

Delphi-Quellcode:
procedure TForm1.OnMenuClick(Sender: TObject);
begin
.
.
.
end;
Diese kannst du dann dem Onclick Eregniss zuweisen.

Kleiner Hinweis. Wenn du in der Delphi Hilfe ein Event anschaust, siehst du immer wie die entsprechende Funktion/Procedure definiert sein muss.

Stevie 20. Okt 2004 11:58

Re: Problem beim Zuweisen einer Procedure (Menüs)
 
Hi,

so müsste es funzen:
Delphi-Quellcode:
TForm1 = class(TForm)
{...}
private
  ProgList: TStrings;
  procedure MyOnClick(Sender: TObject);
end;

procedure FindProgramm(List: TStrings; AObject: TObject);
var
  i: Integer;
begin
  for i := 0 to Pred(List.Count) do
    if List.Objects[i] = AObject then
    begin
      Result := List[i];
      Break;
    end;
end;

procedure TForm1.MyOnClick(Sender: TObject);
var
  ProgName
begin
  ProgName := FindProgramm(ProgList, Sender);
  if ProgName <> '' then
    RunProgramm(String);
end;

procedure TForm1.Button1Click(Sender: TObject);
var m: TMenuItem;
    i: integer;
begin
for i := 1 to 10 do begin
    m := TMenuItem.Create(PopupMenu1.Items[0]);
    m.Caption := 'SubItem' + inttostr(i);
    m.Name := 'Name' + inttostr(i);
    m.OnClick := MyOnClick;
    ProgList.AddObject(C:\...', m);
    item1.Add(m);
end;

DP-Maintenance 20. Okt 2004 16:28

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Windows API" nach "VCL-Komponenten und Controls" verschoben.
Kein Windows API Problem


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