Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

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)

spaxxn 27. Jun 2008 08:21

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.

DeddyH 27. Jun 2008 08:26

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Ich kann hier keine Rar-Archive öffnen, das kann also Mittag werden.

Sunshine21 27. Jun 2008 08:48

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:
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.
Klasse:
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.

DeddyH 27. Jun 2008 08:55

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.

spaxxn 27. Jun 2008 08:57

Re: Klasse soll Anwendung nur bei best. Änderung benachricht
 
Löst aber glaube ich nicht deas Exception-Problem.

DeddyH 27. Jun 2008 09:04

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.

Sunshine21 27. Jun 2008 09:07

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?

DeddyH 27. Jun 2008 09:13

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]

spaxxn 27. Jun 2008 09:23

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.

Sunshine21 27. Jun 2008 09:40

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.
Seite 5 von 6   « Erste     345 6      

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