PageControl.ActivePage

Rund um die LCL und andere Komponenten
Antworten
Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

PageControl.ActivePage

Beitrag von Luckner »

Habe in einer Form 2 Frames. In einem Frame ist ein PageControl mit 3 Seiten. Jetzt übernehme ich einige Daten aus einem Frame in das Frame mit dem PageControl. Das funktioniert soweit.
Aber "FrameDokumente.PageControl.ActivePage := TabSheet1;" funktioniert nicht richtig. Das Tabsheet1 wird nicht richtig angezeit. Ich muß erst auf den Reiter klicken, dann wir das Tabsheet erst richtig sichtbar. Innerhab eines Frames funktioniert jedoch das "ActivePage". Habe schon rumprobiert mit Setfocus und anderen Sachen, aber ohne Erfolg.

Bitte um Hilfe.

Gruß, Luckner

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: PageControl.ActivePage

Beitrag von six1 »

Ich hatte ähnliche Effekte, wenn ich alle Tabs auf TabVisible:=false gestellt hatte.
Ich habe dann ein leeres Tab eingefügt, welches sichtbar bleibt, während die anderen tabs in ihrer Sichtbarkeit eingestellt werden. danach kann man es wieder unsichtbar schalten.
Habe das auch nur über diesen Workaround hin bekommen...
Gruß, Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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: PageControl.ActivePage

Beitrag von af0815 »

Frames sind ein recht nette Sache :-) mit einigen Überraschungseffekten. Ich durfte mich aufgrund einiger 'Besonderheiten' mich bereits mit einigen internas Beschäftigen.

Generell verwende ich NUR dynamisch Erzeugt und eingebundene Frames. Damit umgeht man die ersten Überraschungen von manchmal nicht funktionierenden Events. Weil zur Laufzeit muss ich die Events sowieso immer im Programm setzen. Datenaustausch direkt von Frame zu Frame würde ich nicht machen, sondern immer über den den Parent. Wenn ich vom Frame aus etwas in was anderen Bereich machen wollte, so immer über einen Callback der vom Parent zugewiesen wird. Oder über ein Objekt, was vom Parent verwaltet wird und an die Frames übergeben wird.

Hintergrund ist der, das alles was im Frame ist, in den Parent gemappt wird, man kann sich das Frame wie ein unsichtbares Panel vorstellen. Dabei wird nur der Parent und die Positionen in den richtigen Kontext gestellt. Es kann dadurch beim Aufbau der Form natürlich Situationen geben, wo gerade ein Frame im Fenster erzeugt wird, das aber Referenzen auf ein noch später zu erstellendes Frame hat. Und das ist genau der Zeitpunkt wo dann unter Umständen Probleme in der internen Verwaltung auftauchen. Es war vor eingen Jahren mit den Frames recht schlimm, weil nicht alle Komponenten mit den Frames und dem dahinter stehenden Konstrukt umgehen konnten. Aber das obige geschilderte habe ich schon vor Jahr(zehnten) bei D7 kennen und fürchten gelernt. Nur damals konnte man nicht im Source sich das ansehen, wo und wie das funktioniert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: PageControl.ActivePage

Beitrag von Luckner »

hallo af0815,

ich arbeite noch immer mit D7 Enterprise. Sei es aus Bequemlichkeit, oder weil die Programme, die ich erstelle, ehe was für Handwerker und kleinere produzierende Betriebe sind. Finde D7 sehr stabil und funktionell. Habe da jedoch keinerlei Probleme mit Frames. Möchte jetzt auch mal Android-Tabletts einsetzen, deshalb versuche ich mich mit Lazarus anzufreuden. Die Daten werden hier wunderbar aus anderen Frames übernohmen. Der visueller Teil bereitet mir etwas Probleme. Alle Panels mit Inhalt funktionieren, nur das PageControl nicht. Werde mal den Vorschlag von six1 ausprobieren. Aber es ist auch nur eine Trickserei. In einem halben Jahr werde ich mich, hoffentlich, an diesen Trick erinnern, wenn ich es mal wieder brauche. Habe mit diesen PageControlls sowieso Probleme. Das man da nicht mal den Hintergrund färben kann. Erst dynamisch funktioniert es. Manche andere PageControlls aus anderen Packages lassen sogar die IDE einfrieren. Aber sonst finde ich Lazarus schon toll.

Gruß, Luckner

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: PageControl.ActivePage

Beitrag von six1 »

Mit D2,D6,D7, XE oder XE2 hatte ich die Probleme nicht. Das ist mir nur bei Lazarus aufgefallen.
Gruß, Michael

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: PageControl.ActivePage

Beitrag von Luckner »

Habe den Eindruck, als ob das PageControl kein aktives Tabsheet hat. Habe ich erstmal gelöst mit einem unsichtbarem Button auf dem Frame mit dem PageControl. Button aktiviert im OnClick das richtige Tabsheet und das Ganze aufgerufen aus dem anderem Frame. Es funktioniert erstmal. Möglicherweise findet sich mal eine bessere Lösung.

Luckner

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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: PageControl.ActivePage

Beitrag von af0815 »

Delphi muss sich um andere Widgetsets und Plattformen nichr kümmern und ist nur auf Windows angepasst. Manche Komponenten können noch Probleme haben. Dann ist es am besten das nachvollziehbar zu machen und im Bugtracker zu hinterlegen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: PageControl.ActivePage

Beitrag von fliegermichl »

Passiert denn das Problem nur unter Windows oder auch unter Linux?
Weil sowohl Delphi als auch Lazarus erzeugen ja nur Wrapperklassen für die vom jeweiligen Betriebssystem angebotenen PageControls.

Das mit dem Hintergrund einfärben habe ich nämlich auch mit Delphi nie hinbekommen.

Antworten