Habe mich jetzt für die einfachste, wie auch wahrscheinlich unschönste Methode entschieden: Ich male den Text mit einem TCanvas auf das entsprechende Windows:
Delphi-Quellcode:
procedure WriteText(TransText: string;x,y:integer);
var
MyHand: HWND;
MyDc: HDC;
MyCanvas: TCanvas;
Start : Longint;
begin
MyHand := GetForegroundWindow;
MyDc := GetWindowDC(MyHand);
MyCanvas := TCanvas.Create;
MyCanvas.Handle := MyDC;
BeginPath(MyCanvas.Handle);
MyCanvas.Font.Color := clred;
MyCanvas.Font.Name := 'Arial';
MyCanvas.Font.Size := 15;
SetBkMode(MyCanvas.Handle,TRANSPARENT);
EndPath(MyCanvas.Handle);
MyCanvas.TextOut(x,y, TransText);
Start := GetTickCount;
repeat
MyCanvas.TextOut(x, y, TransText);
Application.ProcessMessages
until (GetTickCount - Start > 3000);
InvalidateRect(0,nil, true);
end;
// die Procedure dürfte wohl dem einen oder anderen bekannt sein
Zu meinen Fragen:
1. Bei mir wird der erzeugte Text nach 3 Sekunden nicht gelöscht, habe schon versucht ein Trect einzubauen dass den Text beinhaltet und dieses dann bei "InvalidateRect" einzubauen.. hat auch nicht funktioniert. Was mache ich falsch?
//edit: Funktioniert plötzlich -.-, wäre es nicht besser nur die Position des Textes zu Aktualisieren, weil der komplette Refresh Vorgang is auch bissl unschön
2. Der Benutzer soll bei meinem Programm auswählen auf welcher Bildschirmposition der Text erzeugt werden soll und ich habe Probleme dass Window an dieser Stelle zu finden..
MfG