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.
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; FMixerID: Integer; FVolume : Byte; FTrack : TTrackBar; procedure setType(Value: TDeviceType); procedure SetVolume(Value: Byte); procedure SetTrack(Value: TTrackBar); procedure ChgTrack(Sender: TObject); function GetVolume() : Byte; function GetMixerControlID(CompType: integer) : DWORD; public Constructor Create(AOwner: TComponent);override; published property DeviceType: TDeviceType read FType write setType; property Volume: Byte read FVolume write setVolume; property TrackBar: TTrackBar read FTrack write SetTrack; End;
procedure register;
implementation
Constructor TVolControl.Create(AOwner: TComponent); var TypVar: Integer; begin inherited; FType := dtSumme; 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); FVolume := GetVolume; end;
... procedure TVolControl.SetTrack(Value: TTrackBar); begin FTrack := Value; FTrack.Min := 0; FTrack.Max := 255; FTrack.Frequency := 25; FTrack.Position := FVolume; FTrack.OnChange := ChgTrack; end;
procedure TVolControl.ChgTrack(Sender: TObject); var i: Byte; begin if FTrack = nil then exit; i := FTrack.Position; if i <> FVolume then SetVolume(i) end; |