![]() |
Komponente umstellen
Ich möchte die TAudioVolume Komponente umstellen.
Delphi-Quellcode:
TAudioVolume = class(TCustomControl)
protected procedure CreateWnd; override; ....
Delphi-Quellcode:
Später sollen auf diesen Panel die ProgressBars kommen.
procedure TAudioVolume.CreateWnd;
var FPanel: TPanel; begin inherited; Width := 100; Height := 100; FPanel := TPanel.Create(Owner); FPanel.Parent := self; self.Owner.InsertComponent(FPanel); FPanel.Left := 5; FPanel.Top := 5; FPanel.Width := Width - 10; FPanel.Height := Height - 10; end; Mein Problem ist nun wenn ich die Komponente auf die Form klatsche dann kann ich die Eigenschaften des Panels ändern.. Das will ich aber nicht. Was läuft falsch? Siehe Shot der seltsame eintrag für das Panel. Sorry wenn das dumm rüberkommt habe aber mit VCL Komponenten erstellen nicht so viel Erfahrung. gruss |
AW: Komponente umstellen
Warum fügst Du die Kompinenet dem Owner hinzu? Ist dann ja das Formular.
Delphi-Quellcode:
self.Owner.InsertComponent(FPanel);
|
AW: Komponente umstellen
Ich tät das so machen:
Delphi-Quellcode:
Ob's der Weißheit letzter Schluss ist, weiß ich aber nicht.
procedure TAudioVolume.CreateWnd;
var FPanel: TPanel; begin inherited; Width := 100; Height := 100; FPanel := TPanel.Create(self); FPanel.Parent := self; FPanel.Left := 5; FPanel.Top := 5; FPanel.Width := Width - 10; FPanel.Height := Height - 10; end; |
AW: Komponente umstellen
So hätte ich es auch gemacht, dann ist der Owner die eigene Komponenete und nicht der Owner der Komponente.
|
AW: Komponente umstellen
Zitat:
PS: Ok! Funktioniert jetzt Danke euch .. War wohl ein Denkfehler. gruss |
AW: Komponente umstellen
Noch ein kleines Problem.
Warum werden die property zu spät ausgeführt?
Delphi-Quellcode:
Ich addiere ne neue Komponente zur Form
private
FAppVolume: boolean; procedure SetAppVolume(Value: boolean); published property AppVolume: boolean read FAppVolume write SetAppVolume; procedure TAudioVolume.SetAppVolume(Value: boolean); begin if Value = FAppVolume then exit; FAppVolume := Value; end; Anschließend ändere ich die Eigenschaft von AppVolume auf True. Die Eigenschaft wird aber nicht direkt ausgeführt.
Delphi-Quellcode:
Bei der 5 Komponente wo die Eigenschaft auf True steht springt sie trotzdem in SetComponents hinein.
constructor TAudioVolume.Create(AOwner: TComponent);
var HR: HResult; N: Cardinal; MyRegistry: TRegistry; ISessionEvents: TAudioSessionEvents; IAudioEndpointEvents: TAudioEndpointEvents; begin inherited Create(AOwner); if not FAppVolume then SetComponents; Erst danach wird erkannt das FAppVolume eigentlich True ist. Wie kann ich das erzwingen. gruss |
AW: Komponente umstellen
Im Kontruktor haben die privaten Felder noch die Standard-Werte (0-Entsprechung, also 0, '', nil, false, je nach Datentyp). Deshalb wird Deine Abfrage immer true ergeben, da die Eigenschaften ja erst später gesetzt werden, da ist der Konstruktor aber längst abgearbeitet.
|
AW: Komponente umstellen
Zitat:
Traurig das ganze das man in der Design Umgebung nicht reale Werte anzeigen kann. Seltsam nur wenn ich eine Checkbox nehme und hier die Eigenschaft Checked = True einstelle (im Designer) Funktioniert es doch auch. Warum dann nicht in eigenen Komponenten. Ist doch eigentlich das gleiche. Oder meinst du ich soll das aus Create herausnehmen?
Delphi-Quellcode:
und an passender stelle unterbringen?
if not FAppVolume then
SetComponents; Die frage wäre dann wo? Da diese sich ja beim erstellen ändern sollen nachdem sie auf die Form gelegt wurden. Siehe Shot Designer soll gleich sein wie Laufzeit. gruss |
AW: Komponente umstellen
Im Kontruktor jedenfalls bringt es Dir nichts. Wäre der sowieso schon vorhandene Setter nicht besser geeignet?
|
AW: Komponente umstellen
Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
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 by Thomas Breitkreuz