![]() |
In Fremdanwendung Informationen anzeigen
Hi,
folgendes Problem: Ich bin gerade dabei ein Programm zu schreiben dass auf Tastendruck (abgefangen durch einen globalen Hook) in einer Vollbild - Anwendung und oder Desktop eine Textinformation anzeigen soll. Beispiel: Ich bin gerade in Warcraft und drücke "i" dann soll oben rechts, in der ecke des bildschirms, die aktuelle uhrzeit angezeigt werden, vll noch 3 sekunden vorhanden bleiben (digital, soll während den drei sekunden weiterzählen) und dann wieder verschwinden. Fragestellung: Wie realisiere ich so eine Textanzeige? (vgl Wc3 Banlist, falls das jemand kennt) btw Ich habe die Suche benutzt habe aber nicht gewusst nach welchen Stichworten ich suchen soll MfG |
Re: In Fremdanwendung Informationen anzeigen
Delphi-Quellcode:
damit lässt sich ein Fenster in ein anderes integriert.
FormName.ParentWindow:=ZielWnd;
|
Re: In Fremdanwendung Informationen anzeigen
Bei Overlay-Anwendungen ist dies jedoch alles andere als einfach. Dazu gibt es zahlreiche Themen doch eine Antwort konnte ich auf Anhieb keine finden:
![]() |
Re: In Fremdanwendung Informationen anzeigen
|
Re: In Fremdanwendung Informationen anzeigen
Zitat:
Zitat:
Zitat:
falls jemand vll eine direkt Lösung findet wäre ich sehr dankbar, es soll ja auch keine permanente Einblendung sein, sondern nur halt kurz die Uhrzeit anzeigen.. MfG |
Re: In Fremdanwendung Informationen anzeigen
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:
// die Procedure dürfte wohl dem einen oder anderen bekannt sein ;)
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; 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 |
Re: In Fremdanwendung Informationen anzeigen
Zitat:
|
Re: In Fremdanwendung Informationen anzeigen
Also ich möchte 2 Optionen implementieren eine Fensterabhänhige und eine unabhängige (Die Abhänhige kann ich ja mit GetForegroundWindow klären). Nun zur unabhängigen:
Der Benutzer stellt in meinem Programm eine Position für die Anzeige der Information ein z.b. irgendwo oben links.. nun muss ich irgendwie das Fenster, dass gerade dort ist, ermitteln - es muss ja nicht das ForegroundWindow sein.. |
Re: In Fremdanwendung Informationen anzeigen
:arrow:
![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 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