Mehrere Buttons auf ein Panel und das dann als Komponente?

Rund um die LCL und andere Komponenten
Antworten
aseitzinger
Beiträge: 10
Registriert: Mi 18. Apr 2012, 15:07

Mehrere Buttons auf ein Panel und das dann als Komponente?

Beitrag von aseitzinger »

Hallo Forum,
wie kann ich mir eine Komponente bauen, in der z.B. auf einem Panel zwei Buttons abgelegt sind? So dass ich die aus der Palette immer wieder auf mein Form ziehen kann?
Ich suche heute schon den ganzen Tag rum, habe dazu aber noch nichts passendes gefunden...

Ich steuere mit Lazarus (bzw. früher mit Delphi) Fertigungsanlagen.
Im Einrichtbetrieb kann man von Hand z.B. alle Zylinder verfahren usw.
So eine Einrichtseite sieht man beispielsweise im Anhang.
Bisher hab ich die mit 'Copy und Paste' erstellt und dann alle Labels umbenannt, alle Buttons umbenannt, zu Fuß den Anzeigen (die hier grauen Scheiben) ihre Werte zugewiesen...

Da ich das System gerade überarbeite, würde ich gerne z.B. eine 'Zylinder'-Komponente haben, mit den Propertys 'in_gs: boolean, in_as: boolean' und so weiter
und auch 'btGS_is_down: boolean' usw.

Was so eine Komponente umfassen müsste, habe ich dick schwarz umrandet - und genau sowas hätte ich gerne in einem Package.
Wer kann mir mal die richtige Richtung zeigen? Ich glaube, wenn ich wüsste, wie ich in meiner neuen Komponente z.B. zwei Buttons auf einem Panel hätte, dann wär ich schon ein gutes Stück weiter...

Ein frame könnte ich zur Not auch nehmen, aber daran gefällt mir nicht, dass man es zur Entwurfszeit (auch versehentlich) fast beliebig verunstalten kann.
viele Grüße
Arno
Dateianhänge
Beispiel, wie eine der Einrichtseiten einer Anlage aussieht
Beispiel, wie eine der Einrichtseiten einer Anlage aussieht

Benutzeravatar
theo
Beiträge: 10947
Registriert: Mo 11. Sep 2006, 19:01

Re: Mehrere Buttons auf ein Panel und das dann als Komponente?

Beitrag von theo »

Es gibt ja so etwas im Misc Tab: TButtonPanel.
Schau dir den Quelltext dazu an, dann weisst du wie es geht.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Mehrere Buttons auf ein Panel und das dann als Komponente?

Beitrag von MAC »

Naja wass willst du haben ?
Ein Panel mit nen Paar Buttons Drauf, also dank objektorientierter - vererbung kein Problem.

Code: Alles auswählen

TZylinder = class(TPanel) // neue Klasse abgeleitet von TPanel
public
Button1:TButton;
BUtton2:TButton;
Label1:TButton;
constructor Create(Btn1Text,Btn2Text,LabelText:TCaption);
end
 
TZylinder.create(Btn1Text,Btn2Text,LabelText:TCaption);
begin
Button1 := TButton.Create(Self);
Button1.Parent := Self;
Button1.Left = 2;
Button1.Top := 4;
Button1.Caption := Btn1Text
// Width und Height
// Auch anchors sind so möglich
// das gleiche für button2 und label 1
end

Also einfaches Beispiel in dem du einfach nur die andereb Komponenten erstellst.
Natürlich sollte man noch allgemeine Proceduren hinzufügen je nach dem was die Komponente noch so können soll. Nen destructor wäre auch nicht schlecht (zum löschen).
Und jetzt der nachteil davon :)) Noch kannst du es nicht einfach auf die Form klatschen, du musst bei Form1Create deine Klasse erzeugen. (Du müsstest glaub ich nen Package daraus machen damit das geht. Ist bestimmt kein problem, ich weis nur nicht wie :)

Code: Alles auswählen

Signatur := nil;

aseitzinger
Beiträge: 10
Registriert: Mi 18. Apr 2012, 15:07

Re: Mehrere Buttons auf ein Panel und das dann als Komponente?

Beitrag von aseitzinger »

Hey Forum,
ich habe mir eine Klasse TMyPanel gemacht, auf der ich dann zwei Buttons und zwei Labels (als Indicator) im Programmcode erzeugt und abgelegt habe. Wenn ich mir zur Laufzeit eine Instanz dieses Panels erzeugt hab, hat es auch funktioniert. Nur bei der Integration als Komponente ist mir beim WIedereinfügen immer der Lazarus abgeschmiert...
Daraufhin habe ich mir, wie Theo vorgeschlagen hat, die Lazarus-Unit buttonpanels und dort das TButtonPanel angeschaut....
und hab gefunden, was mein Problem war.

Code: Alles auswählen

type
  TMyPanel = class(TCustomPanel)
  private
    { Private declarations }
  ...
  protected
    { Protected declarations }
  ...
  public
    { Public declarations }
    constructor Create(TheOwner: TComponent);override;
  published
    { Published declarations }
  ...
  end;
Das 'override' hatte bei mir gefehlt....
Ich hab mal das kleine Projekt als ZIP angehängt, falls das mal jemand brauchen kann...
Die 'Anzeigelämpchen' sind aus dem Zeichensatz Wingdings, also wahrscheinlich nicht plattformübergreifend...

viele Grüße
Arno
Dateianhänge
test_panels.zip
Beispielprogramm, Panel mit zwei Buttons und zwei 'Lämpchen'...
(60.24 KiB) 101-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6872
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Mehrere Buttons auf ein Panel und das dann als Komponente?

Beitrag von af0815 »

Da gibt es noch was im Downloadbereich der Forum -> http://www.lazarusforum.de/downloads.ph ... il&df_id=2 es sind 2 Leds als Komponeneten die aber 3 Zustände kennen, so wie in der Automatisierungstechnik öfters gebraucht. Ich habe keien Ahnung ob es mit aktuellen Lazarusversionen kompiliert. Sind eher als Demo für eigene selbstgezeichnete visuelle Objekte.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten