Einzelnen Beitrag anzeigen

LarsSchwencke

Registriert seit: 28. Sep 2012
19 Beiträge
 
#1

Formular zur Laufzeit gestalten

  Alt 5. Feb 2014, 15:49
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
  Mit Zitat antworten Zitat