Guten Tag allerseits!
Ich habe ein Problem. Eine uralte, sehr umfangreichere Grafik-Anwendung, die ich vor über 20 Jahren entwickelt habe, soll von DOS nach Linux portiert werden. Das Programm macht intensiven Gebrauch von der UNIT GRAPH, verwendet eigene Mausroutinen, etc.. Bisher habe ich sehr viel mit Freepascal gearbeitet (prozedural), aber noch kein Programm mit Lazarus erstellt. Gut, das dürfte kein allzu großes Problem sein, denn gerne arbeite ich mich in diese IDE ein.
Ich möchte mir meine auf GRAPH basierenden Units also wieder neu schreiben, wüsste ich nur, wo die notwendigen Grafikroutinen (setzen eines Punktes, Zeichnen von Linien, Kreisen Polygonen, etc.) versteckt sind (C-Header-Dateien, etc.). In den bei mir vorhandenen GTK-Tutorials habe ich zwar gesehen, wie beispielsweise Menüs, Scrollbars und Buttons realisiert werden können, doch habe ich nirgendwo gesehen, wie man Kreise oder Linien zeichnet, oder beispielsweise ein kleines Image oder einen Sprite auf der Koordinate X,Y positioniert. Eine Dokumentation solche Routinen - wie auch beispielsweise das Auslesen und Wiederherstellen von Bildspeicher-Bereichen, etc. benötige ich, um mein Programm portieren zu können. Wahrscheinlich habe ich nur an der falschen Stelle gesucht und irgendetwas übersehen, denn irgendwo müssen doch solche Dokumentationen vorhanden sein - wer weiß darüber Bescheid?
Das nächste wären dann Dinge wie der Druck der Grafik aus X-heraus, usw..
Es stellt wie gesagt kein Problem dar, ob die Bibilotheken auch nur eine Ähnlichkeit mit GRAPH oder ähnlichen haben, die Hauptsache ist, ich finden die notwendige Header-Deteien inclusive der Bibilotheken, oder eine GTK-Dokumentation bzw. eine andere Bibliothek, mit deren Dokumentation es mir möglich ist, mir dann das zurecht zu schreiben, was ich brauche.
Bisher programmierte ich reine Konsolenanwendungen unter Linux mit Freepascal in 64Bit, möchte mich nun aber endlich der Neuprogrammierung meiner Grafiksoftware unter X zuwenden. Ob ich dafür GTK verwende oder auf etwas anderes zurückgreife, ist mir eigentlich nicht so wichtig, Hauptsache es funktioniert..
Viele Grüße!
Hans-Werner
Grafikroutinen unter X mit Freepascal / Lazarus
-
- 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:
Dafür gibts die TCanvas Klasse.
Jedes grafikfähige Control, jede Bitmap u.s.w hat einen Canvas.
Auf diesen sollte man im Ereignis OnPaint malen.
http://wiki.lazarus.freepascal.org/Deve ... raphics/de
^Hier findest du mehr Informationen.
Die TCanvas Klasse ist (soweit wie Lazarus) Plattformunabhängig. Ist also wesentlich günstiger als GTK oder QT direkt zu benutzen.
Jedes grafikfähige Control, jede Bitmap u.s.w hat einen Canvas.
Auf diesen sollte man im Ereignis OnPaint malen.
http://wiki.lazarus.freepascal.org/Deve ... raphics/de
^Hier findest du mehr Informationen.
Die TCanvas Klasse ist (soweit wie Lazarus) Plattformunabhängig. Ist also wesentlich günstiger als GTK oder QT direkt zu benutzen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- 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: Grafikroutinen unter X mit Freepascal / Lazarus
Hallo Hans-Werner, willkommen hier im Forum!hww hat geschrieben:Guten Tag allerseits!
Beispiel: Du erstellst testweise eine Form1 und ziehst eine Image1 drauf. Dann ist:
wüsste ich nur, wo die notwendigen Grafikroutinen (setzen eines Punktes,
Code: Alles auswählen
Form1.Image1.Canvas.Pixels[x,y]:=clgreen;
Zeichnen von Linien,
Code: Alles auswählen
Form1.Image1.Canvas.Line(x1,y1,x2,x1);
Code: Alles auswählen
Form1.Image1.Canvas.Brush.Color:=clgreen;
Code: Alles auswählen
Form1.Image1.Canvas.Pen.Color:=clgreen;
Kreisen
Code: Alles auswählen
Form1.Image1.Canvas.Ellipse(x1,y1,x2,y2);
Polygonen
Code: Alles auswählen
Form1.Image1.Polyline(Array of Points);
Du kannst eine Variable vom Typ TBitmap erzeugen, und sie mit diversen Befehlen dann in das Image1 kopieren (Stretchdraw, Copyrect, je nach dem)wie auch beispielsweise das Auslesen und Wiederherstellen von Bildspeicher-Bereichen
Du meinst über einen Drucker drucken? Weiß das leider nicht ganz auswendig - es ist aber ähnlich einfach wie aufm Bildschirm zeichnen:Das nächste wären dann Dinge wie der Druck der Grafik aus X-heraus, usw..
Statt eine TBitmap erstellst du eine Variable vom Typ TPrinter. Die Variable hat auch einen Canvas, auf dem du dann genauso zeichnen kannst, wie aufm Bildschirm.
Die genauen Schritte weiß ich nicht auswendig. Such mal hier:
http://www.search.lazarusforum.de/" onclick="window.open(this.href);return false;
nach TPrinter.
wirst sehen: Mit Lazarus ist das ähnlich einfach wie KonsolenanwendungenBisher programmierte ich reine Konsolenanwendungen unter Linux mit Freepascal in 64Bit, möchte mich nun aber endlich der Neuprogrammierung meiner Grafiksoftware unter X zuwenden.

Mit Lazarus kannst du zwischen ganz verschiedenen Schnittstellen wählen (gtk, gtk2, qt,...)Ob ich dafür GTK verwende oder auf etwas anderes zurückgreife, ist mir eigentlich nicht so wichtig, Hauptsache es funktioniert..
Dann mal viel Spaß beim Programmieren!
Euklid
-
- 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)
Bei sowas nenne ich auch immer gerne meine eigene 2D Engine die sich aber noch in der Test Phase befindet. Das Projekt habe ich im Ende letzten Jahres angefangen.
Die 2D Engine Basiert komplett auf Canvas und stellt Sprites zu Verfügung.
Es gibt verschiedene Kollision Funktionen die im Moment noch in den Sprite Manger sind.
Die 2D Engine würde einiges an Arbeit abnehmen. Ich habe viele Projekte damit am laufen.
Sie nutzt Internet opBitmap und stellt eine eigene Imagelist zuverfügung. Dort gibt es zwei Formate, ein XML Basiertes zimlich neu und das kann auch mehr als das Alte Format.
Wenn du Interesse hast kann ich dir die Engine zukommen lassen oder hier im Forum hochladen was ich sowieso noch tun wollte.
Das Projekt ist im Moment mein "bestes". Und ich Plane damit noch viele weitere Projekte wie halt Spiele und im Moment bin ich auch dabei eine eigene GUI zu schreiben die auf der 2D Engine Basiert es gibt inzwischen 13 Komponenten die zum Teil schon recht gut sind. Aber noch längst nicht ausgebaut. Die Beste Komponenten ist das Label sie stellt Text da und wird überall genutzt in der GUI. sie kann solche Strings verarbeiten:
Roter Text es gibt noch mehr Tags die verwendet werden können. Unter anderen gibt es auch "Links" und eine Semile Funktion.
Die 2D Engine Basiert komplett auf Canvas und stellt Sprites zu Verfügung.
Es gibt verschiedene Kollision Funktionen die im Moment noch in den Sprite Manger sind.
Die 2D Engine würde einiges an Arbeit abnehmen. Ich habe viele Projekte damit am laufen.
Sie nutzt Internet opBitmap und stellt eine eigene Imagelist zuverfügung. Dort gibt es zwei Formate, ein XML Basiertes zimlich neu und das kann auch mehr als das Alte Format.
Wenn du Interesse hast kann ich dir die Engine zukommen lassen oder hier im Forum hochladen was ich sowieso noch tun wollte.
Das Projekt ist im Moment mein "bestes". Und ich Plane damit noch viele weitere Projekte wie halt Spiele und im Moment bin ich auch dabei eine eigene GUI zu schreiben die auf der 2D Engine Basiert es gibt inzwischen 13 Komponenten die zum Teil schon recht gut sind. Aber noch längst nicht ausgebaut. Die Beste Komponenten ist das Label sie stellt Text da und wird überall genutzt in der GUI. sie kann solche Strings verarbeiten:
Roter Text es gibt noch mehr Tags die verwendet werden können. Unter anderen gibt es auch "Links" und eine Semile Funktion.
MFG
Michael Springwald
Michael Springwald