AGB  ·  Datenschutz  ·  Impressum  







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

Formular zur Laufzeit gestalten

Ein Thema von LarsSchwencke · begonnen am 5. Feb 2014 · letzter Beitrag vom 5. Feb 2014
Antwort Antwort
LarsSchwencke

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

Formular zur Laufzeit gestalten

  Alt 5. Feb 2014, 14: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
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Formular zur Laufzeit gestalten

  Alt 5. Feb 2014, 15:36
Ich nehme an mit "zur Laufzeit gestalten" meinst Du die Komponenten zur Laufzeit erzeugen und setzen zu wollen. Dazu brauchst Du keine zweite Form.
Du benötigst lediglich in der Methode, die die Komponenten hinzufügen soll entsprechend ein Mal pro Komponententyp eine Variablendeklaration und dann tobst Du dich aus.
Also ungefähr:
Delphi-Quellcode:
procedure TForm1.ErzeugeKomponenten;
var einSlider: TAdvSmoothSlider;
    i: Integer;
begin
  for i := 1 to 5 do
  begin
    einSlider := TAdvSmoothSlider.Create(Self); // Damit gehört der Slider zur Instanz der TForm1 und wird beim zerstören selbiger mit freigegeben
    einSlider.Parent := Self; // Oder eben ein Panel wo das drauf liegt
    einSlider.Top := i*50 + 50; // Oder sonst irgendeine abgefahrene Mathematik zur Positionsbestimmung
    einSlider.Left := i*50 + 50; // siehe oben
    einSlider.OnStateChanged := StateChanged;
  end; // Mit jeden Durchlauf der Schleife wird ein neuer Slider erzeugt und auf die Form geklatscht...jeweils um 50 Pixel verschoben...oder so
end;
Das ist selbstverständlich noch ausbaufähig aber eine Grundlage. Du könntest Dir zum Beispiel noch eine Liste gönnen, in der Du die ganzen Slider Instanzen mitführst, um leichter auf sie zuzugreifen.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
LarsSchwencke

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

AW: Formular zur Laufzeit gestalten

  Alt 5. Feb 2014, 15:48
Hallo Sherlock,

sicher, aber da die Gestaltung des Formulars recht aufwendig ist,
und ich es immer wieder verwenden möchte schien mir die Variante mit einer
wiederverwendbaren Unit als besser Lösung.

MfG
Lars
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Formular zur Laufzeit gestalten

  Alt 5. Feb 2014, 15:53
Wäre es da nicht einfacher, das Formular einmalig zu gestalten und dann in der Objektablage zu hinterlegen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
LarsSchwencke

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

AW: Formular zur Laufzeit gestalten

  Alt 5. Feb 2014, 17:08
Hallo,

ok, ich muß weiter ausholen.
Auf dem Forular soll es einen Bereich geben der Unterschiedlich aussieht.
An dieser Position platziere ich mittels Unit2 eine Groupbox.
Aber diese Groupbox samt Inhalt hat unterschiedliches aussehen.
Es sind unterschiedeliche Slider, Button usw. drau positioniert je nach Auswahl.

Mir schien diese Lösung ok zu sein.

Bessere Vorschläge?

MfG
Lars
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Formular zur Laufzeit gestalten

  Alt 5. Feb 2014, 19:08
Wäre da eine Textdatei, die die verschiedenen Layouts beschreibt und die dann zur Laufzeit entsprechend interpretiert wird, nicht besser? Ließe sich auch ohne Compilierung etc. viel leichter erweitern etc.
  Mit Zitat antworten Zitat
Natcree

Registriert seit: 5. Mär 2013
502 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Formular zur Laufzeit gestalten

  Alt 5. Feb 2014, 20:50
Habe mal was ähnliches gemacht schau dir mal das prog an vielleicht findest du was brauchbares
Angehängte Dateien
Dateityp: rar Menü 2.rar (347,7 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Formular zur Laufzeit gestalten

  Alt 5. Feb 2014, 22:05
Falls es unterschiedliche aber relativ statische Controlanordnungen sein sollten könnten Frames oder embedded Forms helfen.
Man könnte dadurch verschiedene Varianten vorbereiten und dynamisch eine davon in die Groupbox setzen.

Das taugt natürlich nicht, wenn der Aufbau des Bereiches je nach Datensituation dynamisch zusammengestellt werden muss.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  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 20:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz