(K)ubuntu 8.10 und Canvas

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
pierredrks
Beiträge: 34
Registriert: Do 4. Okt 2007, 18:35
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Braunfels

(K)ubuntu 8.10 und Canvas

Beitrag von pierredrks »

Hallo,
ich zeichne in einem Projekt bisher direkt auf ein Formular mittels
Canvas.MoveTo/LineTo.
Seitdem ich Kubuntu 8.10 habe werden keine Linien mehr angezeigt. Ich habe die unter 8.10 erstellte Anwendung auf einem älteren Kubuntu laufen lassen dort sieht man allerdings auch nichts. Zeichne ich auf ein Panel ändert das unter 8.10 nichts, allerdings scheint es dann unter älteren Kubuntu Versionen zu laufen.
Ich vermute mas, daß es mit der neuen GTK-Version zusammenhängt.

OS: Kubuntu 8.10
FPC: 2.3.1 Rev. 12360
Lazarus:0.9.27 Rev. 17826
Das Herz besitzt Gründe, die die Vernunft nicht kennt.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: (K)ubuntu 8.10 und Canvas

Beitrag von Euklid »

Hallo Pierre,

ich teile deine Einschätzung und glaube, dass es sich bei deiner Beschreibung um einen Bug handelt. Ich selbst habe nur Lazarus 0.9.26 installiert, hier funktioniert der Line-Befehl sowohl mit gtk als auch mit gtk2.
Du könntest mal testen, ob der Fehler wirklich nur in Verbindung mit GTK2 auftritt, indem du testweise in Projekt-->Compilereinstellungen die LCL-Schnittstelle auf gtk einstellst und das Projekt so kompilierst?

Mal eine allgemeine Erfahrung meinerseits: Das Zeichnen direkt auf die Canvas einer Form ist ziemlich langsam. Viel schneller geht es, wenn du eine Variable vom Typ TBitmap deklarierst, das Objekt erzeugst und "im Speicher" auf dieses virtuelle Bitmap zeichnest. Wenn du mit der Zeichnung fertig bist, kannst du sie dann auf die Canvas kopieren oder eine Bitmap auf der Form damit füllen. Auf diese Weise kann man das Zeichnen ganz erheblich beschleunigen.

Dennoch sollte das "direkte" Zeichnen funktionieren, der Bug ist daher ernst zu nehmen.

Viele Grüße, Euklid

pierredrks
Beiträge: 34
Registriert: Do 4. Okt 2007, 18:35
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Braunfels

Re: (K)ubuntu 8.10 und Canvas

Beitrag von pierredrks »

Hallo,
der Fehler tritt auch mit Gtk auf.
Das mit dem Zeichnen werde ich mir auf jedenfall mal merken. Geschwindigkeit ist bei dem jetzigen Programm nicht so wichtig, da immer nur wenige pixellange Linien gezeichnet werden müssen.
Das Herz besitzt Gründe, die die Vernunft nicht kennt.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: (K)ubuntu 8.10 und Canvas

Beitrag von theo »

pierredrks hat geschrieben:Hallo,
der Fehler tritt auch mit Gtk auf.
Das mit dem Zeichnen werde ich mir auf jedenfall mal merken. Geschwindigkeit ist bei dem jetzigen Programm nicht so wichtig, da immer nur wenige pixellange Linien gezeichnet werden müssen.


Wie zeichnest du denn? In OnPaint oder?

pierredrks
Beiträge: 34
Registriert: Do 4. Okt 2007, 18:35
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Braunfels

Re: (K)ubuntu 8.10 und Canvas

Beitrag von pierredrks »

Ich zeichne mit einem Timer, hatte es aber auch schon mit einem Button versucht.
Das Herz besitzt Gründe, die die Vernunft nicht kennt.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: (K)ubuntu 8.10 und Canvas

Beitrag von theo »

pierredrks hat geschrieben:Ich zeichne mit einem Timer, hatte es aber auch schon mit einem Button versucht.

Das beantwortet aber nicht meine Frage.
Auf den Canvas zeichnen muss man immer im OnPaint Ereignis. Das Neuzeichnen kann man mit Invalidate oder Repaint auslösen.

pierredrks
Beiträge: 34
Registriert: Do 4. Okt 2007, 18:35
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Braunfels

Re: (K)ubuntu 8.10 und Canvas

Beitrag von pierredrks »

Im onTimer-Event rufe ich eine eigene Prozedur draw auf, in der dann etwas in der Art steht

Code: Alles auswählen

 
begin
  Form1.Canvas.MoveTo(0,0);
  Form1.Canvas.LineTo(50,50);
end;
 
Das Herz besitzt Gründe, die die Vernunft nicht kennt.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: (K)ubuntu 8.10 und Canvas

Beitrag von theo »

pierredrks hat geschrieben:Im onTimer-Event rufe ich eine eigene Prozedur draw auf, in der dann etwas in der Art steht


Das wird aber nicht funktionieren (oder höchstens zufällig). Ich hab dir geschrieben wie's geht.

pierredrks
Beiträge: 34
Registriert: Do 4. Okt 2007, 18:35
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Braunfels

Re: (K)ubuntu 8.10 und Canvas

Beitrag von pierredrks »

Das ging eigentlich die ganze Zeit, naja war vielleicht wirklich Glück.
Also wenn ich dich richtig verstanden habe rufe ich draw-Prozedur im onPaint des Forms (oder was auch immer ich gerade habe) auf und im Timer löse ich via Form1.Repaint das onPaint-ergeignis aus?
Das Herz besitzt Gründe, die die Vernunft nicht kennt.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: (K)ubuntu 8.10 und Canvas

Beitrag von theo »

Joh

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: (K)ubuntu 8.10 und Canvas

Beitrag von Euklid »

theo hat geschrieben:Auf den Canvas zeichnen muss man immer im OnPaint Ereignis. Das Neuzeichnen kann man mit Invalidate oder Repaint auslösen.


Würde mich wundern. Wir hatten im Informatik-Unterricht stets im Buttonclick-Ereignis auf die Canvas der Form1 gezeichnet - das klappt wunderbar. Ich mein so ein Trottel war unser Informatik-Lehrer auch wieder nicht.
Möglicherweise ist das Zeichnen über das OnPaint-Ereignis sauberer o.ä. - gehen sollte aber meiner Meinung nach auch anders.

pierredrks
Beiträge: 34
Registriert: Do 4. Okt 2007, 18:35
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Braunfels

Re: (K)ubuntu 8.10 und Canvas

Beitrag von pierredrks »

Gut, leider funktioniert es so nicht. Es sieht so aus als ob das Paint-Ereignis nicht ausgelöst wird.

edit:
Ich habe das ganze jetzt wieder in den Timer gepackt und das Paint-Ereignis wird jetzt wieder ausgelöst.

@Euklid
Ich habe mal versucht deinen Vorschlag umzusetzen.
Ich habe eine Variable vom Typ TBitmap und auf dem Form eine TImage abgelegt. Auf das Canvas der Bitmap zeichne ich und danach bringe ich es durch Image1.Canvas.Draw(0,0,var) auf das Image.
Danach habe ich ziemlich viele Streifen auf dem Image( ähnlich einem Flackern).
Das Herz besitzt Gründe, die die Vernunft nicht kennt.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: (K)ubuntu 8.10 und Canvas

Beitrag von Christian »

Würde mich wundern. Wir hatten im Informatik-Unterricht stets im Buttonclick-Ereignis auf die Canvas der Form1 gezeichnet - das klappt wunderbar. Ich mein so ein Trottel war unser Informatik-Lehrer auch wieder nicht.
Möglicherweise ist das Zeichnen über das OnPaint-Ereignis sauberer o.ä. - gehen sollte aber meiner Meinung nach auch anders.


Da wiederspreche ich jetzt mal :)
Gezeichnet werden sollte im OnPaint wenn das anderswo im entsprechenden Widgetset funktioniert ists Zufall.
Unter MacOS z.b. geht das gar nicht und wird auch nie gehn. Im eigenen Interesse sollte man sich schon daran halten. Ein Bug ists jedenfalls nicht wenn ein Widgetset es "plötzlich" mal nicht mehr unterstützt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: (K)ubuntu 8.10 und Canvas

Beitrag von theo »

Euklid hat geschrieben:Würde mich wundern. Wir hatten im Informatik-Unterricht stets im Buttonclick-Ereignis auf die Canvas der Form1 gezeichnet - das klappt wunderbar. Ich mein so ein Trottel war unser Informatik-Lehrer auch wieder nicht.


Errm, zu euerem Informatik-Lehrer äussere ich mich jetzt mal nicht.. ;-)
Selbst wenn es geht, so ist es auf jeden Fall volatil. D.h. sobald die Form überlappt wird von einer anderen o.ä. ist die Zeichnung weg.
Der Canvas speichert die "Malerei" nicht. Bei jedem "invalidate" Ereignis (auch von Window Manager ausgelöst) ist sie weg.
Dieser Weg ist auf jedenfall nicht zu empfehlen. Die Widgetsets verpflichten sich nicht, das zu unterstützen

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: (K)ubuntu 8.10 und Canvas

Beitrag von Euklid »

Gut, dann werde ich das mal meinem Informatik-Lehrer ausrichten, wenn ich ihn denn nochmal sehe... "Sie haben ja keine Ahnung!" :)

Antworten