AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Auf Visible reagieren

Ein Thema von matashen · begonnen am 24. Jul 2007 · letzter Beitrag vom 25. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2   
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
436 Beiträge
 
Delphi XE2 Enterprise
 
#1

Auf Visible reagieren

  Alt 24. Jul 2007, 20:03
Hallo zusammen,

ich möchte gern auf darauf reagieren wenn in meinem Programm irgendwo ein TImage.visible sich nach true bzw false ändert.
Ich hab schon gelesen das man eigene Ereignisse definieren kann, aber ich steig da absolut nicht durch.
Wie mach ich das ?

Was ich bereits rausgefunden habe:

Als erstes soll ich wohl das Ereignis definieren...so?
TVisibleEvent=procedure(visiblestate:boolean) Anschließend sollte ich die Variable definieren...wie?
Delphi-Quellcode:
TVisibleEvent = ???
  private
    FOnVisible: TVisibleEvent;
  published
    property OnVisible: TVisibleEvent read FOnVisible write FOnVisible;//<=Was das soll kapier ich nicht hab diese definition ausm Buch gelesen
  end;
So und dann sollte dann noch das Ereignis ausgelöst werden, aber da häng ich jetzt komplett...

Dank im Voraus für die Hilfe

Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von dajuhsa
dajuhsa

Registriert seit: 20. Apr 2007
397 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Auf Visible reagieren

  Alt 24. Jul 2007, 20:11
Zitat:
Was das soll kapier ich nicht hab diese definition ausm Buch gelesen
du könntest auch z.B.
Delphi-Quellcode:
TVisibleEvent = ???
  private
    FOnVisible: TVisibleEvent;
    FBlubberdifasel: TVisibleEvent;
  published
    property OnVisible: TVisibleEvent read FBlubberdifasel write FOnVisible
  end;
schreiben dann wird beim lesen das blubberdifasel zurückgegeben und beim schreiben das visibleevent verändert.
zu dem anderen kann ich nix sagen würd mich auch mal interessieren
das Essen ist wie das Internet - Downstream ist immer angenehmer als Upstream
-
Warum missbraucht die ganze Programmierwelt Images als Paintboxen
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
436 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: Auf Visible reagieren

  Alt 24. Jul 2007, 20:38
Leider hat dieser Hinweis bei mir jetzt mehr Verwirrung wie Klarheit ausgelöst.

Meine Alternative ist in einem Timer alle 100ms prüfen ob sich das Visible geändert hat, aber das finde ich unpraktisch hintenrum. Ich hätte das lieber als Event.

Vieleicht hat noch jemand anders eine Idee???

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
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
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Auf Visible reagieren

  Alt 24. Jul 2007, 20:43
Ich behaupte mal ganz frech, dass das, was du willst, mit Standardmitteln nicht geht. Du hast hier, glaube ich, dein Buch völlig falsch interpretiert. So etwas kannst du machen, wenn du deine eigene Klasse von TImage ableiten willst, aber die Fragestellung sieht nicht danach aus. Die Timerlösung ist aber auch nicht das Wahre. Was willst du denn erreichen? Vielleicht gibts einen anderen Weg.

[Edit] @Sirius: Ich dachte, er wolle das mit dem normalen TImage machen. [/Edit]
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
4.997 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Auf Visible reagieren

  Alt 24. Jul 2007, 20:50
Hi,

Ich habe dir mal ein Beispiel für einen Button geschrieben:


Delphi-Quellcode:
unit Unit1;

interface

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

type
  // Das Event definieren
  TVisibleEvent = procedure(Sender: TObject; Visible: Boolean) of object;

  // Button neu definieren
  TButton = class(StdCtrls.TButton)
  private
    FOnVis: TVisibleEvent;
    function GetVis: Boolean;
    procedure SetVis(const Value: Boolean);
  public
    property Visible: Boolean read GetVis write SetVis; // Alte Visible Property überschreiben
    property OnVisible: TVisibleEvent read FOnVis write FOnVis; // Die Event-Property
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Test(Sender: TObject; Visible: Boolean); // Die procedure für das Event
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TButton }

function TButton.GetVis: Boolean;
begin
  Result := inherited Visible;
end;

procedure TButton.SetVis(const Value: Boolean);
begin
  inherited Visible := Value;
  if Assigned(FOnVis) then // Wenn Event gesetzt dann
    FOnVis(Self,Value); // ausführen
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.OnVisible := Test; // Event zuweisen
end;

procedure TForm1.Test(Sender: TObject; Visible: Boolean);
begin
  ShowMessage('ALARM!'); // Alarm anzeigen wenn Sichtbarkeit geändert wurde
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Button1.Visible := false; // zum testen
end;

end.
Ich hoffe das erklärt sich von selbst ansonsten frag ruhig. Aber ich hab ab 22 Uhr kein Internet mehr das heißt du musst dich eventuell gedulden

PS: Das sollte für Images analog funktionieren.

Der Vorteil ist hierbei das die VCL Komponenten aus der IDE direkt diese neuen Properties haben und du nicht alles zur Runtime erstellen musst nur wegen dem Event.

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Auf Visible reagieren

  Alt 24. Jul 2007, 20:51
Zitat von Apollonius:
[Edit] @Sirius: Ich dachte, er wolle das mit dem normalen TImage machen. [/Edit]
Na, wenn das so ist, muss man die WndProc subclassen und .... ähhm, geht nicht; ist kein TWinControl....hmmm
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
436 Beiträge
 
Delphi XE2 Enterprise
 
#8

Re: Auf Visible reagieren

  Alt 24. Jul 2007, 20:53
Danke sirius,

jetzt hab ich mal was zum tippen, also die Lösung mit eigener Klasse, aber kapiert hab ichs nicht ganz.

Ich hoff es ist nicht zu viel verlangt mir noch zu erleutern wo/wie jetzt mein ONvisible "merkt" das sich die Eigenschaft image.visible geändert hat.

Ich möchte das eigentlich ja auf ein Standard TImage anwenden.

Zur erläuterung:
Ich habe also ein Bild das ich in Meinem Spielchen ab und zu einblende(Karte). Wenn ich dieses Bild einblende hätte ich dazu gern ein paar aktionen ausgeführt. genauso wenn das ganze ausgeblendet wird. Das stelle ich mir ungefähr so vor.

Delphi-Quellcode:
procedure Form1.Image1Visiblechange;
begin;
shape1.visible:= not shape1.visible;
memo1.visible:= not memo1.visible;
end;
Hat irgendwie nicht so ganz geklingelt bei mir...

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Auf Visible reagieren

  Alt 24. Jul 2007, 20:57
Nachdem was NG gemacht hatte, sehe ich, dass es auch für das TImage geht
Einfach so ändern, wie ichs nochmal geändert habe

Edit: Was verstehst du denn an einer eigenen Klasse nicht?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
436 Beiträge
 
Delphi XE2 Enterprise
 
#10

Re: Auf Visible reagieren

  Alt 24. Jul 2007, 21:04
Hallo
Puuuhhh...
also jetzt hab ichs kapiert, irgendwie erklärt das keine Buchquelle die ich besitze.

Also zur wiederholung damit ichs verstanden hab.

Ich muß also TImage redefinieren und die Visible-Eigenschaft überschreiben hier lös ich dann mein Ereignis aus, das ich wie sirius schon beschrieben selber definiere.
Jetzt ist mir auch klar, woher dann mein Ereignis das "weis", ich sags dem Ereignis selber über die Eigenschaft.

Danke zusammen, wäre ich selber nie drauf gekommen.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf