Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wozu TNotifyEvent oder TEvent? (https://www.delphipraxis.net/58794-wozu-tnotifyevent-oder-tevent.html)

Arnulf 12. Dez 2005 20:32


Wozu TNotifyEvent oder TEvent?
 
Hi
Ich beschäftige mich grad mit threads, events und windows messages.
Jetzt stell ich mir die Frage wozu ist ein TNotifyEvent gut?

Von dem Methoden ist mir klar man kann hald mit waitforsingleobjekt darauf warten aber viel mehr, als das setzen einer boolean variable ist das doch eigentlich auch nicht oder?.

Wozu wird das also verwendet? - die Frage stell ich mir eigentlich.
Arnulf

sh17 12. Dez 2005 20:36

Re: Wozu TNotifyEvent oder TEvent?
 
Ein TNotifyEvent ist einfach Ereignistyp folgender Form:

Delphi-Quellcode:
procedure (Sender : TObject) of object
Wo genau liegt den Dein Problem?

mirage228 12. Dez 2005 20:38

Re: Wozu TNotifyEvent oder TEvent?
 
Hi,

Delphi-Referenz durchsuchenTNotifyEvent wird hauptsächlich in der Delphi Komponenten und Klassentwicklung im Zusammenhang mit Benachrichtungen bzw. Ereignissen verwendet. Beispielsweise übergibt der Benutzer eine Prozedur, die der Deklaration von TNotifyEvent entsprecht, an das Objekt weiter, damit dieses bei bestimmten Ereignissen den Nutzercode aufrufen kann.
Welchen Zusammenhang Du da beschreibst, verstehe ich jedoch nicht...

mfG
mirage228

Arnulf 12. Dez 2005 20:47

Re: Wozu TNotifyEvent oder TEvent?
 
Naja eigentlich ist es genau das was ich machen will.
Aber ganz verstehen tu ich es nicht.
Ich möchte ein event für ein objekt generieren.
In meinem fall ein OnProgressBar - hier soll der bentzer einfach seine prozedur aufrufen können die eine ProgressBar weiterschiebt. Übergeben bekommt er nur den fortschritt in form eines integers.

Ich versteh einfach den ganzen zusammenhang nicht.
Ich kann doch einfach das OnProgressBar als prozedur in mein objekt einfügen, und der user kann doch von dort aus seine Progress Bar weiterschieben.

Ich bekomm einfach gedanklich die kurfe nicht, deshalb hab ich gehofft jemand erklärt mir wozu das genau gut ist.

Danke
Arnulf

sh17 12. Dez 2005 20:52

Re: Wozu TNotifyEvent oder TEvent?
 
Es gibt zwei Richtungen.

1. der Benutzer/das Programm möchte die Position des Progressbar von Hand setzen
Dies hat nix mit Events zu tun
Du setzt einfach den Progress-Wert

2. Die Progressbat möchte Dir mitteilen, wie der Fortschritt gerade steht.
Du registrierst Dich bei der ProgressBar für das OnProgressBar -Event
indem Du der Eigenschaft OnProgressBar eine Funktion mit dem entsprechenden Aufbau zuweist - z.B. eine TNotifyEvent-Methode

Arnulf 12. Dez 2005 20:59

Re: Wozu TNotifyEvent oder TEvent?
 
eher nr 2 :)

Ok ich werd mal spezieller genau mein beispiel hald - und warum ich mich frag wozu das genau gut ist.
Ich hab einen thread laufen der eine video abspielt.
jetzt möchte ich eine ProgressBar im Hauptprogramm weiterschieben.
Bisher übergeb ich einfach die absolute position indem ich vom Thread aus mit Syncronize die ProgressBar Procedur aufrufe.

Wenn ich das allerdings jetzt in ein objekt oder ein component kapseln will, dann wäre doch eine OnProgressBar methode am bessten.
Aber wozu brauch ich ein Event, wenn ich doch sowieso vom Thread aus die Prozedur aufrufen kann bzw. muß.
Was ich bisher verstanden hab, geht es nur darum, daß der user meines objekts den pointer auf seine eigene prozedur umleiten kann - oder wie jetzt???

Noch hat es nicht klick gemacht tut leid :)

Arnulf

sh17 12. Dez 2005 21:17

Re: Wozu TNotifyEvent oder TEvent?
 
:gruebel: alles etwas wirr

Delphi-Quellcode:
Bisher übergeb ich einfach die absolute position indem ich vom Thread aus mit Syncronize die ProgressBar Procedur aufrufe.
Das funktionier ohne Events.

Wenn ich es richtig verstanden habe, möchtest Du die OnProgressBar-Methode in ein eigenes Objekt packen. Gut, geht auch.

was soll den in der OnProgressBar passieren?

Die Position der Bar setzt Du ja schon im Thread.

Arnulf 12. Dez 2005 22:19

Re: Wozu TNotifyEvent oder TEvent?
 
Naja gedacht ist das eigentlich als Video Player objekt ohne GUI.
Also das GUI kann jeder selbst programmieren.

Deshalb möchte ich ja von dem Thread aus ein ProgressBar.Progress und ein ProgressBar.Max in absoluten zahlen also sekunden übergeben.
Das sollen ja nur methoden sein mit der man dann seine eigene Progress Bar in das Programm einbauen kann.
Der Thread kümmert sich ja nur ums abspielen und liefert infos bzw. hald events die von einer Progressbar benötigt werden.

Ich würde das ganze hald letzten endes gerne als component programmieren, deshalb schau ich mich bei allen methoden die etwas damit zu tun haben einmal um.
Und darum frag ich mich hald auch wozu ist TNotifyEvent den wirklich da?

Deshalb klingt das:
Zitat:

TNotifyEvent wird hauptsächlich in der Delphi Komponenten und Klassentwicklung im Zusammenhang mit Benachrichtungen bzw. Ereignissen verwendet. Beispielsweise übergibt der Benutzer eine Prozedur, die der Deklaration von TNotifyEvent entsprecht, an das Objekt weiter, damit dieses bei bestimmten Ereignissen den Nutzercode aufrufen kann.
ja auch sehr interessant, aber sowas ähnliches steht ja schon in der Delphi hilfe nur verstehen tu ichs hald nicht.

Arnulf

dataspider 13. Dez 2005 08:32

Re: Wozu TNotifyEvent oder TEvent?
 
Hi Arnulf,
es ist doch so, dass die Komponente völlig unabhängig von deiner Applikation agieren soll.
Also soll sie von einer ProgressBar gar nichts wissen. Kann ja sein, der Entwickler benutzt eine ganz andere, nicht von TProgressBar abgeleitete Komponente. Also soll er darüber informiert werden, wann die Progressbar neu gezeichnet werden soll.
Delphi-Quellcode:
unit Unit2;

interface
uses
  Classes;

type
  TMyVideoObject = class(TComponent)
  private
    FOnProgressBarPosChange: TNotifyEvent;
    FProgressBarPos: Integer;
    FProgressBarSteps: Integer;
    procedure doProgressBarPosChange;
  published
    // nur Lesen Property zum Setzen der PB
    property ProgressBarPos: Integer read FProgressBarPos;
    // Max - Wert der Progressbar, also - setze ich auf 100, so muss meine Komponente
    // das Ereignis insgesamt 100 mal auflösen
    property ProgressBarSteps: Integer read FProgressBarSteps write
        FProgressBarSteps;
    // mein Event, welches der Entwickler per OI setzen kann
    // damit er die PB weiter setzen kann
    property OnProgressBarPosChange: TNotifyEvent read FOnProgressBarPosChange
        write FOnProgressBarPosChange;
  end;

implementation

// du musst dafür sorgen, dass eben in sinnvollen bzw.
// entsprechend der Propertys eingestellten Schritten
// in deinem Code doProgressBarPosChange aufgerufen wird.
// und natürlich musst du FProgressBarPos auch setzen.
procedure TMyVideoObject.doProgressBarPosChange;
begin
  if Assigned(FOnProgressBarPosChange) then
    FOnProgressBarPosChange(Self);
end;

end.
Eine andere Alternative wäre, ein Published Property vom Typ TProgressBar.
Da kannst du dich dann um das setzten selbst kümmern.
Gruß, Frank

Angel4585 13. Dez 2005 09:42

Re: Wozu TNotifyEvent oder TEvent?
 
Also ich hab in einer Komponente eine Progressbar eingefügt, das sieht so aus:

Delphi-Quellcode:
private
 FProgressBar: TProgressBar;
published
 property ProgressBar: TProgressBar read FProgressBar write SetProgressBar;


procedure TKomponente.SetProgressBar(const Value: TProgressBar);
begin
if FProgressBar <> Value then
 begin
 FProgressBar := Value;
 if Value <> nil then
  Value.FreeNotification(Self);
 end;
end;
Wenn du die Komponente jetzt im Objektinspektor anschaust kannst du eine Progressbar zuweisen, d.h. du nimmst eine Progbar, ziehst die auf die Form und wählst dann in der Progressbareigenschaft deine Progbar aus(wie bei "Menu" bei der Form)
das müsste bei einem Objekt auch gehen, die musst dann eben per Code das ganze zuweisen
Delphi-Quellcode:
Kompo.Progressbar:=Progressbar1
im Objekt selber kannst du dann der FProgressbar die Werte zuweisen die dann im Programm von der Progressbar1 übernommen werden.

Mfg :angel:


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

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