Canvas.CopyRect unter Linux. Der Kreis bewegt sich nicht.

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
mumie
Beiträge: 9
Registriert: Mi 15. Nov 2006, 18:46

Canvas.CopyRect unter Linux. Der Kreis bewegt sich nicht.

Beitrag von mumie »

Hallo,
ich lerne lazarus mit diesem Buch: Delphi für Kids 2. Auflage von Hans-Georg Schumann.
In Kapitel 11 (Seite224) wird ein Kreis programmiert, welcher über das Formular wandert. Das funktioniert auch mit Lazarus unter Windows. Aber leider nicht unter Linux. Ich bin mir jetzt nicht sicher, ob ich den Code aus dem Buch hier posten darf. Wegen des Urheberrechts. Ich vermute, das Canvas.CopyRect unter Linux nicht funktioniert.

Ich habe Opensuse10.2. Ich habe das auch mit Knoppix getestet. Es hat auch nicht funktioniert.

Programmbeschreibung:
Es wird ein Formular mit 3 Buttons erstellt. Der erste Button erzeugt einen Kreis mit Canvas.Ellipse. Der zweite Button lässt diesen Kreis dann mit Canvas.CopyRect in kleinen Schritten über das Formular wandern. Der dritte Button lässt den Kreis wieder verschwinden.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ich denke, nen ausschnitt mit Quellenangabe sollte man posten dürfen, dann können wir dir auch besser helfen ;).

Wenn du nicht willst, schick ihn halt mal per pm.
Johannes

pluto
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)

Beitrag von pluto »

also copyRect geht, das nutze ich ständig unter Linux.
auch bitBtl geht. Das wird eine Allgemeine Funktion sein. z.b. müsstes du so einen kreis bewegen können:

Code: Alles auswählen

var
  px,py:Integer;
 
bei OnCreate musst du dann nur noch:
px:=100; // Startposition bei 100 X
py:=50; // Startposition bei 50 Y
 
procedure MoveRec(x,y:Integer);
begin
  Canvas.fillrect(0,0,Width,Height);
  //  +10 ist die Größe du hast also einen Kreis der 10X10 Pixel groß ist
  Canvas.Ellipse(px+x,py+y,px+x+10,py+y+10);
end;
Wenn sie sich auto. bewegen soll musst du einen Timer nehmen.
Ich weiß jetzt nicht wie die das im Buch machen:
einfach einen Timer nehmen und den Interval z.b. auf 3000 MS stellen.
und anschließend auf die Registerseite wechseln und zwar auf Ereignisse.
Bei onTimer Doppelklick drauf machen und dann MoveRec(10,0);

Ich hoffe du weißt wie du den Code einsetzten musst. Wenn du möchtes kann ich dir auch eine Beispiel Anwendung schreiben.
weil dieses Beispiel flackert jetzt mit Sicherheit.
edit:
ich sehe gerade das die aufgaben Stellung anders lautet als ich es vermutet hatte.
Aber ich denke, das auch das Gehen sollte, du müsstes halt mein Beispiel etwas ändern.
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Es ist aber vielmehr das Problem, wieso ein CopyRect unter Widows einwandfrei funktioniert und unter Linux keinerlei Reaktion zeigt.

Wie verwendest du den CopyRect Pluto?

//Edit:

Warum funktioniert folgendes eigentlich nicht unter Linux:

Code: Alles auswählen

procedure TForm1.Button4Click(Sender: TObject);
begin
  Canvas.Color := clRed;
  Canvas.FillRect(0,0,100,100);
end;
 
procedure TForm1.Button5Click(Sender: TObject);
begin
  Canvas.CopyRect(Rect(0,0,100,100), Canvas, Rect(100,100,200,200));
end;
Es erscheint kein Fehler, aber kopiert wird auch nichts.
Johannes

pluto
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)

Beitrag von pluto »

Sobald ich unter linux bin teste ich es...... weil eigentlich müsste es gehen.

hast du mal mit den Positions Eigenschaften Rumgespielt ?

oder mit den Farben.... z.b. pen.Color:=clYellow pen.Style:=pssold

seit wan hat Canvas eine Color Eigenschaft ?
welche Farbe möchtes du denn Verändern ?
ich vermute die Hintergrund Farbe:
Canvas.Brush.Color:=clRed;
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Canvas.Color verändert die Füllfarbe, scheinbar wie Canvas.Brush.Color. Aber das Zeichnen get ja auch ganz normal.

Nur beim obigen Beispiel das CopyRect funzt nicht, und dafür sollte doch die gesetzte Farbe völlig egal sein. Und es müsste ein zweites Rotes Rechteck erscheinen, was unter Windows geht, unter Linux aber nicht.

Hab gerade gesehen, ich hab Ziel und Quellrect vertauscht, ändert aber nichts, unter Linux passiert nichts, unter Windows kommt das richtige bei raus.

Code: Alles auswählen

Canvas.CopyRect(Rect(100,100,200,200), Canvas, Rect(0,0,100,100));
Johannes

pluto
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)

Beitrag von pluto »

du hast schonmal die Parameter Vertauscht.
und zwar den ersten und den Letzten. Die müssen anders herum.

Aber es geht Trotzdem noch nicht, ich weiß aber copyRect geht.
Es muss an den Position Angaben liegen.
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

du hast schonmal die Parameter Vertauscht.
Hab ich ja schon korrigiert ;)
Johannes

pluto
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)

Beitrag von pluto »

seltsam, bei anderen sachen geht copyRect sehr gut.
z.b. bei meiner GUI setzte ich es auch ein.
aber ich Kopierer auch immer alles und keine teilausschnitte.
bis jetzt habe ich es auch noch nicht hinbekommen.

ich vergesse jedes mal wo sich BitBtl versteckt in welche unit.
MFG
Michael Springwald

pluto
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)

Beitrag von pluto »

Tut mir leid ich bekomme es auch nicht hin, ich weiß aber das Copyrect klappt.
evlt .liegt es damit zusammen, das es das gleiche Canvas ist.
MFG
Michael Springwald

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:

Beitrag von Christian »

Bugreport ??
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Noch nicht gemacht, war mir nicht sicher, ob es noch nen Haken gibt, denn ich übersehen hab.
Johannes

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:

Beitrag von Christian »

Was unter verschiedenen Plattformen unterschiedlich funktioniert sollte meiner Meinung nach immer gemeldet werden.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ok, hab nen Bugreport gemacht.
(http://www.freepascal.org/mantis/view.php?id=8880" onclick="window.open(this.href);return false;)

@mumie, da wird dir nichts anderes übrig bleiben, als zu warten, ob der Bug in nächster Zeit behoben wird
Johannes

pluto
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)

Beitrag von pluto »

Seltsam, ich habe damit viel gemacht, auch unter Linux, das muss was mit den Positions Angaben zu tuen haben. Aber ich sehe den Fehler diesmal auch noch nicht !
MFG
Michael Springwald

Antworten