Thema: Delphi TextSuite will nicht

Einzelnen Beitrag anzeigen

Benutzerbild von Lossy eX
Lossy eX

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

Re: TextSuite will nicht

  Alt 2. Jul 2008, 19:09
pWideChar auf pChar casten. Muss gestehen. Keine Ahnung ob Delphi da so schlau ist, weil eigentlich beides nur Pointer sind.


Also das Beispielcode was du da hast ist uralt. Also das sind keine öffentlichen Klassen mehr und von den Funktionen her auch anders. Ein direktes Beispiel habe ich nicht, da ich damit andere Dinge zeigen will. Aber der nachfolgende Code sollte hoffentlich genügen. Du kannst den in das SingleLine rein packen. Das einzig Interessante daran ist cAsia. Das sind aneinander gereihte 16 Bit Hexwerte.
Delphi-Quellcode:
const
  cAsia = #$9019#$662F#$6A23#$54C1#$4E2D#$570B#$6587#$672C#$70BA#$6E2C#$8A66#$5716#$66F8#$9928#$3002;

procedure TMainForm.Init_TextSuite;
begin
  tsInit(...)

  tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL);
  tsSetParameteri(TS_RENDERER_OPENGL_TEXTURE_SIZE, TS_RENDERER_OPENGL_TEXTURE_SIZE_512);

  tsSetParameteri(TS_CREATOR, TS_CREATOR_GDI_FACENAME);

  tsFontCreateCreator('Arial Unicode MS', 52, TS_STYLE_NORMAL, TS_DEFAULT, TS_DEFAULT, @fFont1ID);
  tsPostAddFillColor3ub(233, 118, 33, TS_CHANNELS_RGB);
  tsPostAddBorder3f(2.4, 1, 1, 1, 1);
  tsPostAddShadow4f(0, 3, 3, 0, 0, 0, 0.5);

  tsFontCreateCreator('Bitstream Cyberbit', 52, TS_STYLE_NORMAL, TS_DEFAULT, TS_DEFAULT, @fFont2ID);
  tsPostAddFillColor3ub(233, 118, 33, TS_CHANNELS_RGB);
  tsPostAddShadow4f(0, -1, -1, 1, 1, 1, 1);
  tsPostAddShadow4f(0, 1, 1, 0, 0, 0, 1);
  tsPostAddBorder4f(1.8, 1, 0, 0, 0, 0.4);
begin


procedure TMainForm.FormPaint(Sender: TObject);
begin
  // clear screen and depth buffer
  glClear(GL_COLOR_BUFFER_BIT);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;

  glTranslatef(0, 0, -10);

  // set align to center
  tsSetParameteri(TS_ALIGN, TS_ALIGN_CENTER);

  glPushMatrix;
    glTranslatef(ClientWidth div 2, 90, 0);
    tsFontBind(fFont1ID);
    tsTextOutW(cAsia);
  glPopMatrix;

  glPushMatrix;
    glTranslatef(ClientWidth div 2, 180, 0);
    tsFontBind(fFont2ID);
    tsTextOutW(cAsia);
  glPopMatrix;

  // Check for Errors
  CheckError;

  SwapBuffers(fDC);
end;
Das Arial Unicode MS ist unter XP Standard nicht mehr enthalten. Entsprechend solltest du ein anderes Font benutzen. Das kann dann natürlich vom Bild her dann abweichen. Aber es sollte in etwas wie das Asia.png aussehen.


Zu dem Dateinamen:
mMediaInfo.Songfile := PChar(StreamFile); Ich denke genau da könnte schon das Problem sein. Denn StreamFile ist vermutlich ein String, oder? Und damit sind bereits da die Unicode Zeichen weg. Die gesammten Dateioperationen von Delphi. FindFirst/FindNext, TFileStream basieren leider alle auf Ansi und sind nicht Unicode kompatibel.

Der gefährliche Pointer. Weiß nicht wie die Struktur ist. Wenn möglich gar keinen neuen String erzeugen sondern den Weiterreichen den du bekommst. Weil der ist ja schon gültig und kann erst nach dem Funktionsaufruf gelöscht werden. Wenn man den länger benötigt, dann MUSS davon eine Kopie erstellt werden und diese auch so lange gespeichert werden. Strings in Records sind da okay. Selbst wenn die Records dynamisch via New erstellt wurden und mit Dispose wieder gelöscht werden. Beim Löschen aber entweder die Strings leer setzen oder einen typisierten Pointer disposen, da sonst die Referenzzählung der Stings nicht greift.
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