Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Kompo ableiten: Visible bei Show und Hide ? (https://www.delphipraxis.net/73752-kompo-ableiten-visible-bei-show-und-hide.html)

Martin K 23. Jul 2006 15:38


Kompo ableiten: Visible bei Show und Hide ?
 
Hi,

folgendes Problem:
Habe eine Komponente vom TEdit abgeleitet.
Dazu gehört noch eine weitere, die auch sichtbar ist.
Wenn ich also Visible auf False stelle werden beide Komponenten unsichtbar, bei True beide sichtbar.
Klappt soweit ganz gut, hab also einfach bei der property Visible folgenden Code:
Delphi-Quellcode:
procedure VonTEditAbgeleitet.SetVisible(const Value: Boolean);
begin
  inherited Visible := Value;
  MeineZweiteKompo.Visible := Value;
end;
Aber leider klappt das ganze nicht bei den Aufrufen Show/Hide :(
Und ich dachte immer, bei Show würde nur Visible auf True und bei Hide auf False gesetzt werden, so dass also die obige Prozedur auch bei Show/Hide aufgerufen werden müsste:
Zitat:

Zitat von Delphi-Hilfe
Durch den Aufruf der Methode Show wird Visible auf true, durch den Aufruf von Hide auf false gesetzt.

Ist es etwa umgekehrt? :gruebel:
Dass beim Setzen der Eigenschaft Visible Show bzw. Hide aufgerufen wird?
Bitte helft mir...

Zacherl 23. Jul 2006 15:40

Re: Kompo ableiten: Visible bei Show und Hide ?
 
Versuch mal Hide und Show der ersten Komponente zu überschreiben.

Florian

Dax 23. Jul 2006 15:41

Re: Kompo ableiten: Visible bei Show und Hide ?
 
Hilf mir mal auf die Sprünge, ist SetVisible virtual? Wenn nicht, musst du Show und Hide auch noch neuschreiben.

Martin K 23. Jul 2006 15:43

Re: Kompo ableiten: Visible bei Show und Hide ?
 
Zitat:

Zitat von Florian Bernd
Versuch mal Hide und Show der ersten Komponente zu überschreiben.

Ja, das werd ich dann wohl tun müssen...
Kann ich mir dann die Prozedur bei der Eigenschaft Visible sparen?
Also wo wird jetzt was aufgerufen???
:wiejetzt:

//Edit:
Zitat:

Zitat von Dax
Hilf mir mal auf die Sprünge, ist SetVisible virtual? Wenn nicht, musst du Show und Hide auch noch neuschreiben.

Das würde ich gern auch wissen, wie ich die überschreiben muss..
Hab halt nur PE.

Wurde der rote Kasten abgeschafft ???

//nochmal Edit:
SetVisible hab ich mir in private selber definiert, ohne Virtual.
Delphi-Quellcode:
private
  function GetVisible: Boolean;
  procedure SetVisible(const Value: Boolean);
published
  property Visible: Boolean read GetVisible write SetVisible default True;

SirThornberry 23. Jul 2006 15:49

Re: Kompo ableiten: Visible bei Show und Hide ?
 
Die Methoden Show und Hide setzen das Property "Visible". Das Property Visible ruft SetVisible auf welches man jedoch nicht überschreiben kann weil es nicht virtuell ist. SetVisible führt allerdings ein
Delphi-Quellcode:
Perform(CM_VISIBLECHANGED, Ord(Value), 0);
aus. Man könnte also die Message abfangen und darin die zweit-Compo benachrichtigen.

mit überschreiben durch das Schlüsselwort "override" ist hier nichts zu machen da die Methoden Show, Hide und SetVisible alle nicht virtual sind. Also bleibt wirklich nur übrig die Message "CM_VISIBLECHANGED" abzufangen

Martin K 23. Jul 2006 15:54

Re: Kompo ableiten: Visible bei Show und Hide ?
 
Danke :thumb: , werd's gleich mal versuchen...

Auch wenn's ein wenig OT ist, aber dasselbe gilt auch für die Eigenschaft Enabled.
Kann ich da auch irgendeine Message abfangen?

Martin K 23. Jul 2006 16:21

Re: Kompo ableiten: Visible bei Show und Hide ?
 
Wie muss ich denn die Prozedur deklarieren?
Hab es so versucht:
Delphi-Quellcode:
    procedure CMVisibleChanged(var Message: Byte); message CM_VisibleChanged;
Doch egal ob Show oder Hide - als Message wird immer 11 übergeben :gruebel:

Hawkeye219 23. Jul 2006 16:34

Re: Kompo ableiten: Visible bei Show und Hide ?
 
Hallo Martin,

die korrekte Signatur der Behandlungsroutine siehe so aus:

Delphi-Quellcode:
procedure CMVisibleChanged (var Message: TMessage); message CM_VISIBLECHANGED;
Aber vielleicht ist es einfacher, die PROTECTED-Methode Delphi-Referenz durchsuchenTControl.VisibleChanging zu überschreiben. Diese wird aufgerufen, bevor das Control den neuen Zustand annimmt.

Gruß Hawkeye

Martin K 23. Jul 2006 17:00

Re: Kompo ableiten: Visible bei Show und Hide ?
 
Danke, jetzt hab ich's :thumb:

So klappt's:
Delphi-Quellcode:
procedure VonTEditAbgeleitet.VisibleChanging;
begin
  inherited;
  MeineZweiteKompo.Visible := not Visible; // weil Visible erst nach der Prozedur geändert wird
end;
Für Enabled gibt es übrigens die virtuelle Protected-Methode SetEnabled.


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