AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente umstellen

Ein Thema von EWeiss · begonnen am 22. Jan 2016 · letzter Beitrag vom 27. Jan 2016
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Komponente umstellen

  Alt 24. Jan 2016, 10:15
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#2

AW: Komponente umstellen

  Alt 24. Jan 2016, 11:30
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Komponente umstellen

  Alt 24. Jan 2016, 12:24
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.
Ahh ok werde das mal testen.. Danke.

Habe noch ein anderes kleines Problem.
Zur zeit setze ich die Device auf diese weise per Hand.
AudioVolume2.SelectAudioDevice(1); Das ist mir aber nicht aussagekräftig genug.

Jetzt versuche ich die Device als Property zu addieren.
So kann man sehen welche gerade aktiv sind.
Allerdings hab ich da noch einen Fehler, es werden die TStrings addiert aber in einer Liste.
Ich möchte die Einträge jedoch direkt wählen als Liste im AudioDevice property.
Siehe Shot.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:44 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Komponente umstellen

  Alt 24. Jan 2016, 12:42
Wenn Du da im Objektinspektor was auswählen willst, nimm doch dafür 'nen Aufzählungstypen.

Sowas z. B.?
Delphi-Quellcode:
  TAudioDevices = set of (adLautsprecher, adStereoMix, acLineIn, acCDAudio);
...
    FAudioDevices: TAudioDevices;
...
    property AudioDevices: TAudioDevices read FAudioDevices write FAudioDevices; // oder halt 'nen Setter bauen, wenn erforderlich...
An die Nummer für AudioVolume2.SelectAudioDevice(1) müsstest Du dann in der Art kommen:AudioVolume2.SelectAudioDevice(Ord(FAudioDevices)) Ord beginnt bei 0 zu zählen, eventuell müsste es dann AudioVolume2.SelectAudioDevice(Ord(FAudioDevices) + 1) heißen.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Komponente umstellen

  Alt 24. Jan 2016, 13:26
Zitat:
Aufzählungstypen
Kann ich nicht weil diese nicht festgelegt werden können.
Sind vom System zu System unterschiedlich.

Ich möchte eine Liste im Objektinspektor wo ich das jeweilige Device auswählen und der Komponente zuweisen kann.
Aktuell steht dort TStrings logisch weil die Rückgabe nun mal TStings ist.
Also was zurückgeben damit die Einträge addiert werden.

Delphi-Quellcode:
function TAudioVolume.GetAudioDevice: TStrings;
var
  N: integer;
  FDeviceList: array of TDeviceInfo;
  Items: TStringList;

begin
  Items := TStringList.Create;
  FAudioDevice := TStringList.Create;
  if FDeviceCount > 0 then
  begin
    SetLength(FDeviceList, FDeviceCount);
    for N := 0 to (FDeviceCount - 1) do
    begin
      FDeviceList[N] := GetDeviceInfo2(DeviceCollection, N);
      ExtractStrings(['('], [], pWideChar(FDeviceList[N].DeviceName), Items);

      FAudioDevice.Add(Items[0]);
      Items.Clear;
    end;
    Items.Free;
  end;

  Result := FAudioDevice;

end;
Zitat:
An die Nummer für AudioVolume2.SelectAudioDevice(1) müsstest Du dann in der Art kommen:AudioVolume2.SelectAudioDevice(Ord(FAudioDe vices)) Ord beginnt bei 0 zu zählen, eventuell müsste es dann AudioVolume2.SelectAudioDevice(Ord(FAudioDevices) + 1) heißen.
Ok das ist die Auswertung nachdem ein Eintrag aus dem Inspektor gewählt wurde.
Nur diese muss ich dort erst mal addieren

arghhh VCL
Komme langsam zum schluss das der Objekt Inspektor in Delphi Müll ist. Kann das sein?
Bool werte werden zu spät ausgewertet, Listen kann man nicht addieren usw..
Selbst mit dem alten VB6 ist so was alles möglich. Kopfschütteln.


gruss

Geändert von EWeiss (24. Jan 2016 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Komponente umstellen

  Alt 24. Jan 2016, 15:09
Ich kann Dir nicht so recht folgen, wo jetzt genau Deine Probleme liegen und warum Boolean-Werte zu spät ausgewertet werden.

Ist es so, dass zur Laufzeit alles funktioniert und auch wenn Du zur Designtime Deine Werte umstellst, aber wenn Du ein Projekt startest oder ein Formular öffnest funktioniert es nicht?
In dem Fall müsstest Du nachvollziehen, wann welche Werte in die DFM geschrieben und daraus wieder gelesen werden.

Also schau Dir evtl. mal die DFM im Textformat an, was dort eigentlich rein geschrieben wird oder wurde.

Wenn die DFM-Informationen passen musst Du schauen, wie und wann diese wieder gelesen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Komponente umstellen

  Alt 24. Jan 2016, 15:17
Zitat:
Ist es so, dass zur Laufzeit alles funktioniert und auch wenn Du zur Designtime Deine Werte umstellst, aber wenn Du ein Projekt startest oder ein Formular öffnest funktioniert es nicht?
Nein es ist so das zur Laufzeit alles geht aber zur Designtime nicht.

Problem 1.
Ich erstelle ein Property FAddVolume (Boolean).
Wenn ich diesen Wert im Objektinspektor ändere funktioniert soweit alles aber sobald das Formular in Delphi geschlossen
und anschließend wieder geöffnet wird ist alles durcheinander.
Laufzeit ist Ok.

Problem 2.
Ich erstelle eine Liste der vorhandenen Device
Diese wird im Objektinspektor als TStrings angezeigt und nicht als Liste so wie ich es gerne hätte.
Einen anderen weg habe ich noch nicht gefunden.

In der DFM wird alles richtig geschrieben.
Zitat:
object AudioVolume5: TAudioVolume
Left = 15
Top = 277
Width = 116
Height = 120
AppVolume = True
AudioDevice.Strings = (
'Lautsprecher '
'Stereo Mix '
'Line In '
'CD Audio ')
SuppressEvent = False
end
Der wert AppVolume wird aber zu spät erst zugewiesen.
Beim direkten ändern nicht aber beim erneuten öffnen der Form.


gruss

Geändert von EWeiss (24. Jan 2016 um 15:31 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:49 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-2025 by Thomas Breitkreuz