Canvas.CopyRect unter Linux. Der Kreis bewegt sich nicht.
Canvas.CopyRect unter Linux. Der Kreis bewegt sich nicht.
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.
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.
-
- 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)
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:
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.
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;
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
Michael Springwald
-
- 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:
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:
Es erscheint kein Fehler, aber kopiert wird auch nichts.
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;
Johannes
-
- 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)
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;
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
Michael Springwald
-
- 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:
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.
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
-
- 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:
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
(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