Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 05:31

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [gelöst]Probleme mit TextSuite
BeitragVerfasst: Mi Sep 03, 2008 20:24 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Wie die Überschrift schon sagt, habe ich ein paar Probleme mit der TextSuite Komponente von LossyEx, aber da er auf meine Pns bisher nicht geantwortet hat frage ich mal hier um rat.

Das Hauptproblem ist folgendes:

Vor einigen Textausgaben gibt mir Textsuite ein komisches Quadratsymbol aus, außerdem haben einige Buchstaben manchmal einen komischen "Rahmen" (siehe Screenshot)

Merkwürdigerweise tauchen diese Probleme nur auf wenn ich den Prozedur textoutA einen Verweis auf einen ShortString übergebe (bei einem String kriege ich nur merkwürdige Zeichen ausgegeben, gebe ich einen String mit hochkomma ein ('Hallo') läuft alles ohne Probleme).


Jetzt ein bisschen Quelltext:

Die Initialisierung von Textsuite + erstellen der Fonts:

Code:
  1.  
  2. procedure TMain.Init_TextSuite;
  3. begin
  4.   if tsInit(TS_INIT_TEXTSUITE) = TS_FALSE then begin
  5.     ShowMessage('Initialing TextSuite failed.');
  6.     Halt;
  7.   end;
  8.  
  9.   if tsInit(TS_INIT_OPENGL) = TS_FALSE then begin
  10.     ShowMessage('Initialing OpenGL failed.');
  11.     Halt;
  12.   end;
  13.  
  14.   if tsInit(TS_INIT_GDI) = TS_FALSE then begin
  15.     ShowMessage('Initialing GDI failed.');
  16.     Halt;
  17.   end;
  18.  
  19.   tsContextCreate(@fContextID);
  20.   tsContextBind(fContextID);
  21.  
  22.   tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL);
  23.  
  24.  
  25.  
  26.   tsSetParameteri(TS_CREATOR, TS_CREATOR_GDI_FACENAME);
  27.  
  28.   tsFontCreateCreator('Arial', 13, TS_STYLE_BOLD, TS_DEFAULT, TS_DEFAULT, @spielFontID);
  29.   tsFontCreateCreator('Arial', 30, (TS_STYLE_ITALIC), TS_DEFAULT, TS_DEFAULT, @menueFontID);
  30.   tsFontCreateCreator('Arial', 35, TS_STYLE_BOLD, TS_DEFAULT, TS_DEFAULT, @titelFontID);
  31.   tsFontCreateCreator('Arial', 22, TS_STYLE_NORMAL, TS_DEFAULT, TS_DEFAULT, @auswahlFontID);
  32.   tsFontCreateCreator('Arial', 12, TS_STYLE_BOLD, TS_DEFAULT, TS_DEFAULT, @tutorialFontID);
  33.  
  34. end;
  35.  



Die Ausgabe der Menüpunkte:
Code:
  1.  
  2.   for I:=0 to high(actmenue.menuepunkte) do
  3.     begin
  4.       if actmenue.menuepunkte[I].farbe=clwhite then
  5.       glcolor3f(1,1,1)
  6.       else
  7.       glcolor3f(250/255,140/255,0);
  8.  
  9.       tsFontBind(menueFontID);
  10.  
  11.       glpushmatrix;
  12.       glTranslatef(actmenue.menuepunkte[I].posi.X, (actmenue.menuepunkte[I].posi.y), -15);
  13.       //actmenue.menuepunkte[I].name ist ein shortstring
  14.       tsTextOutA(@actmenue.menuepunkte[I].Name);
  15.       glpopmatrix;
  16.  
  17.     end;
  18.  



Wäre nett, wenn jemand der schon Erfahrung mit TextSuite hat mir elfen könnte.

MfG
Basti

€: Eben noch einen ScreenShot drangehängt die Pfeile markieren einige der fehlerhaften Stellen


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Zuletzt geändert von Jann1k am Fr Sep 05, 2008 21:25, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 04, 2008 16:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

du hast vergessen das Blending zu aktivieren, musst du vor der Textausgabe anschalten:

Code:
  1.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  2.   glEnable(GL_BLEND);


Es kann passieren, das du dann schwarze Balken zwischen den Zeichen hast, da musst du einfach hinter die Schrift n Schatten einfügen, gibts ne Fkt im
Code:
  1. TextSuite: tsPostAddShadow4f(1,0,0,1,1,1,0);


musste nur einma aufrufen, gilt dann immer für den Font, der bem Aufruf aktiv war...

Edit:
hab grad erst das bild gesehen: das problem meinte ich mit den balken: also einfach nach dem erzeugen des Fonts tsPostShadow aufrufen, dann müsste das weg sein

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 04, 2008 19:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Danke Bergmann89 für den Tipp mit dem Schatten das funktioniert super und die Balken innerhalb der Schrift sind weg.


Problematisch ist weiterhin der komische Kasten vor den Menüpunkten, der sollte da nicht hin, kann mir da noch jemand weiterhelfen (das Blending hilft da leider nicht) ??

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 05, 2008 15:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
das is ein unbekanntes zeichen, was für'n sting übergibts du? sowas wie
Code:
  1. chr(13)//Absatz
kann man nciht übergeben...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 05, 2008 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Ne, also ich mach das ganze mal am Beispiel von dem "Neues Spiel" Button im Screenshot.

Menüpunkte haben eine eigene Klasse, die wie folgt deklariert ist:

Code:
  1.  
  2. type
  3.   Tmenuepunkt=class(TObject)
  4.   private
  5.     fOnClick: TNotifyEvent;
  6.   public
  7.   name:shortstring; ///hier ist der string
  8.   posi:Tpoint;
  9.   width,height,tag:integer;
  10.   farbe:Tcolor;
  11.   change:boolean;
  12.   constructor create(pname:shortstring;pposi:Tpoint;pwidth,pheight:integer;pchange:boolean);  virtual;
  13.   published
  14.   property OnClick: TNotifyEvent read fOnClick write fOnClick;
  15.   end;
  16.  



Erzeugt wird der Menüpunkt so:

Code:
  1.  
  2. constructor Tmenue.create(pname:string;pobermenue:Tmenue;ppoint:Tpoint;pwidth,pheight:integer);
  3. begin
  4.   inherited create;
  5.   name:=pname;
  6.   obermenue:=pobermenue;
  7.   posi.X:=ppoint.x;
  8.   posi.y:=ppoint.y;
  9.   width:=pwidth;
  10.   height:=pheight;
  11. end;
  12.  



Code:
  1.  
  2.   punkt:=tmenuepunkt.create('Neues Spiel',Point(randlinks+371,randoben+205),185,H,true);
  3.  



Ausgabe des Textes läuft dann so:
Code:
  1.  
  2. procedure tmain.text(x1,y1:integer; var s:shortstring);
  3. begin
  4.   glpushmatrix;
  5.   glTranslatef(x1, y1, -15);
  6.   tsTextOutA(@s);
  7.   glpopmatrix;
  8. end;
  9.  



Code:
  1.  
  2.       text(menuepunkte[I].posi.X,menuepunkte[I].posi.y,.menuepunkte[I].name);
  3.  

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 05, 2008 15:59 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Versuch mal @s[1].

Oder falls du n string statt nem shortstring hast PChar(string)

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 05, 2008 21:25 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Danke, Danke, Danke Pchar(string) funktioniert super (das andere übrigens auch)



MfG
Basti

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 06, 2008 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zitat:
aber da er auf meine Pns bisher nicht geantwortet hat frage ich mal hier um rat.

War bis eben auch ein bisschen im Urlaub. ;)

Zitat:
Vor einigen Textausgaben gibt mir Textsuite ein komisches Quadratsymbol aus, außerdem haben einige Buchstaben manchmal einen komischen "Rahmen" (siehe Screenshot)

Das liegt daran, dass ein String bei [1] anfängt. Wenn du den @ Operator einsetzt bekommst aber den Pointer auf den Speicher und das ist bei einem String nicht der Anfang des Textes. @Blah[1] würde auch gehen, aber ich persönlich würde dir immer pchar(Blah) empfehlen. Wie Markus ja schon gesagt hatte. Delphi sorgt da dafür, dass ein (zwingend notwendiges) abschließendes #0 Byte vorhanden ist. Und ich bin mir nicht 100%tig sicher ob das bei einem String immer sein muss. Theoretisch nämlich nicht. Wenn man direkt den Speicher castet fehlt eine unsichtbare Prüfung.

Komische Striche: Das passiert immer dann, wenn die Schriften nicht 1:1 dargestellt werden. Also durch ein glScale oder einen anderen Wert bei glOrtho. Das entsteht durch die Filterung der Texturen. Ich persönlich kann auch nur empfehlen die Fonts wirklich Pixelgenau anzeigen zu lassen. Dann sind sie besonders gut zu erkennen. Ansonsten können sie leicht verschwommen aussehen. Der Befehl den Bergmann89 genannt hat ist eher nur ein Workaround der Manchmal funktioniert. Das ist bei weitem kein Allheilmittel. Bei der Menüschrift müssten die Balken trotzdem noch da sein. Nur eben schwarz bzw beinahe schwarz. Das fällt nur auf dem Dunkleren Hintergrund kaum auf.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 06, 2008 19:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Danke für die Aufklärung Lossy jetzt weiß ich auch, warum das ganze funktioniert.

offe du hattest nen schönen Urlaub ;)

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]