Probleme mit Lazarus OpenGl sowie mit Fonts...
Probleme mit Lazarus OpenGl sowie mit Fonts...
Hallo, nachdem mein Projekt mittlerweile "erwachsen" geworden ist bin ich gerade an den "Feinheiten" angekommen, hier bestehen noch 2 Probleme worauf ich bisher noch keine Antwort gefunden habe...
1.) Probleme mit Font (Fixed -Pitch)
Wenn ich in meinem Projekt in einem Formular einen Font auswähle (z.b. Courier 10 Pitch) dann wird der Font unter Gtk2 korrekt dargestellt, nicht aber unter Gtk1. Alle Umlaute werde nicht (bzw mit falschen Zeichen) dargestellt. Wenn ich nun die Fonteigenschaft wieder auf default_font setze dann ändert das nichts an den falschen Zeichen. Erst wenn ich im .lfm File manuell alle (!) Einträge mit Font.Height entferne dann werden die Zeichen wieder richtig dargestellt.
Frage: Wie kann ich unter Gtk1 einen Font auswählen mit einer festen Schriftbreite (FIXED PITCH) ???
2.) OpenGl: Habe die Frage schon im US Forum gestellt aber keine Antwort...
In meinem Program wird ein OpenGlControl verwendet. Dieses Funktioniert unter Gkt1 einwandfrei. Unter Gtk2 allerdings verursacht das OpenGlControl auf vielen Rechnern (gleiche Ubuntu- Version) XErrors (Badmatch), bei einigen Rechnern gleich am Anfang, bei einigen erst beim Beenden des Programms... Lediglich auf einem Rechner läuft das OpenGlControl ohne Fehler. Wenn ich mit Gtk1 kompiliere sind alle Rechner in der Lage ohne den XError- Badmatch zu arbeiten.
Wie kann ich solche Fehler eingrenzen bzw. die stelle im Quelltext finden die den Fehler veruracht??? Meinen Code kann ich ausschliessen da das Programm unter Gkt1 ja einwandfrei läuft und beim entfernen des OpenGl Controls auch auf Gtk2 ohne Fehler läuft.
Der Debugger hilft bei XErrors ja nicht weiter, oder???
mfg Thomas
1.) Probleme mit Font (Fixed -Pitch)
Wenn ich in meinem Projekt in einem Formular einen Font auswähle (z.b. Courier 10 Pitch) dann wird der Font unter Gtk2 korrekt dargestellt, nicht aber unter Gtk1. Alle Umlaute werde nicht (bzw mit falschen Zeichen) dargestellt. Wenn ich nun die Fonteigenschaft wieder auf default_font setze dann ändert das nichts an den falschen Zeichen. Erst wenn ich im .lfm File manuell alle (!) Einträge mit Font.Height entferne dann werden die Zeichen wieder richtig dargestellt.
Frage: Wie kann ich unter Gtk1 einen Font auswählen mit einer festen Schriftbreite (FIXED PITCH) ???
2.) OpenGl: Habe die Frage schon im US Forum gestellt aber keine Antwort...
In meinem Program wird ein OpenGlControl verwendet. Dieses Funktioniert unter Gkt1 einwandfrei. Unter Gtk2 allerdings verursacht das OpenGlControl auf vielen Rechnern (gleiche Ubuntu- Version) XErrors (Badmatch), bei einigen Rechnern gleich am Anfang, bei einigen erst beim Beenden des Programms... Lediglich auf einem Rechner läuft das OpenGlControl ohne Fehler. Wenn ich mit Gtk1 kompiliere sind alle Rechner in der Lage ohne den XError- Badmatch zu arbeiten.
Wie kann ich solche Fehler eingrenzen bzw. die stelle im Quelltext finden die den Fehler veruracht??? Meinen Code kann ich ausschliessen da das Programm unter Gkt1 ja einwandfrei läuft und beim entfernen des OpenGl Controls auch auf Gtk2 ohne Fehler läuft.
Der Debugger hilft bei XErrors ja nicht weiter, oder???
mfg Thomas
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Nachtrag:
Der OpenGlControl- Fehler (XError, Badmatch) passiert auch in einem neuen (leeren) Projekt nur mit einem OpenGlControl auf dem Formular.
Von daher muss das ja auch bei anderen vorkommen. Oder wird OpenGlControl sooo selten verwendet???
Der OpenGlControl- Fehler (XError, Badmatch) passiert auch in einem neuen (leeren) Projekt nur mit einem OpenGlControl auf dem Formular.
Von daher muss das ja auch bei anderen vorkommen. Oder wird OpenGlControl sooo selten verwendet???
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Gtk1 ist abgeschrieben, d.h. auf dessen funktionieren wird afaik nicht mehr Rücksicht genommen.gtom hat geschrieben: 1.) Probleme mit Font (Fixed -Pitch)
Wenn ich in meinem Projekt in einem Formular einen Font auswähle (z.b. Courier 10 Pitch) dann wird der Font unter Gtk2 korrekt dargestellt, nicht aber unter Gtk1. Alle Umlaute werde nicht (bzw mit falschen Zeichen) dargestellt. Wenn ich nun die Fonteigenschaft wieder auf default_font setze dann ändert das nichts an den falschen Zeichen. Erst wenn ich im .lfm File manuell alle (!) Einträge mit Font.Height entferne dann werden die Zeichen wieder richtig dargestellt.
Frage: Wie kann ich unter Gtk1 einen Font auswählen mit einer festen Schriftbreite (FIXED PITCH) ???
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
mit Gtk2 kann ich auch leben wenn Problem 2 behoben ist... 

Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Ich kann das Problem hier (OpenSuSE 11.1, GTK2: 2.14.4) nicht reproduzieren.gtom hat geschrieben:mit Gtk2 kann ich auch leben wenn Problem 2 behoben ist...
Unterscheiden sich die Systeme in den GTK2 Versionen? Sonstige Dinge wie Compiz etc?
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Also ich nutze OpenGL und GTK2 Ohne Ende und hatte noch nie Probleme, sowohl unter Win, nicht, als auch unter Kubuntu 9.10 ( Gforce 8400m )
--
Just try it
Just try it
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Das Projekt läuft unter Ubuntu 8.10 mit RTAI (also mit nem RealTime Kernel)
Auf 9.10 Std sowie auf meinem Atom(8.10 RTAI) läuft es ohne Probleme,
Der Fehler tritt immer auf wenn das zugehörige Formular gelöscht wird... OnDestroy...
Wi kann man XErrors "debuggen" ???
Gru0 Thomas
Auf 9.10 Std sowie auf meinem Atom(8.10 RTAI) läuft es ohne Probleme,
Der Fehler tritt immer auf wenn das zugehörige Formular gelöscht wird... OnDestroy...
Wi kann man XErrors "debuggen" ???
Gru0 Thomas
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Das wird damit zusammenhängen das GTK1 kein Unicode kann.Alle Umlaute werde nicht (bzw mit falschen Zeichen) dargestellt.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Na wenn der Fehler beim Löschen auftritt, sieht sich mir das schwer nach einem Zugriff auf OpenGL oder andere Komponenten nach einem Free aus.
Ich geh da immer her und habe eine Bool Variable die den Kompletten Zugriff steuert. Die machst du bei OnClose auf False.
Außerdem kannst du das Beenden ganz normal depuggen wie alles andere auch. Mach nen Haltepunkt da hin wo das beenden ausgelöst wird und dann schritt für schritt.
Ich geh da immer her und habe eine Bool Variable die den Kompletten Zugriff steuert. Die machst du bei OnClose auf False.
Außerdem kannst du das Beenden ganz normal depuggen wie alles andere auch. Mach nen Haltepunkt da hin wo das beenden ausgelöst wird und dann schritt für schritt.
--
Just try it
Just try it
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Erstmal Danke für die Antworten...
Habe mal zum Test auf 2 Rechner das gleiche Ubuntu aufgespielt, Lazarus aus den Paketquellen installiert und die Rechner identisch aufgebaut (Wie gesagt, ist nur die Hardware unterschiedlich)
Auf beiden Rechnern das gleiche Projekt ausgeführt, Rechner 1 steigt mit nem XError aus, Rechner 2 läuft ohne Probleme...
Der Fehler tritt immer hier auf:
The program 'test' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadDrawable (invalid Pixmap or Window parameter)'.
(Details: serial 2119 error_code 9 request_code 145 minor_code 9)
Fehlerzeile: gtkproc.inc ab Zeile 4173
procedure DestroyWidget(Widget: PGtkWidget);
var
Info: PWidgetInfo;
AWinControl: TWinControl;
Mess: TLMessage;
begin
//DebugLn(['DestroyWidget A ',GetWidgetDebugReport(Widget)]);
{$IFDEF DebugLCLComponents}
if DebugGtkWidgets.FindInfo(Widget)=nil then
DebugLn(['DestroyWidget ',GetWidgetDebugReport(Widget)]);
{$ENDIF}
Info:=GetWidgetInfo(Widget);
if Info<>nil then begin
if (Info^.LCLObject is TWinControl) then begin
AWinControl:=TWinControl(Info^.LCLObject);
if AWinControl.HandleAllocated
and (PGtkWidget(AWinControl.Handle)=Widget) then begin
// send the LM_DESTROY message before destroying the widget
FillChar(Mess,SizeOf(Mess),0);
Mess.msg := LM_DESTROY;
DeliverMessage(Info^.LCLObject, Mess);
end;
end;
FreeWidgetInfo(Widget);
end;
{$IFDEF DebugLCLComponents}
DebugGtkWidgets.MarkDestroyed(Widget);
{$ENDIF}
gtk_widget_destroy(Widget); <<<<<<<<<<<<<<<<<<< Da kommt der XError
//DebugLn(['DestroyWidget B']);
end;
Grundsätzlich funktioniert mein Projekt, sind mittlerweile ca. 800kb Quelltext und etwa 20 Benutzer die in der Testphase mitmachen, bei etwa 12 Usern tritt dieser Fehler beim beenden des Programms auf,,,
Gruß Thomas
Habe mal zum Test auf 2 Rechner das gleiche Ubuntu aufgespielt, Lazarus aus den Paketquellen installiert und die Rechner identisch aufgebaut (Wie gesagt, ist nur die Hardware unterschiedlich)
Auf beiden Rechnern das gleiche Projekt ausgeführt, Rechner 1 steigt mit nem XError aus, Rechner 2 läuft ohne Probleme...
Der Fehler tritt immer hier auf:
The program 'test' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadDrawable (invalid Pixmap or Window parameter)'.
(Details: serial 2119 error_code 9 request_code 145 minor_code 9)
Fehlerzeile: gtkproc.inc ab Zeile 4173
procedure DestroyWidget(Widget: PGtkWidget);
var
Info: PWidgetInfo;
AWinControl: TWinControl;
Mess: TLMessage;
begin
//DebugLn(['DestroyWidget A ',GetWidgetDebugReport(Widget)]);
{$IFDEF DebugLCLComponents}
if DebugGtkWidgets.FindInfo(Widget)=nil then
DebugLn(['DestroyWidget ',GetWidgetDebugReport(Widget)]);
{$ENDIF}
Info:=GetWidgetInfo(Widget);
if Info<>nil then begin
if (Info^.LCLObject is TWinControl) then begin
AWinControl:=TWinControl(Info^.LCLObject);
if AWinControl.HandleAllocated
and (PGtkWidget(AWinControl.Handle)=Widget) then begin
// send the LM_DESTROY message before destroying the widget
FillChar(Mess,SizeOf(Mess),0);
Mess.msg := LM_DESTROY;
DeliverMessage(Info^.LCLObject, Mess);
end;
end;
FreeWidgetInfo(Widget);
end;
{$IFDEF DebugLCLComponents}
DebugGtkWidgets.MarkDestroyed(Widget);
{$ENDIF}
gtk_widget_destroy(Widget); <<<<<<<<<<<<<<<<<<< Da kommt der XError
//DebugLn(['DestroyWidget B']);
end;
Grundsätzlich funktioniert mein Projekt, sind mittlerweile ca. 800kb Quelltext und etwa 20 Benutzer die in der Testphase mitmachen, bei etwa 12 Usern tritt dieser Fehler beim beenden des Programms auf,,,
Gruß Thomas
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Könnte das ganze vielleicht damit zusammenhängen das unteschiedliche Themes genutzt werden,und der Fehler nur bei einem bestimmten Theme auftritt?
(hm,ok du hast zwei identische Rechner aufgesetzt also vergiss es)
(hm,ok du hast zwei identische Rechner aufgesetzt also vergiss es)
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Das Verhalten ist unabhängig vom eingestellten Thema und passiert auch nur bei OpenGlControl...
D.h. gtkWidgetset -> DestroyHandle läuft für alle Buttons, Menus, Listboxes etc einwandfrei durch bis das OpenGl- Controll kommt,
Zum Test habe ich mal alle Gl-Ausgaben mit ner Bool- Variable unterbunden, dennoch tritt der Fehler genau an der Stelle auf...
Bin langsam mit meinem Latein am Ende...
D.h. gtkWidgetset -> DestroyHandle läuft für alle Buttons, Menus, Listboxes etc einwandfrei durch bis das OpenGl- Controll kommt,
Zum Test habe ich mal alle Gl-Ausgaben mit ner Bool- Variable unterbunden, dennoch tritt der Fehler genau an der Stelle auf...
Bin langsam mit meinem Latein am Ende...

Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
Äh, nochwas, hab ich ganz vergessen...
Ich rede hier von allen (!) Lazarus Apps die TOpenGlControl benutzen, auch das original.- Beispiel...!
die Anwendungen laufen alle aber beim Beenden kommt der Fehler (XError, BadMatch), normalerweise bekommt der Benutzer davon nichts mit es sei denn man startet aus einem Terminal oder man hat das Debugger- Fenster auf... D.h. wenn das ein "normales" Programm ist dann ist der Fehler eigentlich egal da er immer nur beim Beenden auftritt und ansonsten keine negativen Auswirkungen hat, mein Programm allerdings läuft in einer Echtzeit umgebung und muss ordentlich beendet werden damit die nachfolgenden Prozesse mit beendet werden... Da von den vielen Leuten die da mitmachen etwa 12 den gleichen Fehler haben kann ich mir nicht vorstellen dass der Fehler soooo unbekannt sein soll... !?
Noch bezüglich Gtk1 und Umlauten...
Warum werden alle Umlaute korrekt dargestellt solange ich bei MainForm.Font NICHTS ändere... !? Sobald ich MainForm,.Font.Height irgendeinen Wert zuweise werden die Umlaute nicht mehr richtig dargestellt...
Gruß Thomas
Ich rede hier von allen (!) Lazarus Apps die TOpenGlControl benutzen, auch das original.- Beispiel...!
die Anwendungen laufen alle aber beim Beenden kommt der Fehler (XError, BadMatch), normalerweise bekommt der Benutzer davon nichts mit es sei denn man startet aus einem Terminal oder man hat das Debugger- Fenster auf... D.h. wenn das ein "normales" Programm ist dann ist der Fehler eigentlich egal da er immer nur beim Beenden auftritt und ansonsten keine negativen Auswirkungen hat, mein Programm allerdings läuft in einer Echtzeit umgebung und muss ordentlich beendet werden damit die nachfolgenden Prozesse mit beendet werden... Da von den vielen Leuten die da mitmachen etwa 12 den gleichen Fehler haben kann ich mir nicht vorstellen dass der Fehler soooo unbekannt sein soll... !?
Noch bezüglich Gtk1 und Umlauten...
Warum werden alle Umlaute korrekt dargestellt solange ich bei MainForm.Font NICHTS ändere... !? Sobald ich MainForm,.Font.Height irgendeinen Wert zuweise werden die Umlaute nicht mehr richtig dargestellt...
Gruß Thomas
Re: Probleme mit Lazarus OpenGl sowie mit Fonts...
So, Problem ist gleöst...
Je nach Rechnerkonfiguration steigt TOpenGlControl mit nem xError (Badmatch, BadDrawable) aus...
Lösung:
1.) die glx funktionen die in gtkglxcontext enthalten sind werden durch die funktionen der FP- Unit glx ersetzt.
2.) context_unref wird auskommentiert...
Jetzt läuft bei mir OpenGlContext auf allen Rechnern...
Gruß Thomas
Je nach Rechnerkonfiguration steigt TOpenGlControl mit nem xError (Badmatch, BadDrawable) aus...
Lösung:
1.) die glx funktionen die in gtkglxcontext enthalten sind werden durch die funktionen der FP- Unit glx ersetzt.
2.) context_unref wird auskommentiert...
Jetzt läuft bei mir OpenGlContext auf allen Rechnern...
Gruß Thomas