Thema: Delphi Auf Visible reagieren

Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Auf Visible reagieren

  Alt 24. Jul 2007, 20:40
Ich habe mal TmyImage vom Timage genommen und das Ereignis hinzugefügt. Man könnte auch die Message CM_VisibleChanged (o.ä.) abfangen. Das ist mir zu kompliziert.

Delphi-Quellcode:
unit Unit1;

interface

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

//Die "neue Klasse" kann alles was TImage kann + ein neues Property namens onVisibleChange
type TImage=class(ExtCtrls.Timage)
      private
        //hier wird die Methode, die gestartet werden soll in einer Variablen gespeichert
        FonVisibleChange:TnotifyEvent;
        //Die Funktion überschreiben wir mal, um das Ereignis auszulösen
        procedure visiblechanging; override;
      published
        //Und noch ein schönes Property drumrum, nicht zwingend notwendig, aber schöner ;-)
        property onVisibleChange:TNotifyEvent read FOnvisibleChange write FOnVisibleChange;
end;

//zum Testen
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Image1.TImage;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ImageVisibleChange(sender:Tobject);
  private
    { Private-Deklarationen }
    x:integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TmyImage.visiblechanging;
//Diese Funktion wird bei setvisible aufgerufen und ist im Original leer
begin

  //unser neues Ereignis auslösen
  FOnVisibleChange(self);

  //falls sie doch nicht leer ist
  inherited visiblechanging;
end;


procedure TForm1.Button1Click(Sender: TObject);
//Ereignis auslösen ;-)
begin
  image1.visible:=not image1.visible;
end;
procedure TForm1.ImageVisibleChange(sender:Tobject);
//Die Ereignisbehandlungsroutine
begin
  inc(x);
  edit1.Text:=inttostr(x);
end;
procedure TForm1.FormCreate(Sender: TObject);
//Erstellen des Objektes und Ereigniszuweisung
begin
  image1.FonVisibleChange:=ImageVisibleChange;
end;

end.
Edit: Der Clou war eigentlich nur die Methode "visiblechanging" zu überschreiben. Alles andere ist Zugabe.
Edit2: Nach "Hinweis" von NG verbessert (funktioniert übrigens für alle TControls)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat