Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

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/)
-   -   Komponente umstellen (https://www.delphipraxis.net/188001-komponente-umstellen.html)

DeddyH 23. Jan 2016 16:45

AW: Komponente umstellen
 
Delphi-Quellcode:
procedure TAudioVolume.SetAppVolume(Value: boolean);
begin
  if Value = FAppVolume then
    exit;

  FAppVolume := Value;
  if not FAppVolume then
     SetComponents;
end;
oder so ähnlich. AfterConstruction wäre auch noch eine Möglichkeit, aber das wird IIRC nicht immer ausgeführt (es sei denn, ich werfe da gerade etwas durcheinander).

EWeiss 23. Jan 2016 16:50

AW: Komponente umstellen
 
Zitat:

Zitat von DeddyH (Beitrag 1327937)
Delphi-Quellcode:
procedure TAudioVolume.SetAppVolume(Value: boolean);
begin
  if Value = FAppVolume then
    exit;

  FAppVolume := Value;
  if not FAppVolume then
     SetComponents;
end;
oder so ähnlich. AfterConstruction wäre auch noch eine Möglichkeit, aber das wird IIRC nicht immer ausgeführt (es sei denn, ich werfe da gerade etwas durcheinander).

Das Problem ist nicht das erstellen der Components sondern das auswerten des Flag FAppVolume.
Ich komme zu spät in den Setter das ist ja mein Problem.

Delphi-Quellcode:
procedure TAudioVolume.SetAppVolume(Value: boolean);
begin

  if Value = FAppVolume then
    exit;

  FAppVolume := Value;

  if FAppVolume then
  begin
    FGroupBox.Caption := 'Application';
    pbAppMeter := TProgressBar.Create(self);
    pbAppMeter.Parent := FGroupBox.Parent;
    pbAppMeter.Orientation := pbVertical;
    pbAppMeter.Max := 100;
    pbAppMeter.Min := 0;
    pbAppMeter.Smooth := true;

    lblAppPeak := TLabel.Create(self);
    lblAppPeak.Parent := FGroupBox.Parent;
    lblAppPeak.Caption := 'M';

    pbAppMeterL := TProgressBar.Create(self);
    pbAppMeterL.Parent := FGroupBox.Parent;
    pbAppMeterL.Orientation := pbVertical;
    pbAppMeterL.Max := 100;
    pbAppMeterL.Min := 0;
    pbAppMeterL.Smooth := true;

    lblAppPeakL := TLabel.Create(self);
    lblAppPeakL.Parent := FGroupBox.Parent;
    lblAppPeakL.Caption := 'L';

    tbAppVolume := TTrackBar.Create(self);
    tbAppVolume.Parent := FGroupBox.Parent;
    tbAppVolume.Orientation := trVertical;
    tbAppVolume.Max := 32;
    tbAppVolume.Min := 0;
    tbAppVolume.TickStyle := tsAuto;
    tbAppVolume.Frequency := 3;
    tbAppVolume.Position := 0;

    cbAppMute := TCheckbox.Create(self);
    cbAppMute.Parent := FGroupBox.Parent;
    cbAppMute.Caption := 'Mute';

    pbAppMeterR := TProgressBar.Create(self);
    pbAppMeterR.Parent := FGroupBox.Parent;
    pbAppMeterR.Orientation := pbVertical;
    pbAppMeterR.Max := 100;
    pbAppMeterR.Min := 0;
    pbAppMeterR.Smooth := true;

    lblAppPeakR := TLabel.Create(self);
    lblAppPeakR.Parent := FGroupBox.Parent;
    lblAppPeakR.Caption := 'R';

    tbAppVolume.Position := round((1.0 - GetVolume) * tbAppVolume.Max);
    tbAppVolume.OnChange := tbAppVolumeChange;
    cbAppMute.Checked := IsMuted;
    cbAppMute.OnClick := cbAppMuteClick;
    PostMessage(Handle, WM_SIZE, 0, 0);
  end;

end;
Ich bekomme erst ein True nachdem ich Create hinter mir gelassen habe.
Das ist aber zu spät.

Angenommen das Teil liegt schon auf der Form und ich ändere dann den Status über die Property AppVolume
dann müsste sich die Componente anhand der im Setter eingestellten werte ändern.
Tut es aber nicht so wie es soll.


gruss

DeddyH 23. Jan 2016 17:01

AW: Komponente umstellen
 
In den Setter kommst Du, sobald der Wert der Property gesetzt wird. Ob aus dem Objektinspektor heraus oder per Code ist dabei egal, außer dass beim Objektinspektor der ComponentState auch csDesigning enthält, falls Dir das etwas nützt.

EWeiss 23. Jan 2016 18:00

AW: Komponente umstellen
 
Er springt nicht in den Setter im Design mode so das ich testen kann woran das liegt.
Also wenn ich die property im Objektinspektor ändere.

gruss

DeddyH 23. Jan 2016 18:17

AW: Komponente umstellen
 
Hast Du das Package auch neu installiert?

EWeiss 23. Jan 2016 18:36

AW: Komponente umstellen
 
Zitat:

Zitat von DeddyH (Beitrag 1327946)
Hast Du das Package auch neu installiert?

JO ;)
Der Vorgang ist wie folgt.

Addiere ich die Komponente dann ist alles in Ordnung.
Schalte ich jetzt um also auf AppVolume dann ändert sich das Aussehen entsprechend und ist auch in Ordnung
Das selbe spiel zurück das ist auch in Ordnung.

Schließe ich die Form und öffne diese anschließend wieder dann ist alles Durcheinander.
So als wenn die Property nicht gespeichert würde.

Es geht um die Ansicht im Designer :)

gruss

DeddyH 23. Jan 2016 18:41

AW: Komponente umstellen
 
Dafür ist soweit ich weiß Delphi-Referenz durchsuchenSetSubComponent zuständig.

EWeiss 23. Jan 2016 19:11

AW: Komponente umstellen
 
Zitat:

Zitat von DeddyH (Beitrag 1327954)
Dafür ist soweit ich weiß Delphi-Referenz durchsuchenSetSubComponent zuständig.

Danke dir leider bringt mir das auch nichts.
Wenn du mal reinschauen willst kann ich es hochladen.

gruss

EWeiss 24. Jan 2016 10:15

AW: Komponente umstellen
 
Leider funktioniert das mit den property im Designer nicht.
Habe es deshalb so geändert dass das Anwendungs Volumen (Ansicht) erst zur Laufzeit geändert wird.
Dafür weise ich der AudioVolume5 einfach AppVolume zu.

Delphi-Quellcode:
AudioVolume5.AppVolume := True

Volumen 1 -> 4 werden dann für die Geräte verwendet wie auch immer.

Delphi-Quellcode:
AudioVolume1.SelectAudioDevice(I);
AudioVolume2.SelectAudioDevice(1);
AudioVolume3.SelectAudioDevice(2);
AudioVolume4.SelectAudioDevice(3);
Auch diese werden dann erst zur Laufzeit (Ansicht) geändert.

gruss

jaenicke 24. Jan 2016 11:30

AW: Komponente umstellen
 
Es gibt noch die Methode Loaded, die nach dem Laden der Eigenschaften ausgeführt wird. Wenn man im Objektinspektor eingestellte Eigenschaften verwenden will ohne im Setter jedesmal etwas zu aktualisieren, kann man diese überschreiben. Dann sind alle Eigenschaften bereits gesetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:51 Uhr.
Seite 2 von 5     12 34     Letzte »    

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