Autor Beitrag
mtm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64

Windows 10 Pro 64 Bit
Delphi XE 6
BeitragVerfasst: Mi 04.04.12 17:11 
Hallo zusammen !
Ich versuche gerade eine Komponente zu basteln mit der ich die Lautstärke von CD, Wave, u.s.w verändern kann. Funktioniert soweit auch ganz gut.
Nun möchte ich aber im Objektinspektor die Möglichkeit geben, ein TrackBar direkt zuzuordnen, d.h. die Änderung der Lautstärke bei Änderung der TrackBar soll nicht erst programmiert werden müssen.

Leider habe ich dabei folgendes Problem : Die Zuordnung der Trackbar im Objektinspektor funktioniert soweit. Wenn ich das Programm starte, ist die Zuordnung aber wieder verschwunden.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
  TVolControl = Class(TComponent)
    private
      FType   : TDeviceType;  // CD, Wave, Synth, etc.
      FMixerID: Integer;      // ID des entsprechenden Typs
      FVolume : Byte;         // Lautstärkewert
      FTrack  : TTrackBar;    // zugeordneter TrackBar

      procedure setType(Value: TDeviceType);  // setze Typ
      procedure SetVolume(Value: Byte);       // setze Lautstärke
      procedure SetTrack(Value: TTrackBar);   // Ordne TrackBar zu

      procedure ChgTrack(Sender: TObject);    // Event onChange

      function GetVolume() : Byte;            // Lautstärke herausfinden
      function GetMixerControlID(CompType: integer) : DWORD;  // ID herausfinden
    public
      Constructor Create(AOwner: TComponent);override;
    published
      property DeviceType: TDeviceType read FType write setType;  // Typ
      property Volume: Byte read FVolume write setVolume;         // Lautstärke
      property TrackBar: TTrackBar read FTrack write SetTrack;    // TrackBar
  End;

procedure register;

implementation

Constructor TVolControl.Create(AOwner: TComponent);
var
  TypVar: Integer;
begin
  inherited;
  FType := dtSumme; // Stadard auf Summe
  case FType of
    dtSumme: TypVar := MIXERLINE_COMPONENTTYPE_SRC_FIRST;
    dtCD: TypVar := MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;
    dtSynth: TypVar := MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
    dtWave: TypVar := MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
  end;
  FMixerID := GetMixerControlID(TypVar); // Mixer-ID ermitteln
  FVolume := GetVolume; // aktuelle Lautstärke ermitteln
end;

...
procedure TVolControl.SetTrack(Value: TTrackBar);
begin
  FTrack := Value;    // zurodnen
  FTrack.Min := 0;    // Min-Wert setzen
  FTrack.Max := 255;  // Max-Wert setzen
  FTrack.Frequency := 25// Tick-Frequenz
  FTrack.Position := FVolume;   // TrackBar auf Wert setzen
  FTrack.OnChange := ChgTrack;  // Event zuordnen
end;

procedure TVolControl.ChgTrack(Sender: TObject);
var
  i: Byte;
begin
  if FTrack = nil then exit;  // keine TrackBar zugeordnet ? Nach Programmstart ist FTrack wieder nil.

  i := FTrack.Position;
  if i <> FVolume then    // veränderung ?
    SetVolume(i)
end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 05.04.12 12:44 
user profile iconmtm hat folgendes geschrieben Zum zitierten Posting springen:
Leider habe ich dabei folgendes Problem : Die Zuordnung der Trackbar im Objektinspektor funktioniert soweit. Wenn ich das Programm starte, ist die Zuordnung aber wieder verschwunden.
Das kann ich nicht reproduzieren. Ich habe die Komponente schnell mal installiert, auf ein Formular gelegt, eine Trackbar zugewiesen und einen Haltepunkt auf die Prüfung auf nil gelegt. Dort ist die Trackbar bei mir korrekt zugewiesen:

VolControlTrackBar

Steht die Trackbar denn in der .dfm Datei korrekt zugewiesen drin?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
object Form203: TForm203
  // ...
  object TrackBar1: TTrackBar
    // ...
  end
  object VolControl1: TVolControl
    Volume = 176
    TrackBar = TrackBar1
    Left = 296
    Top = 56
  end
end
Einloggen, um Attachments anzusehen!