![]() |
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 01:16 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