![]() |
Eigene Funktion über ereigniss aufrufen
Guten Morgen,
Nach klick auf einen Button erzeuge ich 24 Bilder diesen Bilder möchte ich per OnClickeieigniss eine eigengeschriebene Funktion übergeben mit einem Parameter
Delphi-Quellcode:
Frage
while zaehlen <= 24 do
begin Bild[zaehlen] := TImage.Create(Memoryfeld); Bild[zaehlen].Parent := Memoryfeld; Bild[zaehlen].Picture.loadfromfile('back.jpg'); Bild[zaehlen].Top := top; Bild[zaehlen].left := left; Bild[zaehlen].Visible := true; Bild[zaehlen].Cursor := crHandPoint; // -->> Bild[zaehlen].OnClick := aufdeckenOnClick(zaehlen); left := left + 120; if anzahl = 6 then begin top := top + 100; left := 50; anzahl := 0; end; anzahl := anzahl + 1; zaehlen := zaehlen + 1; end; was ist daran falsch? als fehlermeldung erhalte ich das hier [Fehler] Spielfeld.pas(69): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter' die Funktion ist vorhanden und deklariert... Tigermoon |
Re: Eigene Funktion über ereigniss aufrufen
Hallo,
du mußt einfach den Klammerausdruck weglassen, da du dem ONCLICK-Ereigniss nur die Adresse der FDunktion zuweisen mußt. Also so etwa: Bild[zaehlen].OnClick := aufdeckenOnClick; MfG Wolfgang |
Re: Eigene Funktion über ereigniss aufrufen
Hi.
Genau. Ereignisse (OnClick) sind nicht gespeicherte Aufrufe von Prozeduren und Funktionen "für später", sondern Zeiger auf Methoden. Deshalb funktioniert der Code so, wie du ihn eingegeben hast nicht. So sollte es funktionieren:
Delphi-Quellcode:
Und so kommst du später noch an die Nummer des Bilds:
procedure TMainFrm.BilderErstellen;
begin while zaehlen <= 24 do begin Bild[zaehlen] := TImage.Create(Memoryfeld); Bild[zaehlen].Parent := Memoryfeld; Bild[zaehlen].Picture.loadfromfile('back.jpg'); Bild[zaehlen].Top := top; Bild[zaehlen].left := left; Bild[zaehlen].Visible := true; Bild[zaehlen].Cursor := crHandPoint; Bild[zaehlen].OnClick := aufdeckenOnClick; // <-- ZEIGER auf die Prozedur Bild[zaehlen].Tag := zaehlen; // <-- Bildnummer speichern left := left + 120; if anzahl = 6 then begin top := top + 100; left := 50; anzahl := 0; end; anzahl := anzahl + 1; zaehlen := zaehlen + 1; end; end;
Delphi-Quellcode:
ACHTUNG: Prozeduren und Funktionen, die auf Events (OnClick, OnMouseOver, usw...) reagieren, müssen Methoden von Klassen sein!
procedure TMainFrm.aufdeckenOnClick(Sender: TObject);
var BildNummer : integer; begin BildNummer := (Sender as TImage).Tag; { und so weiter... } end; |
Re: Eigene Funktion über ereigniss aufrufen
Du musst dem OnClick Event eine Methode(Prozedur) zuweisen, die als Übergabewert eine Variable vom Typ
TObject erwartet. Sobald jemand auf das Image klickt, wird diese Methode aufgerufen. Dabei steht in Sender eine Referenz auf das Image, auf das geklickt wurde. schreibe also am besten so eine Methode:
Delphi-Quellcode:
PROCEDURE TForm1.OnImageClick(Sender:TObject);
BEGIN IF (Sender IS TImage) THEN BEGIN // (Sender AS TImage). // Hier kannst du etwas mit dem Bild machen. END; END; Eine solche Methode solltest du dann an das Image zuweisen können. Bild[zaehlen].OnClick := OnButtonClick; |
Re: Eigene Funktion über ereigniss aufrufen
Vielen Dank für die schnelle hilfe
versuche das mal wenns ned geht komme ich wieder... :-) |
Re: Eigene Funktion über ereigniss aufrufen
Zitat:
|
Re: Eigene Funktion über ereigniss aufrufen
sicher ist sicher!
|
Re: Eigene Funktion über ereigniss aufrufen
Zitat:
|
Re: Eigene Funktion über ereigniss aufrufen
In dem kleinen Beispiel mag es unsinnig sein, aber wenn ein Programm wächst,
könnte es schonmal vorkommen, dass das Event mit anderen Sender-Typen aufgerufen wird. |
Re: Eigene Funktion über ereigniss aufrufen
Zitat:
Ich nehme an, dass folgendes Beispiel gemeint war:
Delphi-Quellcode:
IF (Sender IS TImage) THEN BEGIN
TImage(Sender).Visible:=False; END; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 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 by Thomas Breitkreuz