Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Undefinierter Bezeichner: 'Sender' (https://www.delphipraxis.net/48494-undefinierter-bezeichner-sender.html)

Stony2k 26. Jun 2005 11:08


Undefinierter Bezeichner: 'Sender'
 
Ich habe eine Prozedur
Delphi-Quellcode:
procedure Tfrm_main.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
  begin
    sendText(befehle[1].befehl);
    image1.Picture:=img_btn_gedrueckt.Picture;
    Label1.Top:=Label1.Top+2;
    Label1.Left:=Label1.Left-1;
  end;
end;
und diese möchte ich nun über eine andere Prozedur aufrufen:
Delphi-Quellcode:
procedure Tfrm_main.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = id1 then
    Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
.
.
.
Leider bekomme ich nur Fehlermeldungen:
Delphi-Quellcode:
[Fehler] Unit_main.pas(323): Undefinierter Bezeichner: 'Sender'
[Fehler] Unit_main.pas(323): Anweisung erforderlich, aber Ausdruck vom Typ 'Class reference' gefunden
[Fehler] Unit_main.pas(323): '(' erwartet, aber ';' gefunden
[Fehler] Unit_main.pas(323): '(' erwartet, aber ';' gefunden
[Fehler] Unit_main.pas(324): ';' erwartet, aber 'IF' gefunden
[Fehler] Unit_main.pas(362): '.' erwartet, aber ';' gefunden
[Fataler Fehler] Befehlstool.dpr(9): Verwendete Unit 'Unit_main.pas' kann nicht compiliert werden
Da scheint wohl was an der parametern nicht zu stimmen.
Weiss hier vielleicht wer Rat ?

alcaeus 26. Jun 2005 11:12

Re: Undefinierter Bezeichner: 'Sender'
 
Moin Stony2k,

du darfst beim Aufruf der Funktion nicht die Parameter hinschreiben, sondern Werte uebergeben ;)

d.h. hier
Delphi-Quellcode:
Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
musst du eigentliche Werte uebergeben.

Greetz
alcaeus

malo 26. Jun 2005 11:14

Re: Undefinierter Bezeichner: 'Sender'
 
Du darfst nicht den ganzen Funktionskopf herauskopieren. Das Problem, das du hast, ist einfach, dass du keine Parameter übergibst. Parameter sind dafür da, Informationen an Prozeduren weiterzugeben. Ungetestet, aber so könnte es gehen:

Delphi-Quellcode:
Image1MouseDown(Frm_main, mbLeft, nil, 10, 10);

Stony2k 26. Jun 2005 13:55

Re: Undefinierter Bezeichner: 'Sender'
 
Ich verstehe..
nun ich habe mal die von dir Vorgeschlagenen Parameter genommen, bekomme aber nur eine Fehlermeldung:
Delphi-Quellcode:
[Fehler] Unit_main.pas(323): Inkompatible Typen: 'TShiftState' und 'Pointer'
Woran kann's liegen?

fred.reichbier 26. Jun 2005 14:00

Re: Undefinierter Bezeichner: 'Sender'
 
nimm
Delphi-Quellcode:
Image1MouseDown(Frm_main, mbLeft, [], 10, 10);

Nils_13 26. Jun 2005 14:04

Re: Undefinierter Bezeichner: 'Sender'
 
Ich kenne dein Programm nicht, also weiß ich nicht obs läuft. Probiers mal so.

Delphi-Quellcode:
procedure TForm1.down;
var
  Button: TMouseButton;
  Shift: TShiftState;
  X, Y: Integer;
begin
if Button = mbLeft then
  begin
    sendText(befehle[1].befehl);
    image1.Picture:=img_btn_gedrueckt.Picture;
    Label1.Top:=Label1.Top+2;
    Label1.Left:=Label1.Left-1;
  end;
end;

procedure TForm1.key;
var Msg: TWMHotKey
begin
  if Msg.HotKey = id1 then
    down;
    .
    .
    .
end;

{procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Down;
end;}    //unnötig

JasonDX 26. Jun 2005 14:11

Re: Undefinierter Bezeichner: 'Sender'
 
Zitat:

Zitat von Nils_13
Ich kenne dein Programm nicht, also weiß ich nicht obs läuft. Probiers mal so.

Delphi-Quellcode:
procedure TForm1.down;
var
  Button: TMouseButton;
  Shift: TShiftState;
  X, Y: Integer;
begin
if Button = mbLeft then
  begin
    sendText(befehle[1].befehl);
    image1.Picture:=img_btn_gedrueckt.Picture;
    Label1.Top:=Label1.Top+2;
    Label1.Left:=Label1.Left-1;
  end;
end;

procedure TForm1.key;
var Msg: TWMHotKey
begin
  if Msg.HotKey = id1 then
    down;
    .
    .
    .
end;

{procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Down;
end;}    //unnötig

Das klappt ganz sicher nicht.
Na ja, es geht vielleicht zu kompilieren, aber das Programm funktioniert dann nicht mehr.
1. Sollte die Down-Methode ein Ereignis sein. Das kann man jetzt bestimmt nicht mehr zuweisen, da die Parameter nicht mehr stimmen.
2. Die Parameter sind nicht nur Spaß-Variablen, die man sich auch selbst generieren kann, sondern da steht auch was drinnen :roll: . So erhält man die Warnung 'Button könnte nicht Initialisiert sein' oder ähnlich. Klar, ist es auch nicht, und somit gibt die Abfrage "if Button = mbLeft" bloß noch Mist -> Logischer Programmfehler.
Es geht also nicht nur, Syntaktische Fehler zu beseitigen, sondern auch die Funktionalität des Programms nicht einzuschränken :roll:

[edit=alcaeus]Wortwahl auf Wunsch angepasst, da die 24-Stunden-Grenze ueberschritten war. Mfg, alcaeus[/edit]

Stony2k 28. Jun 2005 10:01

Re: Undefinierter Bezeichner: 'Sender'
 
Zitat:

Zitat von Chimaira

{So erhält man die Warnung 'Button könnte nicht Initialisiert sein' oder ähnlich. Klar, ist es auch nicht, und somit gibt die Abfrage "if Button = mbLeft" bloß noch Bullshit -> Logischer Programmfehler.

Erhm wieso das? Das mit dem "if Button = mbLeft" funzt super und hat schon seinen Sinn, also bitte..

Achja und danke, da es nun mit den Parametern funzt :)

JasonDX 28. Jun 2005 12:04

Re: Undefinierter Bezeichner: 'Sender'
 
Zitat:

Zitat von Stony2k
Zitat:

Zitat von Chimaira

{So erhält man die Warnung 'Button könnte nicht Initialisiert sein' oder ähnlich. Klar, ist es auch nicht, und somit gibt die Abfrage "if Button = mbLeft" bloß noch Bullshit -> Logischer Programmfehler.

Erhm wieso das? Das mit dem "if Button = mbLeft" funzt super und hat schon seinen Sinn, also bitte..

Erhm, ja, die Abfrage ist kompilierbar. Aber schau mal, ob der Wert initialisiert wird. Nope. Schließlich ist das auch eine lokale Variable, und nicht ein Parameter -> nicht initialisiert -> ergibt Warnung und Sinnlose abfrage

um einen vergleich aufzustellen:
Delphi-Quellcode:
procedure a;
var
  b: integer;
begin
  if b = 10 then ;
end;
b wird nicht Initialisiert. Also kann in b auch 293, 2345 oder 938457 stehen. Man weiß es nicht, deshalb ist die If-abfrage nicht eindeutig.

Nils' Lösung würde funktionieren, wenn die Parameter nicht gebräucht werden würden. So aber funktioniert sie nicht.

Stony2k 28. Jun 2005 15:43

Re: Undefinierter Bezeichner: 'Sender'
 
Ich glaube du verwechselst da etwas.
1. Nein,e s gibt keine Fehlermeldung
2. Button ist in dem Fall schon in vordefenierter Wert in Delphi, der dazu dient, nur die linke Maustaste(in meinem Fall) zu zulassen, und muss(kann) in dem Fall nicht intialiesiert werden.
Aber les dir erstmal das hier durch: http://www.delphipraxis.net/internal...=384480#384480


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 1 von 2  1 2      

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