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
Mehrere Buttons auf ein Panel und das dann als Komponente?
-
- Beiträge: 10
- Registriert: Mi 18. Apr 2012, 15:07
Re: Mehrere Buttons auf ein Panel und das dann als Komponente?
Es gibt ja so etwas im Misc Tab: TButtonPanel.
Schau dir den Quelltext dazu an, dann weisst du wie es geht.
Schau dir den Quelltext dazu an, dann weisst du wie es geht.
-
- 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?
Naja wass willst du haben ?
Ein Panel mit nen Paar Buttons Drauf, also dank objektorientierter - vererbung kein Problem.
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 
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


Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 10
- Registriert: Mi 18. Apr 2012, 15:07
Re: Mehrere Buttons auf ein Panel und das dann als Komponente?
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.
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
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;
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
- 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?
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).