Die ganze Panel Klasse ansprechen
Re: Die ganze Panel Klasse ansprechen
Einfach im Event OnKlick von MenuItem 7 (MI_Panel) die Procedure "ShowPanel" verlinken.
PS: Da ich seh, was Du machst, schau Dir doch mal das letzte Projekt (mit der RadioGroup und TabControl) an, ich glaube wirklich, das ist wesentlich besser für Deinen Zweck geeignet. Habe zwar ShowTabs dort ausgestellt, können aber wieder einfach angestellt werden, dann ist auch ein Blättern zur Entwurfszeit wesenlich einfacher möglich, als die übereinander liegenden Panels zu bearbeiten (sparst Dir auch die ganze Zuweisungs- und Array-Geschichte)...nur meine Meinung... Ansonsten, siehts doch recht chick aus...
PS: Da ich seh, was Du machst, schau Dir doch mal das letzte Projekt (mit der RadioGroup und TabControl) an, ich glaube wirklich, das ist wesentlich besser für Deinen Zweck geeignet. Habe zwar ShowTabs dort ausgestellt, können aber wieder einfach angestellt werden, dann ist auch ein Blättern zur Entwurfszeit wesenlich einfacher möglich, als die übereinander liegenden Panels zu bearbeiten (sparst Dir auch die ganze Zuweisungs- und Array-Geschichte)...nur meine Meinung... Ansonsten, siehts doch recht chick aus...
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: Die ganze Panel Klasse ansprechen
Meinste das? Das solll ich verwenden oder das Prog davor?Michl hat geschrieben:Ich hätte auch noch einen, ohne den ganzen Kram mit dem Herausfinden der Indizes. Einfach Radiogroup (habe ich auf einer eigenen Form untergebracht) und ein PageControl auf der MainForm (@boneless: ähnlich TNotebook, wolltest Du ja wissen) und schon klappt die Zuweisung einfach über die Indexwerte (einfacher gehts fast nicht)...
Sämtliche Zuweisungen (Code) wären: In der MainForm:In der RadioGroupForm:Code: Alles auswählen
procedure TForm1.MI_WaehlePageClick(Sender: TObject); begin Form2.RadioGroup1.ItemIndex:=PageControl1.ActivePageIndex; if Form2.ShowModal=mrOK then PageControl1.ActivePageIndex:=Form2.RadioGroup1.ItemIndex; end;
Code: Alles auswählen
procedure TForm2.RadioGroup1SelectionChanged(Sender: TObject); begin ModalResult:=mrOK; end;
Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: Die ganze Panel Klasse ansprechen
Jup das!
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: Die ganze Panel Klasse ansprechen
OK, ich werd mich da ma durch-fuchsen 
Danke
EDIT: Aber glaubste, das empfielt sich? Weil wenn Form 2 erscheint, macht er ja die schleife mit "Zeige Page" so und so. Da aber bei mir jede "Page" einen individuellen Namen bekommen soll, kann ich da ja keine Schleife machen.
Was ja evtl gehen würde, ist ein Array - aber da bin ich mal etwas vorsichtig

Danke
EDIT: Aber glaubste, das empfielt sich? Weil wenn Form 2 erscheint, macht er ja die schleife mit "Zeige Page" so und so. Da aber bei mir jede "Page" einen individuellen Namen bekommen soll, kann ich da ja keine Schleife machen.
Was ja evtl gehen würde, ist ein Array - aber da bin ich mal etwas vorsichtig

Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: Die ganze Panel Klasse ansprechen
Schau Dir mal den Code an, Du brauchts kein Array oder irgenwelche Schleifen, Du hast einen Index! Lösche mal das FormCreate aus Form2!!!!! Trage statt dessen mal die Namen Deiner Panels oder sonstige Zeichketten in die Items von der RadioGroup ein. Try it! Versuchs! Macht Spass!
PS: Weitere Pages kannst Du mit einem Rechtsklick auf das PageControl hinzufügen.

PS: Weitere Pages kannst Du mit einem Rechtsklick auf das PageControl hinzufügen.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: Die ganze Panel Klasse ansprechen
Ich wusste es, kein Array! 
Ok ich versuchs

Ok ich versuchs

Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: Die ganze Panel Klasse ansprechen
... was haltet Ihr denn davon es einfach so zu machen?
... wobei das Setzen von "Enabled" bei einem nicht sichtbaren Panel irgendwie keinen Sinn macht.
Fertig.
Gruß Baba.
Code: Alles auswählen
procedure TForm1.AktivierePanel(pIndex : Integer);
var
i:integer;
begin
for i := 1 to 7 do begin // 7, oder eben die Anzahl der Panel die es gibt.
(FindComponent('Panel' + IntToStr(i)) as TPanel).Enabled := False;
(FindComponent('Panel' + IntToStr(i)) as TPanel).Visible := False;
end;
(FindComponent('Panel' + IntToStr(pIndex)) as TPanel).Enabled := True;
(FindComponent('Panel' + IntToStr(pIndex)) as TPanel).Visible := True;
end;
Code: Alles auswählen
procedure TForm1.AktivierePanel(pIndex : Integer);
var
i:integer;
begin
for i := 1 to 7 do begin // 7, oder eben die Anzahl der Panel die es gibt.
(FindComponent('Panel' + IntToStr(i)) as TPanel).Visible := False;
end;
(FindComponent('Panel' + IntToStr(pIndex)) as TPanel).Visible := True;
end;
Gruß Baba.
Code: Alles auswählen
// Erweiterung - alle Panel automatisch links oben in die Ecke. (Übereinander)
procedure TForm1.AktivierePanel(pIndex : Integer);
var
i:integer;
begin
for i := 1 to 7 do begin // 7, oder eben die Anzahl der Panel die es gibt.
(FindComponent('Panel' + IntToStr(i)) as TPanel).Visible := False;
(FindComponent('Panel' + IntToStr(i)) as TPanel).Left := 0;
(FindComponent('Panel' + IntToStr(i)) as TPanel).Top := 0;
end;
(FindComponent('Panel' + IntToStr(pIndex)) as TPanel).Visible := True;
end;
Zuletzt geändert von baba am Mi 4. Dez 2013, 23:48, insgesamt 2-mal geändert.
Re: Die ganze Panel Klasse ansprechen
Jo, wobei das so ziemlich meiner ersten Antwort entpricht
- ist aber MMn für das was er vorhat ein Umweg über Moskau wenn er von Berlin nach Rom will...

Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Die ganze Panel Klasse ansprechen
"Die ganze Panel Klasse ansprechen" will er. Ich sehe da keinen Umweg.
Baba.
Baba.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Die ganze Panel Klasse ansprechen
Statt das "(FindComponent('Panel' + IntToStr(x)) as TPanel)." immer wieder zu machen, würde ich das nur einmal machen und in einer lokalen Variable von Typ TPanel abspeichern, nur so nebenbei....
MFG
Michael Springwald
Michael Springwald
Re: Die ganze Panel Klasse ansprechen
Ja dem Titel nach, wenn man aber die Posts liest - ach egal. Ich glaube es wäre eher ein Fall für Smart Questions...
Edit: huch Pluto war dazwischen
Edit: huch Pluto war dazwischen

Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Die ganze Panel Klasse ansprechen
... sicher eine Anforderung, viele Lösungswege. (Wobei es mir nur um die Frage, nicht um sein Problem ging)
Wenn ich viele gleiche Komponenten, z.B. "Button1" - "Button10", ansprechen möchte, mache ich es so wie oben beschrieben.
Baba.
Wenn ich viele gleiche Komponenten, z.B. "Button1" - "Button10", ansprechen möchte, mache ich es so wie oben beschrieben.
Baba.
Re: Die ganze Panel Klasse ansprechen
Das unschöne an "FindComponent('Panel' + IntToStr(x))" ist, dass man die Panels nicht umbenennen darf. Ich denke, es wäre eine der wichtigsten ersten Lektionen für einen Anfänger, dass man schleunigst sprechende Namen für die Komponenten verwenden sollte, also "PanelAusgabe" statt "Panel25" oder "PanelEingabe" statt "Panel18", zum Beispiel.
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
PageControl
Hallo Leute.
Ja ihr habt Recht; Mein Problem entspricht nicht 100%ig der Überschrift dieses Threads. Aber das Wissen kam ja auch erst hinterher
@ Michl: Ich finde die Sache mit dem PageControl ziemlich super, da ich zwischen den Tabs übersichtlich wechseln kann, falls ich noch irgendetwas ändern muss. Das kann ich bei den Panels nicht. Da muss ich dann erstmal das richtige Panel raussuchen, die anderen irgendwo hinschieben und dann keine Lust mehr haben
@ All:
Bloß (!) Die Farbe vom PageControl kann ich nicht ändern, oder? Transparenz würde ja auch gehen. Funktioniert das irgendwie?
Ja ihr habt Recht; Mein Problem entspricht nicht 100%ig der Überschrift dieses Threads. Aber das Wissen kam ja auch erst hinterher

@ Michl: Ich finde die Sache mit dem PageControl ziemlich super, da ich zwischen den Tabs übersichtlich wechseln kann, falls ich noch irgendetwas ändern muss. Das kann ich bei den Panels nicht. Da muss ich dann erstmal das richtige Panel raussuchen, die anderen irgendwo hinschieben und dann keine Lust mehr haben

@ All:
Bloß (!) Die Farbe vom PageControl kann ich nicht ändern, oder? Transparenz würde ja auch gehen. Funktioniert das irgendwie?
- Dateianhänge
-
Prog mit PageControl.zip
- (1.49 MiB) 113-mal heruntergeladen
Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: Die ganze Panel Klasse ansprechen
"Transparent" ist es doch, nimmt zumindest bei mir die Farbe der MainForm an.Boneless hat geschrieben:Bloß (!) Die Farbe vom PageControl kann ich nicht ändern, oder? Transparenz würde ja auch gehen. Funktioniert das irgendwie?
[Edit] Ich habe mal mein Design geändert, da sehe ich, was Du meinst, ich glaube das ist ein Bug?!
Farbe individuell ändern geht nicht so einfach, siehe http://www.lazarusforum.de/viewtopic.ph ... 84&p=31343, dafür wäre die von Pluto vorgeschlagene Komponente TNotebook geeignet, die kann das.
Ich habe mal Dein Projekt so modifiziert (mit TNotebook), wie ich das in dem Beispiel gemacht hatte und etwas kommentiert - musst Du aber so nicht machen, ist nur ein Vorschlag.
- Dateianhänge
-
Beispiel mit TNotebook.zip
- (278.06 KiB) 103-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;