TForm - Aufbau und Darstellung
- Lincoln Six Echo
- Beiträge: 138
- Registriert: Di 26. Aug 2014, 16:42
- OS, Lazarus, FPC: Win10, Debian
- CPU-Target: I7/I9/Q9650/u.a.
- Wohnort: Hamburg
TForm - Aufbau und Darstellung
Legt man eine Anzahl visueller Components auf ein TForm und setzt die Farbe des TForm auf schwarz sieht man sobald das TForm auf dem Bildschirm dargestellt wird, das es zunächst leer und weiß ist und dann erst schwarz wird und die Components darüber gezeichnet werden.
Doublebuffered true / false ändert daran nichts. Unter Windows Thema hell der dunkel ändert nichts. Nur bei BorderStyle = bsNone des TForm tritt dieser Effekt nicht auf. Allerdings wird dann, anders als bei bsToolWindow oder bsSizeToolWindow bei DLLs (Plugins) das TForm dann neben der Anwendung als eigenes Symbol in der Taskleiste angezeigt, was nicht so sein soll.
Gerade bei Anwendungen die generell in einer dunklen Umgebung laufen ist das sehr unschön.
Hat jemand vielleicht eine Idee ?
Doublebuffered true / false ändert daran nichts. Unter Windows Thema hell der dunkel ändert nichts. Nur bei BorderStyle = bsNone des TForm tritt dieser Effekt nicht auf. Allerdings wird dann, anders als bei bsToolWindow oder bsSizeToolWindow bei DLLs (Plugins) das TForm dann neben der Anwendung als eigenes Symbol in der Taskleiste angezeigt, was nicht so sein soll.
Gerade bei Anwendungen die generell in einer dunklen Umgebung laufen ist das sehr unschön.
Hat jemand vielleicht eine Idee ?
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TForm - Aufbau und Darstellung
Hast du schon mal versucht die Farbe bei OnCreate zu setzen, und direkt schon im Objectinspector ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- Lincoln Six Echo
- Beiträge: 138
- Registriert: Di 26. Aug 2014, 16:42
- OS, Lazarus, FPC: Win10, Debian
- CPU-Target: I7/I9/Q9650/u.a.
- Wohnort: Hamburg
Re: TForm - Aufbau und Darstellung
Ja. Es macht keinen Unterschied. Auch Brush.Color := clBlack und Canvas.Brush.Color := clBlack usw. bringt keine Änderung. Ich habe ein Bildschirmvideo gemacht und mir jedes einzelne Bild angesehen, das Fenster wird zunächst komplett weiss dargestellt, egal was immer du als Farbe einstellst. Erst dann wird alles andere darüber gezeichnet.
Re: TForm - Aufbau und Darstellung
Kannst du mal ein Projektchen mit so einem Formular posten? Ich kann das Problem gerade nicht reproduzieren, auch nicht mir 100 Checkboxen, die per Childsizing automatisch angeordnet werden.
Evtl. musst du das Create des Formulars überschreiben und dort die Farbe schon vor "inherited" setzen.
Evtl. musst du das Create des Formulars überschreiben und dort die Farbe schon vor "inherited" setzen.
- Lincoln Six Echo
- Beiträge: 138
- Registriert: Di 26. Aug 2014, 16:42
- OS, Lazarus, FPC: Win10, Debian
- CPU-Target: I7/I9/Q9650/u.a.
- Wohnort: Hamburg
Re: TForm - Aufbau und Darstellung
In meinem Projekt sind eine Vielzahl von eigenen Components und Controls enthalten. Es ist eine DAW also ein virtuelles Tonstudio. Das sind u.a. eigene Group-Boxen die wiederum Controls enthalten. Dies Groupboxes enthalten u.a. Hintergrundbilder (Textures) die z.b. eine Metalloberfläche simulieren.
Deswegen brauchen die Zeichenvorgänge ein paar msec. länger als wenn es nur ein paar Standard-Komponenten sind.
Diese Forms sind in DLLs enthalten die nur bei Bedarf angezeigt werden. Die Anwendung lädt so eine DLL und ruft dann ggf. TForm(GUI).Show oder auch TForm(GUI).Visible := true auf. Genau dann sieht man da alles erst weiß ist und dann alles andere darüber gelegt wird.
Deswegen brauchen die Zeichenvorgänge ein paar msec. länger als wenn es nur ein paar Standard-Komponenten sind.
Diese Forms sind in DLLs enthalten die nur bei Bedarf angezeigt werden. Die Anwendung lädt so eine DLL und ruft dann ggf. TForm(GUI).Show oder auch TForm(GUI).Visible := true auf. Genau dann sieht man da alles erst weiß ist und dann alles andere darüber gelegt wird.
- Lincoln Six Echo
- Beiträge: 138
- Registriert: Di 26. Aug 2014, 16:42
- OS, Lazarus, FPC: Win10, Debian
- CPU-Target: I7/I9/Q9650/u.a.
- Wohnort: Hamburg
Re: TForm - Aufbau und Darstellung
So sieht das z.B. aus.
Re: TForm - Aufbau und Darstellung
Hilft es, wenn du das Formular außerhalb vom sichtbaren Screen erstellst und wenn alles fertig ist, in den sichtbaren Bereich setzt?
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- 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: TForm - Aufbau und Darstellung
Nur zum Auseinanderhalten - tritt der Effekt NUR bei 'nativen' Forms auf oder nur bei 'DLL' Forms auf oder bei beiden ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Lincoln Six Echo
- Beiträge: 138
- Registriert: Di 26. Aug 2014, 16:42
- OS, Lazarus, FPC: Win10, Debian
- CPU-Target: I7/I9/Q9650/u.a.
- Wohnort: Hamburg
Re: TForm - Aufbau und Darstellung
Die Form an einer nicht sichtbaren Position zu erzeugen und dann in den sichtbaren Bereich zu schieben ist eine ziemlich gute Idee.
Danke dafür.
Funktioniert leider auch nicht. Der Effekt erst alles weiß und dann alles andere darüber ist auch dann sichtbar.
Danke dafür.
Funktioniert leider auch nicht. Der Effekt erst alles weiß und dann alles andere darüber ist auch dann sichtbar.
- Lincoln Six Echo
- Beiträge: 138
- Registriert: Di 26. Aug 2014, 16:42
- OS, Lazarus, FPC: Win10, Debian
- CPU-Target: I7/I9/Q9650/u.a.
- Wohnort: Hamburg
Re: TForm - Aufbau und Darstellung
Der Effekt ist bis jetzt nur zu sehen wenn ein TForm zur Laufzeit des Programms erstellt und angezeigt wird.
Ich habe nun schon mit der WndProc herumprobiert, man kann z.B. WM_PAINT ausfiltern, dann wird kein Rahmen usw. gezeichnet aber auch alles erstmal mit weiß gefüllt.
Auch wenn es nicht aus einer DLL kommt, also einfach im Hauptprogramm aus einer Unit dann sieht man das auch.
wenn es nur ein paar Standardkomponenten sind geht das so schnell das man es nicht sieht, wenn aber Controls dabei sind die etwas aufwendiger gezeichnet werden müssen, wie z.B. meine Drehregler und dann noch Hintergrundgrafiken dazu kommen wird dieser Effekt immer unschöner.
Du hast halt immer erst eine große weiße Fläche auf dem Bildschirm bevor das eigentliche "Face" zu sehen ist.
Was mich nun echt ärgert ist das es in einer C++ gebauten Anwendung mit den gleichen Controls nicht auftritt.
"Dann nimm doch C++". Nein. Ich bin echter Pascal-Freak
Und Lazarus mit dem FPC ist eine absolut hervorragende IDE.
Vor einigen Tagen habe ich gelesen das Anwendungen die mit C++ gebaut wurden im Audio und Videobereich schneller laufen als wenn die mit Lazarus und dem FPC erstellt wurden. Das ist definitiv nicht so. Ich habe das lange ausprobiert. Es kommt auf den Algo an, nicht die Programmiersprache. Ich habe einige Plugins programmiert (mit Lazarus) die laufen tatsächlich einen Tick schneller als exakt das gleich mit C++ gemachte. Getestet auch in Cubase, Reaper, Studio One und FL Studio. Klar da geht es um Millisekunden aber Objectpascal geht da genauso wie C++.
Ich habe nun schon mit der WndProc herumprobiert, man kann z.B. WM_PAINT ausfiltern, dann wird kein Rahmen usw. gezeichnet aber auch alles erstmal mit weiß gefüllt.
Auch wenn es nicht aus einer DLL kommt, also einfach im Hauptprogramm aus einer Unit dann sieht man das auch.
wenn es nur ein paar Standardkomponenten sind geht das so schnell das man es nicht sieht, wenn aber Controls dabei sind die etwas aufwendiger gezeichnet werden müssen, wie z.B. meine Drehregler und dann noch Hintergrundgrafiken dazu kommen wird dieser Effekt immer unschöner.
Du hast halt immer erst eine große weiße Fläche auf dem Bildschirm bevor das eigentliche "Face" zu sehen ist.
Was mich nun echt ärgert ist das es in einer C++ gebauten Anwendung mit den gleichen Controls nicht auftritt.
"Dann nimm doch C++". Nein. Ich bin echter Pascal-Freak

Vor einigen Tagen habe ich gelesen das Anwendungen die mit C++ gebaut wurden im Audio und Videobereich schneller laufen als wenn die mit Lazarus und dem FPC erstellt wurden. Das ist definitiv nicht so. Ich habe das lange ausprobiert. Es kommt auf den Algo an, nicht die Programmiersprache. Ich habe einige Plugins programmiert (mit Lazarus) die laufen tatsächlich einen Tick schneller als exakt das gleich mit C++ gemachte. Getestet auch in Cubase, Reaper, Studio One und FL Studio. Klar da geht es um Millisekunden aber Objectpascal geht da genauso wie C++.
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TForm - Aufbau und Darstellung
Was für ein C++, den C++ Builder ?Was mich nun echt ärgert ist das es in einer C++ gebauten Anwendung mit den gleichen Controls nicht auftritt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- kralle
- Lazarusforum e. V.
- Beiträge: 1193
- Registriert: Mi 17. Mär 2010, 14:50
- OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
- CPU-Target: 64Bit
- Wohnort: Bremerhaven
- Kontaktdaten:
Re: TForm - Aufbau und Darstellung
Moin,
Nur mal so eine Idee:
"Hast Du den aktuellen Treiber für Deine Grafikkarte installiert?"
Hatte mal das Problem, das unter Firefox der Seitenaufbau ewig dauerte.
Erst der aktuelle Grafiktreiber, löste das Problem.
Gruß Heiko
Nur mal so eine Idee:
"Hast Du den aktuellen Treiber für Deine Grafikkarte installiert?"
Hatte mal das Problem, das unter Firefox der Seitenaufbau ewig dauerte.
Erst der aktuelle Grafiktreiber, löste das Problem.
Gruß Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- 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: TForm - Aufbau und Darstellung
An und für sich ist die LCL ja vorhanden, also kann man dort auch nachsehen. Die LCL kocht ja auch nur mit Wasser und reicht die Zeichenenbotschaften ja je nach Widgetset weiter.
Es tritt bei dir aber sowohl bei einem dunklen als auch bei einem hellen System auf. Ich hätte erwartet, das die default Farben des Systems genommen werden. Hmm, schon komisch.
Es tritt bei dir aber sowohl bei einem dunklen als auch bei einem hellen System auf. Ich hätte erwartet, das die default Farben des Systems genommen werden. Hmm, schon komisch.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Lincoln Six Echo
- Beiträge: 138
- Registriert: Di 26. Aug 2014, 16:42
- OS, Lazarus, FPC: Win10, Debian
- CPU-Target: I7/I9/Q9650/u.a.
- Wohnort: Hamburg
Re: TForm - Aufbau und Darstellung
Grafiktreiber ist aktuell.
Ein Kollege hat das in Visual C nachgebaut. Das Plugin sieht genauso aus, macht auch genau das gleiche, aber bei der Bildschirmdarstellung tritt der "Weiß-Effekt" NICHT auf.
Ein Kollege hat das in Visual C nachgebaut. Das Plugin sieht genauso aus, macht auch genau das gleiche, aber bei der Bildschirmdarstellung tritt der "Weiß-Effekt" NICHT auf.
Re: TForm - Aufbau und Darstellung
Soll es plattformübergreifend funktionieren oder nur für ein spezielles OS? Wahrscheinlich liegt es an den Parametern, wie ein Formular erstellt wird.
Unter Windows zum Beispiel wird das Ganze letztlich in der Unit Win32WSControls (siehe https://learn.microsoft.com/en-us/windo ... ewindowexw) erstellt. Dabei könntest du etwas mit dem Parameter FlagsEx experimentieren. Mir würde z.B. sowas wie WS_EX_TRANSPARENT (siehe https://learn.microsoft.com/en-us/windo ... dow-styles in den Sinn kommen. Vielleicht kannst du deinen Kollegen fragen, welche Parameter er zum Erzeugen verwendet hat. Wenn du etwas experimentieren willst, kannst du selbst in Win32WSControls in der Prozedur FinishCreateWindow vor Window := CreateWindowExW FlagsEx zum testen verändern. z.B. (ungetestet):
Ansonsten, kannst du das Projekt soweit minimieren, dass eine einfache Anwendung übrigbleibt, die du hier posten kannst? Evtl. findest du auf diesem Weg schon eine Lösung oder man kann dann damit testen.
Unter Windows zum Beispiel wird das Ganze letztlich in der Unit Win32WSControls (siehe https://learn.microsoft.com/en-us/windo ... ewindowexw) erstellt. Dabei könntest du etwas mit dem Parameter FlagsEx experimentieren. Mir würde z.B. sowas wie WS_EX_TRANSPARENT (siehe https://learn.microsoft.com/en-us/windo ... dow-styles in den Sinn kommen. Vielleicht kannst du deinen Kollegen fragen, welche Parameter er zum Erzeugen verwendet hat. Wenn du etwas experimentieren willst, kannst du selbst in Win32WSControls in der Prozedur FinishCreateWindow vor Window := CreateWindowExW FlagsEx zum testen verändern. z.B. (ungetestet):
Code: Alles auswählen
procedure FinishCreateWindow(const AWinControl: TWinControl; var Params: TCreateWindowExParams;
const AlternateCreateWindow: boolean; SubClass: Boolean = False);
...
FlagsEx := FlagsEx or WS_EX_TRANSPARENT;
Window := CreateWindowExW(FlagsEx, PWideChar(WideString(pClassName)),
PWideChar(UTF8ToUTF16(WindowTitle)), Flags,
Left, Top, Width, Height, Parent, 0, HInstance, @NCCreateParams);
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;