Auf Canvas zeichnen (Ubuntu)

Für Fragen von Einsteigern und Programmieranfängern...
Horn
Beiträge: 8
Registriert: Mi 27. Jan 2010, 20:46

Auf Canvas zeichnen (Ubuntu)

Beitrag von Horn »

Hallo,

ich programmiere in der Schule unter Windows XP immer mit Delfphi.
Jetzt freue ich mich gerade Lazarus entdeckt zu haben und installierte es so gleich über das
Software Center in Ubuntu 9.10 64-Bit ohne Probleme.

Außer dass beim starten immer angezeigt wird, dass unter den Einstellungen der Pfad zu der FCP(Quelltextdatei) fehlt oder so ;).

Aber das eigentlich Problem ist, dass ich nicht auf eine Canvas zeichnen kann, weder auf eine von TImage noch auf die von TForm1!
Der Quelltext wird ohne Fehler compiliert, jedoch wird nach dem Start nichts auf der Canvas angezeigt.
Ich habe schon alles mögliche versucht, vorher eine Farbe setzten usw. .

Wenn jetzt auf Anhieb keine Lösung existiert würde ich meinen Quelltext kurz posten ;).

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

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von theo »

Du solltest im OnPaint Eventhandler zeichnen. Tust du das?

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von Targion »

Welche Lazarusversion nutzt du? GTK1 oder GTK2 Widgetset? (ist Lazarus hässlich grau oder "normal" dem GTK2-Theme nach?)

Horn
Beiträge: 8
Registriert: Mi 27. Jan 2010, 20:46

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von Horn »

Nein in dem Tutorial von der Lazurus Seite stand zwar immer, dass OnPaint irgendwie eine besondere Bedeutung hat aber ich habe nichts darüber gefunden wie genau es aussehen muss.

Wo muss jetzt der OnPaintteil rein?!
Form1.Canvas.Create;
Form1.Canvas.Brush.Create;
Form1.Canvas.Brush.Color := clblack;
Form1.Canvas.Brush.Rectangle(a,b,c,d);

Also bei mir sind die Fester im Windows-Style demnach tippe ich auf GTK1.

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von Targion »

Code: Alles auswählen

Form1.Canvas.Create;
Form1.Canvas.Brush.Create;
Das solltest du auf keinen Fall machen! Create; ist der Konstruktor des Objektes und sollte nur beim Erstellen aufgerufen werden (Canvas:=TCanvas.Create)
Dieser Code sollte reichen:

Code: Alles auswählen

self.Canvas.Brush.Color := clBlack;
self.Canvas.Brush.Rectangle(a,b,c,d);
Vielleicht war das schon das Problem... Ich empfehle übrigens, mal die neueste Lazarusversion auszuprobieren. (z.B. über mein PPA oder von der Sourceforge-Seite)
(GTK1 macht im Zeichenbereich manchmal komische Sachen)

Horn
Beiträge: 8
Registriert: Mi 27. Jan 2010, 20:46

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von Horn »

Ich habe es so versucht aber ohne Erfolg, ich würde nun gerne probieren die neueste Version zu installieren, meine aktuelle ist:

Version #: 0.9.26.2.2-Beta
Datum: 2099-06-08
FPC: 2.2.4
SVN-Revision: 18898
x86_64-linux-gtk-2 (beta)

Also doch GTK2, die Betanachsätze kommen wahrscheinlich durch das 64-Bit System. Habe das jetzt über Hilfe>Über Lazarus abgerufen und
abgetippt, was nun?

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

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von theo »

Horn hat geschrieben:ich würde nun gerne probieren die neueste Version zu installieren, meine aktuelle ist:
Das ändert wahrsch. auch nichts.
Poste besser mal deinen gesamten Code.

Warum tun sich eigentlich alle Newbies 64bit an? Da kann es immer mal wieder zu Problemen kommen und Vorteile hat es für die meisten User auch keine.

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)

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von pluto »

@Targion
das self kann man auch weglassen. Ist das nicht "self.Canvas.Brush.Rectangle(a,b,c,d);" etwas seltsam ?
so müsste das aussehen "self.Canvas.Rectangle(a,b,c,d);". Bei a,b, c, d sei nach angemerkt:
c+a und d+b *G*
Also z.B.
a:=10;
b:=10;
c:=a+10;
D:=b+10;
Damit würdest du jetzt ein Viereck Zeichnen, welches genau 10 X 10 Pixel hat.
MFG
Michael Springwald

Horn
Beiträge: 8
Registriert: Mi 27. Jan 2010, 20:46

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von Horn »

Falls es hilft:

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, ColorBox;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender : TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1; 
 
implementation
 
procedure TForm1.FormCreate(Sender : TObject);
begin
self.Canvas.Brush.Color := clBlack;
self.Canvas.Rectangle(10,10,20,20);
end;
 
initialization
  {$I unit1.lrs}
 
end.

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

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von theo »

Ich hab dir doch in der ersten Antwort gesagt, du sollst in OnPaint zeichnen.
OnCreate ist viel zu früh, da ist das Formular noch noch nicht mal sichtbar.

Horn
Beiträge: 8
Registriert: Mi 27. Jan 2010, 20:46

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von Horn »

Besitzt das Form denn ein OnPaint Ereignis? Gibt es einen vernünftigen Wiki-Eintrag oder ähnliches zum an lesen?!

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

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von theo »

Horn hat geschrieben:Besitzt das Form denn ein OnPaint Ereignis? Gibt es einen vernünftigen Wiki-Eintrag oder ähnliches zum an lesen?!
Machst du Witze?
OnCreate hast du doch offenbar auch gefunden im Objektinspektor bei Ereignisse. Dort ist auch OnPaint.

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von Targion »

pluto hat geschrieben:@Targion
das self kann man auch weglassen.
Weiß ich doch :mrgreen: Dachte nur, dass das für Einsteiger vllt.einfacher zu verstehen ist.
Unter GTK+ ist auch das Zeichnen im OnShow-Ereignis möglich. (In OnPaint, wie theo sagt, ist es natürlich noch besser, da so der gezeichnete Inhalt nachdem man das Form skaliert hat immer noch da ist. Zudem ist es sauberer,immer in OnPaint zu zeichnen)

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: Auf Canvas zeichnen (Ubuntu)

Beitrag von Euklid »

Horn: Hast Du mal versucht, Deine Zeichnungen auf eine TImage zu machen? Die kannst Du Dir in Lazarus über die Komponentenleiste direkt auf die Form ziehen. Da brauchst Du kein onpaint-Ereignis, sondern kannst direkt problemlos auf die Canvas des Images zeichnen. (Image1.Canvas.Lineto z.B.)

Viele Grüße, Euklid

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)

Re: Auf Canvas zeichnen (Ubuntu)

Beitrag von pluto »

Du kannst auch zu einem Späteren Zeitpunkt außerhalb onPaint zeichnen z.b. bei einem Klick auf einem Button.
Das Image hat den Vorteil das du schon ein Grafik-Buffer hast, besser ist jedoch ein TPaintBox. Kommt aber drauf an, was es werden soll.
MFG
Michael Springwald

Antworten