Übertragung von Del6 nach Laz1.6
Ich habe in ein OpenGLcontrol (OGLCon) erfolgreich die Zeichnung eines 3d-Systems übertragen. Nun möchte ich wie vorher in Del das System auch noch beschriften. Dazu übernehme ich auch die in Del verwendeten procs. Der Compiler läuft so durch, aber es gibt leider keine Text-Ausgabe. Was muss ich mit OpenGLcontrol anders machen? Gibt es eine Musterlösung dafür?
Code: Alles auswählen
var DC:HDC; //Handle auf Zeichenfläche
//RC:HGLRC; //Rendering Context hier mit OpenGLcontrol nicht benutzt
OGLFont: Cardinal; //Variable für den TextFont
MyK:TKoSys; //Variable für mein eigenes KoSys
//in FormCreate:
DC:= GetDC(OGLCon.Handle); //--->>> So funktioniert das leider nicht ???
//unter Del hatte ich mit Hilfe der dglOpenGL gearbeitet und benutzt:
DC:= GetDC(OGLPanel.Handle); //also auf ein Panel gezeichnet
{--------------------------------------------------------------------}
procedure OpenGLCreateFont;
//Quelle: http://wiki.delphigl.com/index.php/wglUseFontBitmaps
//Erzeugt einen Font aus einer Windows-Schriftart als Bitmap
//und legt ihn in der Variablen OGLFont ab; einmalig am Anfang
var Font: TFont;
begin
OGLFont := glGenLists(256);
Font := TFont.Create; // Instanz einer Fontklasse erstellen
try
Font.Name := 'Arial'; // Font-Name auch 'Times New Roman' oder 'Courier New'; breitengleich
Font.Size := 10; // Schriftgröße //auch 32
Font.Style := []; // auch [fsBold]
SelectObject(DC, Font.Handle); // Font auf einen Device Context benutzen
//Die Schrifteinstellungen des Device Contextes werden genutzt,
//um mit glBitmap-Befehlen die angebenen Zeichen in Displaylisten zu speichern:
wglUseFontBitmaps (DC, 0, 255, OGLFont); //--->>> hier wird DC benötigt
finally
FreeAndNil(Font); // erstellte Instanz wieder frei geben
end;
end;
{--------------------------------------------------------------------}
procedure TKoSys.TextOutK(x1,y1,z1:double; pText: AnsiString);
//Der Text ist 2D; linke untere Ecke entpricht den Koordinaten
begin
glRasterPos3f(x1,y1,z1); //(sichtbare) Rasterposition eintellen
glListBase(OGLFont); // Font-Liste auswählen
glCallLists(Length(pText), GL_UNSIGNED_BYTE, Pointer(pText)); //Teil-Bitmap aufrufen
end;
{--------------------------------------------------------------------}