AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Eigene Funktion über ereigniss aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Funktion über ereigniss aufrufen

Ein Thema von Tigermoon · begonnen am 14. Nov 2005 · letzter Beitrag vom 15. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
Tigermoon

Registriert seit: 11. Mär 2005
Ort: Baumholder
100 Beiträge
 
Delphi 7 Enterprise
 
#1

Eigene Funktion über ereigniss aufrufen

  Alt 14. Nov 2005, 10:01
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:
   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;
Frage
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
Stephanie
  Mit Zitat antworten Zitat
WoTo

Registriert seit: 28. Jun 2004
Ort: Rotenburg (Wümme)
102 Beiträge
 
Delphi 2005 Enterprise
 
#2

Re: Eigene Funktion über ereigniss aufrufen

  Alt 14. Nov 2005, 10:25
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
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#3

Re: Eigene Funktion über ereigniss aufrufen

  Alt 14. Nov 2005, 10:27
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:
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;
Und so kommst du später noch an die Nummer des Bilds:
Delphi-Quellcode:
procedure TMainFrm.aufdeckenOnClick(Sender: TObject);
var
  BildNummer : integer;
begin
  BildNummer := (Sender as TImage).Tag;
  { und so weiter... }
end;
ACHTUNG: Prozeduren und Funktionen, die auf Events (OnClick, OnMouseOver, usw...) reagieren, müssen Methoden von Klassen sein!
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Eigene Funktion über ereigniss aufrufen

  Alt 14. Nov 2005, 10:32
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;
  Mit Zitat antworten Zitat
Tigermoon

Registriert seit: 11. Mär 2005
Ort: Baumholder
100 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Eigene Funktion über ereigniss aufrufen

  Alt 14. Nov 2005, 10:34
Vielen Dank für die schnelle hilfe

versuche das mal
wenns ned geht komme ich wieder...
Stephanie
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#6

Re: Eigene Funktion über ereigniss aufrufen

  Alt 14. Nov 2005, 10:48
Zitat von pszopp:
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;
Wenn du schon weißt, dass es ein Bild ist (Sender is TImage), dann kannst du gleich direkt casten mit TImage(Sender). Die Überprüfung des as-Operators hat sich dann ja erledigt.
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Eigene Funktion über ereigniss aufrufen

  Alt 14. Nov 2005, 10:51
sicher ist sicher!
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#8

Re: Eigene Funktion über ereigniss aufrufen

  Alt 14. Nov 2005, 19:05
Zitat von pszopp:
sicher ist sicher!
So ein Unsinn.
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Eigene Funktion über ereigniss aufrufen

  Alt 15. Nov 2005, 11:11
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.
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Eigene Funktion über ereigniss aufrufen

  Alt 15. Nov 2005, 11:40
Zitat:
Wenn du schon weißt, dass es ein Bild ist (Sender is TImage), dann kannst du gleich direkt casten mit TImage(Sender). Die Überprüfung des as-Operators hat sich dann ja erledigt.
Das habe ich anscheinend falsch verstanden:
Ich nehme an, dass folgendes Beispiel gemeint war:


Delphi-Quellcode:
IF (Sender IS TImage) THEN BEGIN
  TImage(Sender).Visible:=False;
END;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:50 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