![]() |
TextOut Font zuweisung
Liste der Anhänge anzeigen (Anzahl: 1)
Wie kann ich TextOut vorher einen Font plus die Farbe zuweisen?
Muss dabei sagen es geht um die API TCanvas oder Canvas.TextOut steht nicht zur verfügung Habe nur ein Dc zur verfügung
Delphi-Quellcode:
funktioniert aber mit Schwarzer Schrift und weißen Hintergrund
TextOut(VisInfo^.VisDC, 20, 20, 'TEST', 4);
Der Font ist auch nicht das wahre gruss Emil |
Re: TextOut Font zuweisung
Schau doch mal im
![]() |
Re: TextOut Font zuweisung
Mit
![]() ![]() |
Re: TextOut Font zuweisung
Zitat:
war mir nur nicht klar wie ich den auswählen soll gruss Emil |
Re: TextOut Font zuweisung
Hab es mal so gemacht und scheint zu gehen..
Ist das OK ?
Delphi-Quellcode:
Font, OldFont: HFONT;
Delphi-Quellcode:
Nur der Hintergrund trotz dem Transparenten Flag ist nicht transparent
SetBkColor(VisInfo^.VisDC, TRANSPARENT);
SetTextColor(VisInfo^.VisDC, RGB(255,255,255)); Font := CreateFont(50, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, 'MS Sans Serif'); OldFont := SelectObject(VisInfo^.VisDC, Font); TextOut(VisInfo^.VisDC, 20, 20, 'TEST', 4); SelectObject(VisInfo^.VisDC, OldFont); DeleteObject(Font); Kann ich das so in der renderproc belassen oder die initialisierung für den Font lieber auslagern? gruss Emil |
Re: TextOut Font zuweisung
Font noch freigeben, wenn du sie nicht mehr brauchst.
Und was den Hintergrund angeht, du hast die falsche API-Funktion mit den richtigen Paramteren aufgerufen. ;) Du musst ![]() ![]() |
Re: TextOut Font zuweisung
Zitat:
Wie freigeben ? Font := 0 ? free geht ja bei HFont nicht gruss Emil |
Re: TextOut Font zuweisung
Hilfe lesen:
Zitat:
|
Re: TextOut Font zuweisung
Zitat:
Du nicht gelesen ...
Delphi-Quellcode:
Oder steht das nicht im meinen Quelltext ;)
DeleteObject(Font);
hab mich schon gewunder was ich sonst noch freigeben soll oder meinst du den Alten Font ?
Delphi-Quellcode:
das würde noch fehlen
DeleteObject(OldFont);
gruss Emil |
Re: TextOut Font zuweisung
Oh, sorry, habe ich überlesen.
|
Re: TextOut Font zuweisung
Zitat:
gruss Emil |
Re: TextOut Font zuweisung
Liste der Anhänge anzeigen (Anzahl: 3)
Habe noch ein seltsames problem
Meine Funktion
Delphi-Quellcode:
Diese zeichnet jetzt den Titel und die Zeit Informationen auf das DC
procedure GetInfo;
var r, r2 : Trect; StrPos : String; begin if SoInfo.Title <> '' then begin r := Rect(5, VisInfo^.h -15, VisInfo^.w-100, VisInfo^.h); DrawText(VisInfo^.VisDC, PChar(SoInfo.Title), Length(SoInfo.Title), r, DT_BOTTOM or DT_END_ELLIPSIS); StrPos := GetSongPosStr(SoInfo.Pos); StrPos := StrPos + '' + GetSongPosStr(1000 * SoInfo.Len); r2 := Rect(VisInfo^.w-96, VisInfo^.h -15, VisInfo^.w, VisInfo^.h); DrawText(VisInfo^.VisDC, PChar(StrPos), Length(StrPos), r2, DT_BOTTOM or DT_END_ELLIPSIS); end; end; Es ist aber nicht alles in Ordnung der Text wird verändert .. Bilder im Anhang
Delphi-Quellcode:
Das ist aber nur bei SetBkMode TRANSPARENT
SetBkMode(VisInfo^.VisDC, TRANSPARENT);
//SetBkColor(VisInfo^.VisDC, rgb(0,0,0)); SetTextColor(VisInfo^.VisDC, RGB(255,255,255)); Font := CreateFont(8, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, 'MS Sans Serif'); OldFont := SelectObject(VisInfo^.VisDC, Font); Ist der hintergrund schwarz tritt das problem nicht auf. Kann ich aber nicht lassen da es beschi... aus sieht. Was gibt es da für eine möglichkeit um das zu unterbinden ? gruss Emil |
Re: TextOut Font zuweisung
Grob vermutet: Du malst den neuen Text an neuer Position (scrollen/neue Chars) und da der Transparent ist und der Hintergrund noch nicht neu gezeichnet wurde, malt er das ganze daneben bzw. darüber.
Ergo: Hintergrund vor der Ausgabe des neuen Textes an der Stelle zeichnen. |
Re: TextOut Font zuweisung
Zitat:
Der Text ist immer an einer festen position und wird nicht verändert. Die Intitialisierung
Delphi-Quellcode:
wird dann gemacht wenn ein neues Plugin gestartet wird
SetBkMode(VisInfo^.VisDC, TRANSPARENT);
SetTextColor(VisInfo^.VisDC, RGB(255,255,255)); Font := CreateFont(8, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, 'MS Sans Serif'); OldFont := SelectObject(VisInfo^.VisDC, Font); der Font vorher gelöscht wenn das alte Plugin frei gegeben wird. Die infos werden in der Render Funktion aufgerufen
Delphi-Quellcode:
und danach direkt auf das DC kopiert
GetInfo;
if (not BitBlt(canvas, VisInfo^.x, VisInfo^.y, VisInfo^.w, VisInfo^.h, VisInfo^.VisDC, 0, 0, SRCCOPY)) then begin VisInfo^.Rendering := False; BassFuncs^.SetError(BASS_ERROR_DEVICE); Exit; end; Da ändert sich nichts was den Text angeht die reihenfolge bleibt sich gleich. Es sieht aber so aus das es nur dann auftritt wenn OpenGl Plugins gestartet wurden. Kann es sein das diese TextOut oder die Transparenz zerstört ? Wenn ja wie kann ich das beheben. gruss Emil |
Re: TextOut Font zuweisung
Ich glaube, das Problem liegt daran, dass du mit der Windows GDI auf ein Fensterhandle zeichen willst, dass von OpenGL benutzt wird. Solch ein "Mix" ist überhaupt nicht zu empfehlen, da dadurch genau solche Fehler entstehen können. Wenn du Text auf ein OpenGL-Fenster zeichnen willst, solltest du das auch mit OpenGL machen. Dazu hast du zwei Möglichkeiten.
Dave |
Re: TextOut Font zuweisung
wenn du nicht auf die VCL verzichten musst geht es auch so:
Delphi-Quellcode:
var
lCanvas: TCanvas; begin lCanvas := TCanvas.Create(); try lCanvas.Handle := Your_HDC; try lCanvas.Font.Name := 'irgendwas'; lCanvas.Font.Color := irgendeine; [...] finally lCanvas.Handle := 0; end; finally lCanvas.Free; end; |
Re: TextOut Font zuweisung
Zitat:
@littleDave Mit den Bitmapfonts mache ich ja schon in vis_BassVis stellt kein problem dar halt nicht unicode fähig. Die andere variante müßte ich testen denn auch da würden 2 verschiedene Welten aufeinander treffen. Weiss nicht ob sich BitBlt und OpenGl vertragen, werde es mal testen sollte die andere Methode nicht funktionieren. gruss Emil |
Re: TextOut Font zuweisung
Habe es jetzt mal nach TCanvas umgestellt..
Selbe problem hmmmm.... Im Render Event
Delphi-Quellcode:
if SoInfo.Title <> '' then
BassSoVis1.DrawSongName(VisCanvas); if (not BitBlt(canvas, VisInfo^.x, VisInfo^.y, VisInfo^.w, VisInfo^.h, VisInfo^.VisDC, 0, 0, SRCCOPY)) then begin VisInfo^.Rendering := False; BassFuncs^.SetError(BASS_ERROR_DEVICE); Exit; end;
Delphi-Quellcode:
Was machen ??
procedure OutlinedDrawText(Canvas: TCanvas;
r: TRect; const Text: string; OutlineColor: TColor); var OldBrushStyle: TBrushStyle; OldFontColor : TColor; begin with Canvas do begin Lock; OldFontColor := Font.Color; Font.Color := OutlineColor; OldBrushStyle := Brush.Style; Brush.Style := bsClear; Font.Color := OldFontColor; DrawText(Canvas.Handle, PChar(Text), Length(SoInfo.Title), r, DT_BOTTOM or DT_END_ELLIPSIS); Brush.Style := OldBrushStyle; Unlock; end; end; procedure TBASSSoniqueVis.DrawSongName(Canvas : TCanvas); var Text: String; r : TRect; begin with Canvas do begin Lock; Text := SoInfo.Title; Font.Size := 10; Font.Name := 'Arial'; canvas.Brush.Style := bsClear; Font.Color := clWhite; r := Rect(5, VisInfo^.h -15, VisInfo^.w-100, VisInfo^.h); OutlinedDrawText(Canvas, r, Text, clBlack); Unlock; end; end; Geht auch hier nichts ohne auf OpenGl umzusteigen ? gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz