![]() |
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Ich darf hier in der Firma keine Dateien downloaden. Du müsstest mir also den Code posten oder jemand anderes *zu DeddyH schiel* müsste freundlicherweise mal das Projekt downloaden und kompilieren.
|
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Ich kann hier keine Rar-Archive öffnen, das kann also Mittag werden.
|
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Oh sorry wollte nur den Thread nicht wieder in die Länge ziehen.
Unit1:
Delphi-Quellcode:
Klasse:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure DoChange; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation uses TestClass; {$R *.dfm} var myClass : TMyclass; //Programmstart procedure TForm1.FormCreate(Sender: TObject); begin myClass := TMyclass.Create; myClass.OnChange_Func := DoChange; end; procedure TForm1.DoChange; begin ShowMessage('Status geändert'); end; procedure TForm1.Button1Click(Sender: TObject); begin myClass.Timer.enabled := NOT myClass.Timer.enabled; end; procedure TForm1.Button2Click(Sender: TObject); begin myClass.Status := NOT myClass.Status end; end.
Delphi-Quellcode:
unit Testclass;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Forms, Dialogs, StdCtrls, WinSock, ActiveX, ComObj, ExtCtrls; type TOnChange_Proc = procedure() of object; TMyClass = class(TObject) private FTimer : TTimer; FStatus : Boolean; FOnChange : TOnChange_Proc; procedure OnChange; function getAvailable: Boolean; procedure testTimer(Sender : TObject); procedure setStatus(value: Boolean); public constructor Create; destructor destroy; override; property OnChange_Func : TOnChange_Proc read FOnChange write FOnChange; property Status : Boolean read FStatus write setStatus; property Timer : TTimer read FTimer write FTimer; end; implementation constructor TMyClass.Create; begin inherited; FTimer := TTimer.Create(nil); FTimer.enabled := false; FTimer.Interval := 1000; FTimer.OnTimer := testTimer; FOnChange := nil; end; destructor TMyClass.Destroy; begin FTimer.Free; inherited; end; procedure TMyClass.OnChange; begin if Assigned(FOnChange) then FOnChange; end; procedure TMyClass.setStatus(value: Boolean); begin FStatus := value; if Assigned(FOnChange) then FOnChange; end; procedure TMyClass.testTimer(Sender:TObject); begin GetAvailable; onchange; end; function TMyClass.GetAvailable: Boolean; begin if FStatus = true then result := true else result := false end; end. |
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Hab mal in Notepad etwas editiert, daher ungetestet:
Delphi-Quellcode:
unit Testclass;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Forms, Dialogs, StdCtrls, WinSock, ActiveX, ComObj, ExtCtrls; type TOnChange_Proc = procedure() of object; TMyClass = class(TObject) private FTimer : TTimer; FStatus, OldStatus : Boolean; FOnChange : TOnChange_Proc; // procedure OnChange; function getAvailable: Boolean; procedure testTimer(Sender : TObject); procedure setStatus(value: Boolean); public constructor Create; destructor destroy; override; property OnChange_Func : TOnChange_Proc read FOnChange write FOnChange; property Status : Boolean read FStatus write setStatus; property Timer : TTimer read FTimer write FTimer; end; implementation constructor TMyClass.Create; begin inherited; FTimer := TTimer.Create(nil); FTimer.enabled := false; FTimer.Interval := 1000; FTimer.OnTimer := testTimer; FOnChange := nil; FStatus := true; OldStatus := true; end; destructor TMyClass.Destroy; begin FTimer.Free; inherited; end; {procedure TMyClass.OnChange; begin if Assigned(FOnChange) then FOnChange; end; } procedure TMyClass.setStatus(value: Boolean); begin FStatus := value; if Assigned(FOnChange) then FOnChange; end; procedure TMyClass.testTimer(Sender:TObject); begin GetAvailable; // onchange; end; function TMyClass.GetAvailable: Boolean; begin if FStatus <> OldStatus then begin OldStatus := FStatus; if Assigned(FOnChange) then FOnChange; end; end; end. |
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Löst aber glaube ich nicht deas Exception-Problem.
|
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Abgesehen davon, dass MyClass nirgend freigegeben wird, kann ich rein optisch nichts Verdächtiges entdecken. Da hilft nur durchsteppen und die Zeile mit der Exception zu lokalisieren. Ich habe gerade kein Delphi zur Verfügung, kann das daher nicht selbst übernehmen.
|
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Beim Steppen gelang ich in Unit1 jenachdem welchen Button ich drücke zur Procedure wo der Timer enabled wird
procedure TForm1.Button1Click(Sender: TObject); begin myClass.Timer.enabled := NOT myClass.Timer.enabled; end; oder der Status geändert wird procedure TForm1.Button2Click(Sender: TObject); begin myClass.Status := NOT myClass.Status end; Er gibt mir auch eine Meldung dass es Probleme mit dem Zugriff gibt. Die Properties stimmen doch, oder? |
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Ich habe anscheinend Tomaten auf den Augen, ich kann nämlich nichts entdecken :|
[edit] Wenn ich wieder Delphi zur Verfügung habe (heute Mittag), schaue ich mir das nochmal mit dem Debugger an. [/edit] |
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Sunshine? Hast du bei dem zweiten Projekt einfach per Copy/Paste die Elemente aus dem erstem Projekt übernommen?
Edit: Ich glaube ich weiss wo dein Problem hängt. Du hast das neue Projekt erstellt und die FormCreate prozedur nur kopiert. Diese ist aber wahrscheinlich nicht an das OnCreate vom Form gebunden und darum wird die Instanz deiner TmyClass nicht erzeugt. Dann rennst du natürlich in eine Verletzung. Das wäre das einzige was ich mir denken könnte. |
Re: Klasse soll Anwendung nur bei best. Änderung benachricht
Oh Gott, das wars! Dachte das einbinden der Buttons würde reichen. Tut mir wirklcih Leid, dass ich euch wegen sowas beschäftigt habe! Endlich gehts weiter. Mal schaun wie weit ich jetzt komme :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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-2025 by Thomas Breitkreuz