AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TextSuite will nicht
Thema durchsuchen
Ansicht
Themen-Optionen

TextSuite will nicht

Ein Thema von EWeiss · begonnen am 30. Jun 2008 · letzter Beitrag vom 5. Jul 2008
Antwort Antwort
Seite 2 von 4     12 34      
EWeiss
(Gast)

n/a Beiträge
 
#11

Re: TextSuite will nicht

  Alt 1. Jul 2008, 17:05
Zitat:
Der Fehler ist GL_INVALID_OPERATION. Da kann ich dir nichts sagen, da ich keinen Code sehe. Musste mal forschen was seit dem letzten mal passiert ist. Ich hätte jetzt auf deaktiviertem Blending getippt. Kann aber auch sein, dass du tsTextOutA in einem Bereich aufrufst wo das nicht erlaubt ist. Denn der erstellt beim ersten Aufruf eine Textur. Weil er Platz für die Zeichen braucht. Wenn das nicht geht kann das auch dazu führen.
Wo soll ich es denn sonst aufrufen als in der Render procedure
Eine andere möglichkeit sehe ich da nicht.
Der einzigste unterschied ist doch zu deiner ausführung vom Sample
das ich über eine procedure gehe damit meine Render procedure nicht zu unübersichtlich wird.

Versteh das nicht
Im Sample gehts in der vis sehe ich nur Quader anstelle der Buchstaben.

EDIT:
Grrrr... konnte nicht gehn
Für Bitmaps reicht ein glEnable(GL_BLEND);
Bei der TextSuite wohl nicht.
Mußte also noch die glBlendfunc addieren.

Delphi-Quellcode:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#12

Re: TextSuite will nicht

  Alt 1. Jul 2008, 17:57
Bitmaps: Wenn es normale Bitmaps sind. Also wie die klassischen Bitmapfonts. Dann sollte es eigentlich auch ohne Blending gehen. Und für Texturen sollte man die blendfunc immer angeben.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

Re: TextSuite will nicht

  Alt 1. Jul 2008, 18:01
Zitat von Lossy eX:
Bitmaps: Wenn es normale Bitmaps sind. Also wie die klassischen Bitmapfonts. Dann sollte es eigentlich auch ohne Blending gehen. Und für Texturen sollte man die blendfunc immer angeben.
Wieder was dazu gelernt..
dann noch eine frage denke das es dann soweit funktioniert.

kann es sein das hier noch was fehlt ?
Delphi-Quellcode:
  tsPostAddBorder4f(1, 1, 1, 1, 1, 0);
  tsPostAddFillColor3f(1, 1, 1, TS_CHANNELS_RGB);
ohne werden die buchstaben richtig angezeigt
mit werden diese überlagert .. abgeschnitten.

Habe es mal mit einer anderen glBlendFunc versucht dann habe ich aber wieder blöcke anstelle der Buchstaben.
glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR); EDIT:
noch ein bild

EDIT2:
Noch zwei Bilder addiert
Unbenannt.jpg kleine Font Fehler ..
Und da kannst sehn warum ich nach deiner komponente gefragt hatte
klein.jpg da geht das mit dem Font.

gruss Emil
Miniaturansicht angehängter Grafiken
char_209.jpg   klein_130.jpg   unbenannt_487.jpg  
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

Re: TextSuite will nicht

  Alt 1. Jul 2008, 21:11
Noch eine frage bzgl. TextBlock

Delphi-Quellcode:
//** HELP SCREEN
procedure GLHelpScreen();
begin

  glTranslatef(0, 0, -100);
  glScalef(1, -1, 1);

  glScalef(0.1, 0.1, 0.1);
  glTranslatef(-520, -400, 0);

  // set align to center
  tsTextColor3f(1, 1, 1);
  tsSetParameteri(TS_ALIGN, TS_ALIGN_BLOCK);
  tsSetParameteri(TS_VALIGN, TS_VALIGN_TOP);

  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glEnable(GL_BLEND);

  tsTextBeginBlock(20, 20, 760, 560, TS_BLOCKFLAG_WORD_WRAP);
    tsFontBind(fHelpFontID);
    tsTextOutA('KEY - COMMAND'#13#10);
    tsTextOutA('--------------------------------------- '#13#10);
    tsTextOutA('F1 : This Helpscreen'#13#10);
    tsTextOutA('ESC : Exit FullScreen'#13#10);
    tsTextOutA('Space : Colorswitch on/off '#13#10);
    tsTextOutA('+ : Set Color'#13#10);
    tsTextOutA('P : Polygone on/off'#13#10);
    tsTextOutA('Left : Previous Title'#13#10);
    tsTextOutA('Right : Next Title'#13#10);
    tsTextOutA('Up : Decrease Volume'#13#10);
    tsTextOutA('Down : Increase Volume');
  tsTextEndBlock;

  glDisable(GL_BLEND);
end;
Hier ist alles schön aufgeräumt
Beim rendern wird jedoch alles vor dem Doppelpunkt verschoben
Wie kann ich das verhindern ?

Wieder ein Pic zur vorschau des Fehlers
gruss Emil
Miniaturansicht angehängter Grafiken
block_112.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#15

Re: TextSuite will nicht

  Alt 1. Jul 2008, 21:57
Blockmodus: Ganz klar. Du hast in deinem Editor eine Monospace Schrift. Dort haben alle Zeichen die gleiche Breite. Mit der TextSuite aber nicht. Entsprechend ist das Leerzeichen schmaler als andere Zeichen.

Unbekannt.jpg: Ja diese kleinen Linien meinte ich mit mit den Fehlern. Und dafür war auch der Code. Warum der allerdings woanders so komisch wirkt ist mir ein Rätsel. Zur Not spiel mal mit mit den Parametern rum. Mach mal einen echten Schatten testweise. Teste auch mal eine andere Schrift und evtl. eine andere größe.

[edit] Und nö. So recht seh ich das nicht. Das sind doch alles englische Buchstaben.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

Re: TextSuite will nicht

  Alt 1. Jul 2008, 22:02
Zitat:
Blockmodus: Ganz klar. Du hast in deinem Editor eine Monospace Schrift. Dort haben alle Zeichen die gleiche Breite. Mit der TextSuite aber nicht. Entsprechend ist das Leerzeichen schmaler als andere Zeichen.
Ja den benutze ich ja
Nur wie kann ich erreichen das der Formatierte Block auch so angezeigt wird.

EDIT:
Denke mal das kann man nicht fixen daher verwende ich für die Hilfe lieber wieder BitmapFonts
und verwerfe das mit dem TextBlock.

Zitat:
[edit] Und nö. So recht seh ich das nicht. Das sind doch alles englische Buchstaben.
Ich meinte das Info Window nicht die Schrift(TextSuite)

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

Re: TextSuite will nicht

  Alt 2. Jul 2008, 04:08
Also hier bei mir läuft nun alles
Habe aber gesehen das es auf einen koreanischen System nicht geht.

Woran könnte das liegen und kann ich das überhaupt fixen ?

gruss Emil
Miniaturansicht angehängter Grafiken
good_399.jpg   2008-07-02_01_210.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#18

Re: TextSuite will nicht

  Alt 2. Jul 2008, 09:47
Zitat von EWeiss:
Zitat:
Blockmodus: Ganz klar. Du hast in deinem Editor eine Monospace Schrift. Dort haben alle Zeichen die gleiche Breite. Mit der TextSuite aber nicht. Entsprechend ist das Leerzeichen schmaler als andere Zeichen.
Ja den benutze ich ja
Nur wie kann ich erreichen das der Formatierte Block auch so angezeigt wird.
Du musst in deinem Programm auch eine Monospace (oder Fixed Width/Pitch) Schriftart benutzen. Bei der haben alle Zeichen die gleiche Breite! Sieht man bei dir schön am Wort "Title" dass es nicht so ist, denn der Buchstabe "T" ist genau so breit wie "it". Wenn du in der IDE eine andere Schrift benutzen würdest wäre es auch nicht richtig. Du brauchst dann halt noch ein Font wie zum Beispiel "Courier New". Das musst du dann zum Darstellen deines Hilfeblockes benutzen. Das Mischen von 2 Fontbibliotheken halte ich eher für keine gute Idee. Denn bei meiner Bibliothek ist so etwas auch problemlos möglich und die Zeichen aller Fonts wandern in die gleiche Textur. Oder auch mehrere Texturen falls nötig. Abgesehen davon hast du dann keine 2 unterschiedlichen Codes. Aber ich bin da evtl. auch nicht ganz unparteiisch.

Ich habe für später auch noch geplannt Tabulatoren zu unterstützen, damit so etwas auch bei allen anderen Schriften möglich ist. Aber da habe ich vorher noch genügend andere Dinge zu erledigen. Weswegen du darauf vermutlich nicht warten solltest.

Zitat:
Woran könnte das liegen und kann ich das überhaupt fixen?
Man kann alles beheben. Man muss nur erst mal herrausfinden wo das eigentliche Problem liegt. Und da du die Ansi Variante von tsTextOut benutzt habe ich da so eine Theorie.

Ansi hat nur 1 Byte pro Zeichen und kann somit nur 256 Werte annehmen. Deswegen wurden Codepages eingeführt. Diese bieten für unterschiedliche Gebietsschemen unterschiedliche Belegungen der 256 Werte. Per Default ist in der TextSuite Latin-1 (Westeuropäisch) eingestellt. Um wirklichen Unicode support zu bekommen solltest du aber keine Codepages benutzen sondern du solltest entweder mit WideStrings oder UTF-8 arbeiten. Dann hat jedes Zeichen einen eigenen Wert. Und du kannst auch koreanisch, japanisch, russisch und tai direkt mischen. UTF-8 ist da eine spezielle Codierung. Die läuft in der TextSuite über eine pseudo Codepage und die Ansi Funktionen. Ist aber trotzdem in der Lage Zeichen mit bis zu 24 Bit zu speichern. Was mehr als ausreichend ist.

Es gibt auch eine Variante von tsTextOut die direkt mit WideStrings (2 Byte pro Zeichen) klar kommt. Die Windowsapi arbeitet direkt mit Widestrings. Dann musst du aber darauf achten, dass du überall auch mit WideStrings arbeitest. Sonst gehen dir die Zeichen vorher schon verlohren. Und meine Bibliothek kann ja nur das darstellen was da auch ankommt. Im Web bzw. bei Dateien kommt aber eher UTF-8 zum Einsatz. Musst du entscheiden was du da lieber benutzen willst. Im Zweifel kann man es immer irgendwie konvertieren.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

Re: TextSuite will nicht

  Alt 2. Jul 2008, 13:31
Zitat:
Es gibt auch eine Variante von tsTextOut die direkt mit WideStrings
Du meinst also wenn ich das richtig verstehe
anstatt SongName: string; diesen als Widestring zu deklarieren ?
Das sollte dann reichen ?

Meine vermutung ist eine etwas andere
das es nicht am Fontset sondern am Charset liegt oder ist es das was du mit
Widestring korrigieren willst ? 2 byte.

Was ich meine ....
Anstelle von {ANSI_CHARSET} OEM_CHARSET zu verwenden hätte dann aber nichts mit Widestring zu tun
oder geht das nur wenn beides zusammen arbeitet ?

Kann es ja nicht testen hab kein koreanisches System

Kannst du mir ein Beispiel zeigen wie ich den richtigen Charset verwenden soll mit TextSuite ?
Am besten das nach deiner meinung sinnvollste.

Zitat:
Das Mischen von 2 Fontbibliotheken halte ich eher für keine gute Idee. Denn bei meiner Bibliothek ist so etwas auch problemlos möglich und die Zeichen aller Fonts wandern in die gleiche Textur. Oder auch mehrere Texturen falls nötig. Abgesehen davon hast du dann keine 2 unterschiedlichen Codes. Aber ich bin da evtl. auch nicht ganz unparteiisch.
Ja man sollte möglichst bei einer sache bleiben.
Bin halt auf das zeichnen über BitmapFonts zurückgegangen da ich kein lösung für mein minor problem gefunden habe.
Denke aber doch das es besser aussieht wenn der Block richtig formatiert angezeigt wird.

EDIT:
das mit dem Block geht nun mit der Courier New
Nur eine frage kann man den Block nach vorne setzen ?
Wird im moment überzeichnet
Siehe Bild

gruss Emil
Miniaturansicht angehängter Grafiken
block_649.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#20

Re: TextSuite will nicht

  Alt 2. Jul 2008, 14:44
Font: Das sind ganz normale Quads. Wenn du beim Zeichnen den Tiefentest deaktivierst werden sie über alles andere gezeichnet. Der Tiefentest könnte im übrigen auch dafür sorgen, dass einige Zeichen (wie in "COMMAND" zu sehen) links abgeschnitten werden. Falls dir Courier nicht gefällt musste mal im System schauen. Ich glaube "Lucida Console" sieht freundlicher aus.

Du kannst mit der Bibliothek auch abfragen ob du ein Monospace Font hast oder nicht. Wenn du es erstellt hast rufst du tsGetParateri(TS_FONT_FIXED_WIDTH) auf. Kommt TS_TRUE zurück ist es eines. Bei TS_FALSE nicht.

Zitat von EWeiss:
Zitat:
Es gibt auch eine Variante von tsTextOut die direkt mit WideStrings
Du meinst also wenn ich das richtig verstehe
anstatt SongName: string; diesen als Widestring zu deklarieren ?
Das sollte dann reichen ?

Meine vermutung ist eine etwas andere
das es nicht am Fontset sondern am Charset liegt oder ist es das was du mit
Widestring korrigieren willst ? 2 byte.

Was ich meine ....
Anstelle von {ANSI_CHARSET} OEM_CHARSET zu verwenden hätte dann aber nichts mit Widestring zu tun
oder geht das nur wenn beides zusammen arbeitet ?

Kann es ja nicht testen hab kein koreanisches System

Kannst du mir ein Beispiel zeigen wie ich den richtigen Charset verwenden soll mit TextSuite ?
Am besten das nach deiner meinung sinnvollste.
Also ich meine Charset und Codepage ist da ziemlich das Gleiche. Das arbeitet auch nach dem Prinzip, dass das Zeichen XYZ im Kyrillischen, im europäischen und sonst wo jeweils eine eigene Bedeutung hat. Wenn du jetzt im Europäischen bist und einen kyrillischen Text hast dann steht da nur murks drinne. Du kannst den zwar glaube ich als kyrillisch betrachten (wobei das über charsets ein absoluter Krampf sein muss) aber dann dürfen da keine speziellen europäischen Zeichen enthalten sein. Die würden wieder zu kyrillischen Zeichen werden und wären damit falsch. Du kannst von dem System her auch keine 2 Codepages mischen. Also ein Text der 2x CharCode 224 enthält ein mal im Kyrillischen und ein Mal als europäischen ist nicht möglich.

Eine Codepage setzten kannst du mit tsSetParameteri(TS_CODEPAGE, TS_CODEPAGE_8859_8);. Allerdings wird das für dich nicht viel bringen, da Koreanisch Codepages hat die ich noch gar nicht unterstütze (andere typ codepages). Und wegen dem Abschnitt weiter oben.

Ich würde dir von daher empfehlen es lieber gleich richtig zu machen. Also Widestrings. Denn in denen hat jedes Zeichen einen eigenen Wert und du keine Einschränkung in gebietsschemen. ABER. Du MUSST auch komplett mit WideStrings arbeiten. Also vom Anfang bis zum Ende. Ich weiß jetzt nicht wo du die Texte herbekommst aber wenn das Dateinamen aus Delphi sind, dann funktioniert es nicht einen String zu einem WideString zuzuweisen, da bereits in dem String schon fehlerhafte Texte enthalten sein dürften. Das ist etwas wessen du dir bewusst sein musst.

Die TextSuite kann die dann nur darstellen, wenn sie lückenlos weitergereicht werden. Selbes würde im übrigen auch für die Windows GDI gelten, wenn du damit Unicode Texte ausgeben würdest.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz