Hallo,
ein Formular einer
VCL-Formularanwendung(Unit1) möchte ich zur Laufzeit gestalten.
Dazu habe ich eine Unit2 erstellt, in der die Gestaltung beschrieben ist.
Ob man das so macht weiß ich nicht, vielleicht kennt ja jemand eine besse Lösung.
Hier der Quellcode zur Anwendung, ist nur ein Beispiel.
Delphi-Quellcode:
unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls, Unit2, AdvSmoothSlider;
type
TForm1 =
class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Slider: TMeineSlider;
begin
Slider := TMeineSlider.Create(self);
end;
end.
Delphi-Quellcode:
unit Unit2;
interface
uses
AdvSmoothSlider, System.Classes, Controls, System.SysUtils;
type
TMeineSlider =
class(TComponent)
Slider1: TAdvSmoothSlider;
Slider2: TAdvSmoothSlider;
procedure StateChanged(Sender: TObject;
State: TAdvSmoothSliderState; Value: Double);
public
constructor Create(AOwner: TComponent);
end;
implementation
constructor TMeineSlider.Create(AOwner: TComponent);
begin
Slider1 := TAdvSmoothSlider.Create(AOwner);
Slider1.Parent := AOwner
as TWinControl;
Slider1.Top := 50;
Slider1.Left := 50;
Slider1.OnStateChanged := StateChanged;
Slider2 := TAdvSmoothSlider.Create(AOwner);
Slider2.Parent := AOwner
as TWinControl;
Slider2.Top := 100;
Slider2.Left := 100;
Slider2.OnStateChanged := StateChanged;
end;
procedure TMeineSlider.StateChanged(Sender: TObject;
State: TAdvSmoothSliderState; Value: Double);
begin
beep;
end;
end.
Das funktioniert soweit auch ganz gut, habe jedoch einige Probleme.
In der procedure TMeineSlider ist der Sender immer (), wie kann ich erreichen das der
Sender einern richtigen Wert bekommt?
Und weiter, OnStateChanged ist ja immer StateChanged zugewiesen,
wie kann ich es anstellen, dass ich die Zuweisung nicht für jeden Slider zuweisen muß?
Habe mir schon gedacht eine neue abgeleitet Klasse von TAdvSmoothSlider zu erstellen, etwa so:
Delphi-Quellcode:
type
TMeinSlider = class(AdvSmoothSlider)
private
procedure StateChanged(Sender: TObject;
State: TAdvSmoothSliderState; Value: Double);
end;
Delphi-Quellcode:
Slider1: TMeinSlider;
Slider2: TMeinslider;
usw.
Nur wird StateChanged dann nicht ausgeführt.
Weiß jemand wie es richtig geht?
Für Antworten wäre ich sehr dankbar.
MfG
Lars