AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ereignisse

Ein Thema von michback · begonnen am 17. Dez 2009 · letzter Beitrag vom 18. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#1

Ereignisse

  Alt 17. Dez 2009, 19:06
Ich benutze in meinem Programm die Ereignisse. wie z.B. onclick und co.


Wenn das Objekt bereits da ist kann man auf dieses klicken und das Ereignis per maus erstellen.

Jetzt erzeuge ich jedoch dynamisch ein Objekt und möchte auch die Ereignisse nutzen.

Dafür habe ich eine Procedure

Delphi-Quellcode:
procedure testlauf(sender: TObject);
begin
form1.Caption:='Der Test ist ok';
end;
Wenn die Form1 erzeugt wird habe ich folgendes Deklariert

windowsmediaplayer1.OnStatusChange:=testlauf; //das Ergeigniss Statusänderung wird def Es kommt die Fehlermeldung : E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'

Wie muss ich die Procedure deklarieren um die Ergebnisse zu nutzen ?
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Ereignisse

  Alt 17. Dez 2009, 19:11
Die Prozedur muss eine Methode sein, das heißt sie muss als Member einer Klasse deklariert sein. Beispiel:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    procedure testlauf(sender: TObject);
  end;

// ...

procedure TForm1.testlauf(sender: TObject);
begin
form1.Caption:='Der Test ist ok';
end;
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#3

Re: Ereignisse

  Alt 17. Dez 2009, 19:20
Das hatte ich bereits gemacht leider ohner Erfolg

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Grids, jpeg, ExtCtrls, OleCtrls, WMPLib_TLB,
  AXVLC_TLB, Outline, DirOutln, FileCtrl, ShlObj, ActiveX, Registry;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    PageControl2: TPageControl;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    Image1: TImage;
    TabSheet8: TTabSheet;
    PageControl4: TPageControl;
    TabSheet9: TTabSheet;
    RadioGroup1: TRadioGroup;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    TabSheet10: TTabSheet;
    PageControl3: TPageControl;
    TabSheet5: TTabSheet;
    StringGrid1: TStringGrid;
    TabSheet6: TTabSheet;
    Button1: TButton;
    ListBox1: TListBox;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer;
      var Resize: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);

    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure FormResize(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure RadioButton3Click(Sender: TObject);
    procedure TabSheet4Show(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TabSheet8Show(Sender: TObject);







  private
    { Private-Deklarationen }
    procedure testlauf(sender: TObject);

  public
    { Public-Deklarationen }
    end;



Delphi-Quellcode:
var
  Form1: TForm1;
  Vorschauname1,Vorschauname2,Vorschauname3,row:string;
  oi:integer;
  ausschalt:boolean;
  VLCPlugin1: TVLCPlugin;
  blVLCPluginFound: boolean;
  mediaplayerPluginFound:boolean;
  WindowsMediaPlayer1: TWindowsMediaPlayer;




Oder muss ich dem Windowsmediaplayer die procedure zuordnen ?















----------------------------------------
Die Class wäre ja TWindowsmediaplayer aber so kann ich die Procedur nicht zuordnen.
Delphi-Quellcode:
 type
  TWindowsMediaPlayer1 = class(TWindowsMediaPlayer)
  private
    procedure testlauf(sender: TObject);
  end;
Ich denke mal ich habe da einen Denkfehler wie an dieser Stelle Delphi arbeitet.
  Mit Zitat antworten Zitat
MarioM.

Registriert seit: 29. Mai 2006
52 Beiträge
 
#4

Re: Ereignisse

  Alt 17. Dez 2009, 19:55
Zitat von michback:
Oder muss ich dem Windowsmediaplayer die procedure zuordnen ?
Ja

Zitat von michback:
Die Class wäre ja TWindowsmediaplayer aber so kann ich die Procedur nicht zuordnen.
Nimm die Zuweisung im Create-Event des Mediaplayers vor.
Delphi-Quellcode:
constructor TWindowsMediaPlayer1.Create(AOwner: TComponent);
begin
   inherited;

   OnStatusChange := testlauf;
end;
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#5

Re: Ereignisse

  Alt 17. Dez 2009, 20:10
Zitat von michback:
Wie muss ich die Procedure deklarieren um die Ergebnisse zu nutzen ?
Tipp mal Folgendes ein:

windowsmediaplayer1.OnStatusChange( Nachdem du die Klammer aufgemacht hast, sollte dir die Delphi IDE Hilfe zu den Parametern anbieten.

Falls nicht musst du sie dir irgendwo im Netz suchen. Musst einfach das Ereignis - wie oben schon beschrieben - als Methode des Form1 deklarieren und die richtigen Parameter einsetzen.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Ereignisse

  Alt 17. Dez 2009, 20:31
Zitat von MarioM.:
Zitat von michback:
Oder muss ich dem Windowsmediaplayer die procedure zuordnen ?
Ja

Zitat von michback:
Die Class wäre ja TWindowsmediaplayer aber so kann ich die Procedur nicht zuordnen.
Nimm die Zuweisung im Create-Event des Mediaplayers vor.
Delphi-Quellcode:
constructor TWindowsMediaPlayer1.Create(AOwner: TComponent);
begin
   inherited;

   OnStatusChange := testlauf;
end;
Nein!

Sicher, dass es ein OnStatusChange gibt?

Delphi-Quellcode:
property OnClick: EMPNotify read FOnClick write FOnClick;
property OnContextPopup;
property OnEnter;
property OnExit;
property OnMouseEnter;
property OnMouseLeave;
property OnPostClick: EMPPostNotify read FOnPostClick write FOnPostClick;
property OnNotify: TNotifyEvent read FOnNotify write FOnNotify;
Ansonsten habe ich im Internet noch folgendes gefunden:

TWMStatusChangeEvent = procedure(const State: WideString) of Object;
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
MarioM.

Registriert seit: 29. Mai 2006
52 Beiträge
 
#7

Re: Ereignisse

  Alt 17. Dez 2009, 20:55
Was heißt hier
Zitat von dominikkv:
Nein!


Bevor Du meine Aussage in Frage stellst, solltest Du Dir erstmal darüber im Klaren sein, um welches Control es hier geht

Zitat von dominikkv:
Sicher, dass es ein OnStatusChange gibt?

Delphi-Quellcode:
property OnClick: EMPNotify read FOnClick write FOnClick;
property OnContextPopup;
property OnEnter;
property OnExit;
property OnMouseEnter;
property OnMouseLeave;
property OnPostClick: EMPPostNotify read FOnPostClick write FOnPostClick;
property OnNotify: TNotifyEvent read FOnNotify write FOnNotify;
Du postest hier Events der TMediaPlayer-Komponente; die ist aber nicht Thema dieses Beitrages!
Die Komponente, um die es hier geht, nämlich TWindowsMediaPlayer, besitzt sehr wohl ein Event namens OnStatusChange.

Nun sage mir, was an meinem Beitrag #4 falsch ist.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Ereignisse

  Alt 17. Dez 2009, 23:17
OK, dass das 2 unterschiedliche Klassen sind wusste ich nicht, mein Fehler!

Und ich hab auch grad kein Delphi da um das nachzuschauen, trotzdem sieht das was du da machst... sagen wir "suboptimal" aus.

Ich gehe mal davon aus, dass TWindowsMediaPlayer eine Klasse ist. Diese hat scheinbar das Event OnStatusChange. Wenn man bei diesem Event jetzt was machen will, warum sollte man extra für dieses Ereignis die Klasse ableiten und das im Constructor regeln? Viel einfacher wäre doch ein
Delphi-Quellcode:
MyWindowsMediaPlayer := TWindowsMediaPlayer.Create();
MyWindowsMediaPlayer.OnStatusChange := MeineStatusChangeMethode;
Außerdem... ist TWindowsMediaPlayer1 bei dir eine Klasse oder eine Instanz?
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
michback

Registriert seit: 23. Nov 2007
35 Beiträge
 
#9

Re: Ereignisse

  Alt 18. Dez 2009, 05:38
Zitat von dominikkv:
OK, dass das 2 unterschiedliche Klassen sind wusste ich nicht, mein Fehler!

Und ich hab auch grad kein Delphi da um das nachzuschauen, trotzdem sieht das was du da machst... sagen wir "suboptimal" aus.

Ich gehe mal davon aus, dass TWindowsMediaPlayer eine Klasse ist. Diese hat scheinbar das Event OnStatusChange. Wenn man bei diesem Event jetzt was machen will, warum sollte man extra für dieses Ereignis die Klasse ableiten und das im Constructor regeln? Viel einfacher wäre doch ein
Delphi-Quellcode:
MyWindowsMediaPlayer := TWindowsMediaPlayer.Create();
MyWindowsMediaPlayer.OnStatusChange := MeineStatusChangeMethode;
Außerdem... ist TWindowsMediaPlayer1 bei dir eine Klasse oder eine Instanz?



So habe ich es ja bereits versucht. Siehe Oben leider ohne Erfolg
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Ereignisse

  Alt 18. Dez 2009, 09:00
Zitat von michback:
So habe ich es ja bereits versucht. Siehe Oben leider ohne Erfolg
Oben steht eine ganze Menge und was heißt "ohne Erfolg"?
Delphi-Quellcode:
TForm1 = class(TForm)
{...}
  procedure MeineStatusChangeMethode(Sender: TObject);
end;

implementation

{...}
procedure TForm1.MachMediaplayer;
begin
  MyWindowsMediaPlayer := TWindowsMediaPlayer.Create();
  MyWindowsMediaPlayer.OnStatusChange := {Self.}MeineStatusChangeMethode;
end;
Wird eigentlich immer so gemacht.
  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 19:23 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