Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse soll Anwendung nur bei best. Änderung benachrichtigen (https://www.delphipraxis.net/116277-klasse-soll-anwendung-nur-bei-best-aenderung-benachrichtigen.html)

Sunshine21 26. Jun 2008 17:52

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Hab mich ein wenig zu früh gefreut...

Das Programm läuft jetzt zwar aber irgendwie klappt das mit dem Timer noch nicht richtig. Wenn ich den Timer anschalte kommen sofort mit jedem Takt Nachrichtenfenster auch wenn noch keine Änderung gemacht wurde. Wenn ich auf den Button Status ändern klicke dann kommt wie gewünscht das Nachrichtenfenster. War das bei dir auch so?

DeddyH 26. Jun 2008 18:09

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Du rufst ja im Timer auch immer OnChange auf, ohne auf Änderung zu prüfen.

Sunshine21 26. Jun 2008 18:31

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Achso ich dachte das passiert automatisch :)

Muss ich jetzt den Status mit einer Hilfsvariable zwischenspeichern um vergleichen zu können oder wie macht man das am elegantesten?

DeddyH 26. Jun 2008 18:34

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Wozu brauchst Du eigentlich den Timer? Wenn sich der Status ändert, bekommst Du es doch mit.

Sunshine21 26. Jun 2008 18:47

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Leider nicht denn der Status ist ein Flag in der Windows WMI und kann sich jederzeit ändern. Der Status wird also über diese Funktion abgefragt und sollte sich was ändern soll er das der Anwendung melden.

DeddyH 26. Jun 2008 18:51

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Dann wäre es IMO wirklich besser, sich den alten Status zu merken und zu vergleichen.

Sunshine21 27. Jun 2008 05:08

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Zitat:

Zitat von spaxxn
Zitat:

Zitat von Sunshine21
Delphi-Quellcode:
    procedure DoChange;
Delphi-Quellcode:
    OnChange_Proc = procedure of object;

So müsste das gehen! War ein wenig in Gedanken, Aber DeddyH hats getroffen :P

Grund: Im Hauptform wurde Sender als Parameter übergeben, aber vom OnChange gar nicht angefordert. Mal in normalem deutsch ausgedrückt...

Da hätte ich noch eine kurze Frage dazu. Wenn ich Parameter übergeben möchte müssen die dann in der Klasse in
Delphi-Quellcode:
    OnChange_Proc = procedure (Parameter1 : string, Parameter2 : Boolean) of object;
angegeben werden oder im Hauptform
Delphi-Quellcode:
procedure DoChange(Parameter1 : string, Parameter2 : Boolean)
oder gar beides?

++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++

"Nur" fürs Verständnis....

Delphi-Quellcode:
procedure TMyClass.OnChange;
begin
  if Assigned(FOnChange) then
    FOnChange;
end;

procedure TMyClass.setStatus(value: Boolean);
begin
  FStatus := value;
  if Assigned(FOnChange) then
    FOnChange;
end;
Wie genau funktioniert das mit dem Assigned

DeddyH 27. Jun 2008 07:05

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Zitat:

Delphi-Quellcode:
OnChange_Proc = procedure (Parameter1 : string, Parameter2 : Boolean) of object;

Genauso geht das. Die zuzuweisende Methode muss dann dieselbe Signatur (also die selben Parameter) besitzen. Und Assigned prüft, ob eine Methode zugewiesen wurde. Im Detail heißt das, es wird nachgesehen, ob der Methodenzeiger nil ist.

spaxxn 27. Jun 2008 07:46

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Woran lag es? würde mich interessieren? OnClick nicht gebunden gewesen?

Sunshine21 27. Jun 2008 08:17

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo spaxxn, hatte es gestern zum laufen gebracht als ich einfach vor dem Kompilieren die Buttons durch doppelklick auf dem Formular eingebunden habe (glaube das geht doch so, oder?)

Leider verstehe jetzt gar nichts mehr. Wollte nochmal ein neues Projekt starten und jetzt kommt wieder eine Fehlermeldung sobald ich einen der beiden Button drücke:
Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 0045C365 in Modul 'Project1.exe'. Lesen von Adresse 00000004'. Prozess Project1.exe (1472)
Was hab ich jetzt schon wieder falsch gemacht?

Kannst du nochmal kurz versuchen ob die beiden Units 1:1 bei dir Laufen? Arbeite nämlich auf zwei unterschiedlichen Rechner und will ausschliessen dass es am Code liegt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 Uhr.
Seite 4 von 6   « Erste     234 56      

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