FreePascal Text in Grafik
FreePascal Text in Grafik
Hallo zusammen,
ich bin ganz neu hier und habe ein kleines Problem.
Leider benötige ich einige alte TurboPascal Programme welche z.Zt. noch gut unter WIN XP laufen. Aber leider nicht unter WIN 7 64bit.
Also habe ich FreePascal geladen. Es läuft soweit gut wenn ich im Textmodus bleibe. Gehe ich in den Grafikmode, so gibt es nur eine Schrift. Die bisherigen Schriften über "setTextStyle" einzugeben hat kein Erfolg. Welche Möglichkeit besteht ?
Ich würde mich über Hilfe freuen.
Peter
ich bin ganz neu hier und habe ein kleines Problem.
Leider benötige ich einige alte TurboPascal Programme welche z.Zt. noch gut unter WIN XP laufen. Aber leider nicht unter WIN 7 64bit.
Also habe ich FreePascal geladen. Es läuft soweit gut wenn ich im Textmodus bleibe. Gehe ich in den Grafikmode, so gibt es nur eine Schrift. Die bisherigen Schriften über "setTextStyle" einzugeben hat kein Erfolg. Welche Möglichkeit besteht ?
Ich würde mich über Hilfe freuen.
Peter
-
- Beiträge: 153
- Registriert: Sa 30. Jan 2010, 18:17
- OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: FreePascal Text in Grafik
Um Grafikprogramme aus Turbopascal-Zeiten mit Lazarus zu kompileieren nutze ich gerne die Unit WinGraph.
Ganz ohne Umbau wirst du damit nicht davon kommen, aber sollte sich in Grenzen halten.
Ganz ohne Umbau wirst du damit nicht davon kommen, aber sollte sich in Grenzen halten.
-
- Beiträge: 7026
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: FreePascal Text in Grafik
Hast du dies auf diese Weise probiert ?Also habe ich FreePascal geladen. Es läuft soweit gut wenn ich im Textmodus bleibe. Gehe ich in den Grafikmode, so gibt es nur eine Schrift. Die bisherigen Schriften über "setTextStyle" einzugeben hat kein Erfolg. Welche Möglichkeit besteht ?
https://www.freepascal.org/docs-html/rt ... graph.html
Hast du noch die BGI-Dateien von TP ?
Evtl. geht es mit diesen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 7026
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: FreePascal Text in Grafik
Ich habe es gerade mit folgendem Code unter WinXP getestet, sollte auch mit Win10 gehen.
Einzige Bedienung, du musst die Font-Dateien von Turbo-Pascal kopieren.
Für die Grafik-Ausgabe erfolgt in einem einfachen GDI-Fenster.
Einzige Bedienung, du musst die Font-Dateien von Turbo-Pascal kopieren.
Für die Grafik-Ausgabe erfolgt in einem einfachen GDI-Fenster.
Code: Alles auswählen
program Project1;
uses
Graph;
var
gd,gm : SmallInt;
PathToDriver : string;
begin
gd:=detect;
gm:=0;
PathToDriver:=''; { path to BGI fonts, drivers aren't needed }
InitGraph(gd,gm,PathToDriver);
Line(0, 0, 100, 100);
SetTextStyle(GothicFont, 0, 10);
OutTextXY(10, 10, 'Hello World');
ReadLn;
CloseGraph; { restores the old graphics mode }
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: FreePascal Text in Grafik
Danke,
das macht Hoffnung !
Ich habe noch die *.CHR und die *.OBJ Dateien für die Schriften. Muß ich diese einbinden? Und wohin soll ich diese Dateien kopieren ?
Peter
das macht Hoffnung !
Ich habe noch die *.CHR und die *.OBJ Dateien für die Schriften. Muß ich diese einbinden? Und wohin soll ich diese Dateien kopieren ?
Peter
-
- Beiträge: 7026
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: FreePascal Text in Grafik
Du musst nur die CHR-Dateien kopieren, in meinem Beispiel GOTH.CHR.
Der Speicherort kannst du selbst bestimmen, der kannst du bei InitGraph angeben. Im Beispiel, hat es dort sogar einen Kommentar.
Das Einfachste ist, du kopierst den ganzen BGI-Ordner in dein Programm, dann würde es so ausssehen:
Der Speicherort kannst du selbst bestimmen, der kannst du bei InitGraph angeben. Im Beispiel, hat es dort sogar einen Kommentar.
Das Einfachste ist, du kopierst den ganzen BGI-Ordner in dein Programm, dann würde es so ausssehen:
Code: Alles auswählen
PathToDriver:='BGI'; { path to BGI fonts, drivers aren't needed }
InitGraph(gd,gm,PathToDriver);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: FreePascal Text in Grafik
Super ! Danke, danke , danke !
Genau diese Info fehlte mir. Es funktioniert!
Gruß
Peter
Genau diese Info fehlte mir. Es funktioniert!
Gruß
Peter
-
- Beiträge: 7026
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: FreePascal Text in Grafik
Noch ein Hinweis, wen du anstelle von Graph ptcGraph nimmst, dann läuft es unter Windows und Linux.
Und wen man anstelle von detect zB. EGA nimmt, hat das Ausgabe-Fenster eine vernümftige Grösse.
Und wen man anstelle von detect zB. EGA nimmt, hat das Ausgabe-Fenster eine vernümftige Grösse.
Code: Alles auswählen
uses
ptcGraph;
var
gd, gm: smallint;
PathToDriver: string;
begin
// gd := detect;
gd := EGA;
gm := EGA64Hi;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: FreePascal Text in Grafik
Danke Mathias,
habe es getestet und es geht auch. Aber ich nutze nun den 1024x768 modus und habe ein schönes Fenster. Wichtig für mich dass die Schriften funktionieren und die üblichen Befehle für die Grafik.
Peter
habe es getestet und es geht auch. Aber ich nutze nun den 1024x768 modus und habe ein schönes Fenster. Wichtig für mich dass die Schriften funktionieren und die üblichen Befehle für die Grafik.
Peter
Re: FreePascal Text in Grafik
Noch eine Frage.
Wenn ich die div. Schriften *.CHR in die Datei BGI stecke und diese Datei im gleichen Ordner, wo auch das Programm steht habe, so läuft alles wie gewünscht. Wie aber kann ich diese Schriften in das Programm mit einbinden, damit ich nicht immer diese BGI Datei auch dabei haben muß ? Gibt es da einen Weg ?
Peter
Wenn ich die div. Schriften *.CHR in die Datei BGI stecke und diese Datei im gleichen Ordner, wo auch das Programm steht habe, so läuft alles wie gewünscht. Wie aber kann ich diese Schriften in das Programm mit einbinden, damit ich nicht immer diese BGI Datei auch dabei haben muß ? Gibt es da einen Weg ?
Peter
-
- Beiträge: 13
- Registriert: Di 9. Sep 2025, 10:28
Re: FreePascal Text in Grafik
Hallo zusammen, ich habe auch ein altes Lazarus Program, dass mit Zeilen wie:
Chr Dateien lädt.
Gibt es eine Möglichkeit die Anzeige Größe einzustellen, oder benötige ich eine CHR-Datei mit einer größeren Schriftart um die Schrift zu vergrößern?
Vielen dank und Mit freundlichen Grüßen Andreas
Code: Alles auswählen
NXLoadFont(9,cFontDir+s1+'cour15b.CHR',-17,true);
Gibt es eine Möglichkeit die Anzeige Größe einzustellen, oder benötige ich eine CHR-Datei mit einer größeren Schriftart um die Schrift zu vergrößern?
Vielen dank und Mit freundlichen Grüßen Andreas
Re: FreePascal Text in Grafik
CHR-Dateien sind Vektor-Fonts, lassen sich also beliebig vergrößern. Ich kenne die Prozedur NXLoadFont nicht, aber was bedeuten denn die Zahlen 9 und -17 in deinem Beispielaufruf? Vielleicht ist eine davon die Font-Größe?
-
- Beiträge: 13
- Registriert: Di 9. Sep 2025, 10:28
Re: FreePascal Text in Grafik
Danke für deine Antwort, die beiden Zahlen stehen leider nicht für die Font größe, die 9 ist ein Index um die Schriftart bestimmten Elementen in der UI zuzuordnen die -17 konnte ich nicht zuordnen.
Hier einmal die Prozedur "NXLOADFONT":
Das Programm ist leider nicht von mir und wurde über 30 Jahre weiter entwickelt und ich soll jetzt bestimmte UI Elemente und deren Schrift Vergrößern...
Es gibt hier diverse Aufrufe von "NXLoadFont":
Da zB Arial in mehreren Größen geladen wird dachte ich die Größe wäre nicht skalierbar und ich habe nicht mehr viel zur Arbeit mit CHR Schriften (und viele andere Seiten zum Thema Chr) gefunden beim suchen...
Wie kann ich denn die Schriftarten Skalieren? (wenn ich das weis kann ich danach ja im Quelltext suchen)
Vielen Dank und mit freundlichen Grüßen Andreas
Hier einmal die Prozedur "NXLOADFONT":
Code: Alles auswählen
Procedure NXLoadFont(pFont : SmallInt;pFilename : String;pYOffset : Integer;pFlagNew : Boolean);
{PD Zeichensatz laden, pFont ist ein Index im Bereich 0..cMaxFont(9),
pYOffset gibt den Y Offset an mit dem der Font ausgegeben wird. Dies
ermöglicht die Ausgabe "auf einer Linie". /PD}
var cfile : file;
fs : Longint;
rb : Integer;
begin
if (pFont >= 0) and (pFont <= cMaxFont) then begin
assignfile(cfile,LoString(pFilename));
reset(cfile,1);
fs := filesize(cfile);
if pFlagNew then new(charset[pFont]);
blockread(cfile,charset[pFont]^,fs,rb);
close(cfile);
with CharSet[pFont]^do begin
CharWidth := CharArray[0];
CharHeight := CharArray[1];
CharBytes := (CharWidth-1) div 8 + 1;
CharFactor := CharBytes*CharHeight+1;
CharYOffset := pYOffset;
Name := pFilename;
end;
end;
end;
Es gibt hier diverse Aufrufe von "NXLoadFont":
Code: Alles auswählen
NXLoadFont(systemFont,cFontDir+s1+'arial10.CHR',-14,true);
NXLoadFont(applFont1,cFontDir+s1+'arial12.CHR',-16,true);
NXLoadFont(applFont2,cFontDir+s1+'arial14.CHR',-19,true);
NXLoadFont(applFont3,cFontDir+s1+'arial18.CHR',-22,true);
NXLoadFont(terminalFont,cFontDir+s1+'cour10.CHR',-13,true); (* 10, 12 oder 14 sind ok *)
NXLoadFont(5,cFontDir+s1+'times10.CHR',-13,true);
NXLoadFont(6,cFontDir+s1+'times12.CHR',-16,true);
NXLoadFont(7,cFontDir+s1+'times14.CHR',-17,true);
(*NXLoadFont(8,cFontDir,'times16.CHR',-19); *)
if s1 = 'B' then NXLoadFont(8,cFontDir+'lucid22.CHR',-22,true)
else NXLoadFont(8,cFontDir+s1+'lucid22.CHR',-22,true);
NXLoadFont(9,cFontDir+s1+'cour15b.CHR',-17,true); (* 10, 12 oder 14 sind ok war 15b *)
Wie kann ich denn die Schriftarten Skalieren? (wenn ich das weis kann ich danach ja im Quelltext suchen)
Vielen Dank und mit freundlichen Grüßen Andreas
-
- Beiträge: 125
- Registriert: Do 20. Jul 2017, 23:47
- OS, Lazarus, FPC: Win7 und Win10
- CPU-Target: xxBit
- Wohnort: Südheide (Schnuckenland)
Re: FreePascal Text in Grafik
Im Kommnetar zur NXLoadFont-Methode steht doch
Ich vermute, mit dem Wert kann man die Ausgabe (Text) noch oben und unten etwas verschieben.
Das müßte doch die -17 als Parameter sein, oder habe ich mich verguckt?pYOffset gibt den Y Offset an mit dem der Font ausgegeben wird. Dies ermöglicht die Ausgabe "auf einer Linie".
Ich vermute, mit dem Wert kann man die Ausgabe (Text) noch oben und unten etwas verschieben.
Re: FreePascal Text in Grafik
Wenn ich mich recht erinnere, konnte man im BGI die Textgröße in der Prozedur SetTextStyle (?, oder ähnlich) einstellen. Das heißt, dein NXLoadFont würde die Zeichendefinitionen in der Grundgröße in den Speicher laden, und SetTextStyle würde die Koordinaten mit dem angegebenen Multiplikator für die Textgröße multiplizieren, um zur Endgröße zu gelangen.