Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Einen Text immer ausgeben egal was läuft (game, software) (https://www.delphipraxis.net/32581-einen-text-immer-ausgeben-egal-laeuft-game-software.html)

CTV 25. Okt 2004 17:08


Einen Text immer ausgeben egal was läuft (game, software)
 
Hallo Leute

Ich möchte einen Text in ein Game ausgeben welches auf OpenGl läuft. Das Ziehl ist wenn ich am zocken bin, dass dann wenn irgend was passiert (E-Mail, Chat message etc) dass dann in dem Game wo ich gerade spiele diese Message erscheint. Kann man überhaupt in fremde Apps die auf OpenGL basis laufen etwas rein zeichnen, schreiben ?

Ich hab schon versucht einfach über das Handle vom game einen Canvas zu zeichnen mit einem Timer mit schnellem interval der dann jedes mal den textout macht aber das zeigt es nicht an. Kann man die Canves ausgaben auch irgendwie auf StayonTop stellen ? dann würden die das auf OpenGl Basierende game überzeichnen. oder muss ich da doch direckt in das game rein zeichnen ?

Ist es möglich eine Textausgabe zu machen, welche auf jedenfall immer auf dem Bildschirm gezeichnet wird ? egal was man gestartet hat (game, software, etc) wenn ich sowas hätte dann würde es mir die Ereigniss meldungen welche ich dann noch definiere immer anzeigen

wenn jemand eine idee hat wie ich das machen kann währ cool

Danke für eure Hilfe

greetz Cyrus

Luckie 25. Okt 2004 17:20

Re: Einen Text immer ausgeben egal was läuft (game, software
 
wie wäre es mit einer systemmodalen Messagebox? Ist eventuell einfachher.

c113plpbr 25. Okt 2004 17:29

Re: Einen Text immer ausgeben egal was läuft (game, software
 
Hi CTV!

gehen tut das ... sicher, nur in spielen wirds schwer ... außerdem musst du unterscheiden: Zwischen normalen Windowsprogrammen, zwischen DirectX und OpenGL-Anwendungen.
Für normale Fenster reicht warscheinlich die TextOut-Methode, die auch in Spielen funktioniert, wenn die intervalle kurz genug sind, allerdings flimmert der Text dann meist stark (sehr unschön ;) ).

Um in DirectX oder OpenGL text auszugeben, sollte man zu "hauseigenen" mitteln greifen. Allerdings wird für die Textausgabe unter DX zum erstellen der schrift eigentlich immer zwingend ein IDirect3DDevice benötigt, und unter OGL das HDC (unter ogl ist es eh schon schwer überhaupt text auf die screen zu kriegen, auch im eigenen spiel ... oder kommt mir das nur so vor :gruebel: ?).

Nun, somit ist es meist das größte problem, einen Pointer zum IDirect3DDevice bzw. HDC zu bekommen, und das ist es mit dem du dich auseinandersetzen musst.
Das ganze herauszufinden, ist möglich mit API-Hooking. Wenn du das wirklich machen willst, solltest du dich damit etwas intensiver beschäftigen. Ein guter Einstieg ist eine Hook-Library, wie z.B. MadCodeHook von http://www.madshi.net/. Schau dir dort die Beispiele an, und lerne daraus ;)

@luckie: dann hauts ihn aber ausm spiel raus :mrgreen:

ciao, Philipp

CTV 25. Okt 2004 17:31

Re: Einen Text immer ausgeben egal was läuft (game, software
 
du meinst so einen wie es der MSN macht ?
hab ich mir auch schon gedacht, nur das problem ist das wenn der dialog kommt (der von MSN) dann beinträchtig das das game welches somit unspielbar wird. Das problem hab ich bereits von der box von msn darum hab ich die auch ausgeschaltet. Von dem her kann ichs ned so machen

greetz Cyrus

CTV 25. Okt 2004 17:41

Re: Einen Text immer ausgeben egal was läuft (game, software
 
@c113plpbr
Ich lasse generell alle spiele über opengl laufen von dem her müsst ich in dem Falle nur immer das HDC ermitteln denk ich ma und evtl währs einfacher wenn ich statt einen text ein bild (welches den text enthält) ausgebe. Dann fällt das Problem weg mit der Ausgabe von dem Text. So müsste ich im prinzip nur ein bild über opengl ausgeben auf das den Pointer vom HDC welches das game verwendet seh ich das richtig ?

thx für deine hilfe

greetz CTV

Darty 25. Okt 2004 17:48

Re: Einen Text immer ausgeben egal was läuft (game, software
 
Habe mich jetzt nicht damit näher befasst, aber die Richtung könnte stimmen KLICK

CTV 25. Okt 2004 17:59

Re: Einen Text immer ausgeben egal was läuft (game, software
 
cool :)
Danke so könnte es klappen statt dass ich den Punkt ausgebe gebe ich dann text aus mit textout oder ein bild:) und den thread starte ich nur für ne gewisse zeit 5-10 sek dann hab ich mein tool

mal gucken ob das dann stark flackert wenn ich mir den code anschaue wird das wohl stark flackern

Danke für die Hilfe

greetz Cyrus

Darty 25. Okt 2004 18:01

Re: Einen Text immer ausgeben egal was läuft (game, software
 
Da ich sowas in der Richtung mal probieren wollte aber keine Zeit hatte bisher, wäre es auch schön falls Du Ergebnisse hast dieses auch zu berichten :) Thx schon mal ..

CTV 25. Okt 2004 19:21

Re: Einen Text immer ausgeben egal was läuft (game, software
 
also ich habs nu raus wie ich den text ausgeben kann

Code:
public
   Smsg:string;
   FontColor,FontBackColor, MsgX,MsgY:integer;
   bLoop: Boolean;
   dwID: DWord;
   ThreadHandle: THandle;

....


function PaintThread(Param: PBoolean): Integer;
var
  iWidth, iHeight: Integer;
  Pos: TPoint;
  DC: HDC;
  hOldBrush: hBrush;
  Count,i: Integer;
  ansic:Pansichar;
begin
  with form1 do
  begin
    for i:=1 to (length(Smsg)) do
    begin
      ansic[i-1]:=Smsg[i];
    end;
    Result := 0;
    Count := 0;
    while Param^ do
    begin
      Inc(Count);
      iWidth := GetSystemMetrics(SM_CXSCREEN);
      iHeight := GetSystemMetrics(SM_CYSCREEN);
      Pos := Point(iWidth div 2 - 4, iHeight div 2 - 4);
      DC := GetWindowDC(GetDesktopWindow);
      hOldBrush := SelectObject(DC, CreateSolidBrush(RGB(250, 250, 0)));
      settextcolor(dc,fontcolor);
      SetBkColor(dc,FontBackcolor);
      textout(dc,MsgX,MsgY,ansic,length(Smsg));
      DeleteObject(SelectObject(DC, hOldBrush));
      ReleaseDC(GetDesktopWindow, DC);
      Sleep(0);
      if Count shr 4 = 0 then
        Sleep(1);
    end;
  end;
end;
Im Moment kann man die Textfarbe und die den Texthintergrund einstellen plus den text Selber dazu dienen diese variablen:

Fontcolor, FontBackColor, Smsg, MsgX, MsgY

Ich bin im Moment noch am raus finden wie ich den FontName und die FontSize übergeben kann.

Wie ich vermutet habe flackert der Text sehr wird man wohl nicht vermeiden können

Greetz Cyrus


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz