Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ableiten von klassen und überschreiben von ereignissen (https://www.delphipraxis.net/10150-ableiten-von-klassen-und-ueberschreiben-von-ereignissen.html)

kiar 12. Okt 2003 16:01


ableiten von klassen und überschreiben von ereignissen
 
folgendes problem, ich leite eine klasse von TCustomControl ab
Delphi-Quellcode:
type
  TZustand = (zOn, zOut);
  TBrandmeldung = class(TCustomControl)

   private
     
     FZustand:TZustand;
     
   protected                          
     
   public
     constructor Create(Aowner :TComponent); override;
     destructor Destroy; override;
     procedure Paint; override;
     property Zustand: TZustand read FZustand write FZustand ;
end;
als nächstes leite ich von diser klasse ab;
Delphi-Quellcode:
type
   TMelderTyp = (mThermisch, mOptisch, mMulti);
   TMelder = class(TBrandmeldung)
   private

   public
     constructor Create(Aowner: TComponent); override;
     destructor Destroy;override;
     procedure Paint;override;
     procedure MouseDown(Button:TMouseButton;Shift: TShiftState;x,y:Integer);override;
     procedure MyClick(Sender :TObject);
     property Onclick;
end;
wenn ich nun einen klick auf die TMelderKlasse mache, um den zustand zu ändern, muss ich 3 mal klicken, bis der zustand- in gestalt einer anderen farbe - sich ändert.

wo liegt mein fehler? :wall:

zum test habe ich mousedown überschrieben und dort das onclick ereignis zugewiesen. in myclick ändere ich nur den status - wenn zon ,dann zout und umgekehrt.

Christian Seehase 12. Okt 2003 16:54

Re: ableiten von klassen und überschreiben von ereignissen
 
Moin Kiar,

wie sieht denn Deine OnClick Routine aus, mit der Du es versuchst?

kiar 12. Okt 2003 17:54

Re: ableiten von klassen und überschreiben von ereignissen
 
hi chris
Delphi-Quellcode:
procedure TMelder.myClick(Sender:TObject);
begin

     if fZustand = Zout then
        begin
          FZustand:= Zon;
          canvas.pen.color:=Clred
        end else
          begin
            FZustand:= Zout;
            canvas.pen.color:=clyellow;
          end;
       
end;
im Create weise ich dem onclick das myclick-ereignis zu.

raik

Jens Schumann 12. Okt 2003 18:56

Re: ableiten von klassen und überschreiben von ereignissen
 
Hallo,
schau Dir mal dies Beispiel an. Das funktioniert
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type

  TMelder = class(TCustomPanel)
  private
    FZustand : Boolean;
  protected
    procedure Click; override;
  public
    constructor Create(AOwner : TComponent);
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TMelder }

procedure TMelder.Click;
begin
  FZustand:=Not FZustand;
  Case FZustand Of
    False : Color:=clBtnFace;
    True : Color:=clLime;
    end;
  inherited Click;
end;

constructor TMelder.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle - [csAcceptsControls,csSetCaption];
end;

{ TForm1}

procedure TForm1.FormCreate(Sender: TObject);
var
  MyMelder : TMelder;
begin
  MyMelder:=TMelder.Create(Self);
  MyMelder.Parent:=Self;
  MyMelder.Left:=50;
  MyMelder.Top:=20;
end;

end.

kiar 12. Okt 2003 18:59

Re: ableiten von klassen und überschreiben von ereignissen
 
hallo jens , wir hatten schon ma das vergnügen ging um ein ähnliches problem :cheers:
raik

jens ich leite aber von TBrandmeldung ab, ich denke, das Fzustand durch den aufruf der paint methode immer wieder gesetzt wird.

eigentlich ist es besser, fZustand als boolean zu setzen, aber wenn ich mehrere zustände habe, oder mehrere Typen wird es mit boolean nicht gehen


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 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