Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ingame mitteilung!? (https://www.delphipraxis.net/61964-ingame-mitteilung.html)

ghost007 28. Jan 2006 22:55


ingame mitteilung!?
 
Hallo,
ich arbeite gerade an einem chatprogramm und wollte die möglichkeit einbauen, das die nachrichten auch während ein programm (z.B.ein Spiel) eingeblendet werden, ohne das programm zu minimieren oder sonst irgendwie zu beeintrechtigen.
Wie kann ich so etwas machen?

Ferber 29. Jan 2006 08:43

Re: ingame mitteilung!?
 
Hi !
Du könntest das Beispielprogramm '$(delphi)\demos\internet\chat\chat.dpr' mit sehr geringen Veränderungen in dein Programm einbauen.
TChatForm ist natürlich bei deinem Prog nicht das Hauptformular, also vorläufig nicht sichtbar.
Im Erreignis
Delphi-Quellcode:
TClientSocket.OnRead
ergänzt du
Delphi-Quellcode:
TChatForm.Visible:=true
, damit hättest du das PopUp, wenn TClientSochet was empfängt.

Delphi-Quellcode:
TChatForm.FormSytyle:=fsStayOnTop
ist wahrscheinlich auch notwendig.

Nicht getestet, sollte aber funktionieren. :)

ghost007 29. Jan 2006 09:26

Re: ingame mitteilung!?
 
hm.... ich kann dir leider nicht ganz folgen :gruebel:
Ich arbeite mit Delphi 7, und dort kann ich eine Chat demo nicht finden.

Ferber 29. Jan 2006 09:36

Re: ingame mitteilung!?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ist von D5. Hänge die Demo dran.

ghost007 29. Jan 2006 10:03

Re: ingame mitteilung!?
 
Also, danke für den anhang, aber welche funktion dieses chats soll ich denn in meinen integrieren?
So etwas wie "ingame mitteilung" kann ich dort nicht finden

maaalin 29. Jan 2006 10:16

Re: ingame mitteilung!?
 
hmm ich glaub so einfach ist es nicht.

du könntest den text einfach auf das oberste fenster zeichnen lassen.
aber das gäbe dann ne ruckelorgie.

die wohl eleganteste lösung dazu wäre opengl/directX zu hooken
und eine neue glprint prozedur zu schreiben.
oder wie es auch immer in directX heisst

ghost007 29. Jan 2006 11:55

Re: ingame mitteilung!?
 
aha, aber ich mag noch nie mit OpenGL und DirectX gearbeitet :?
geht das nicht auch anders? :gruebel:

3_of_8 29. Jan 2006 12:02

Re: ingame mitteilung!?
 
Vielleicht so ähnlich wie Fraps das macht mit den FPS? DLL Injection glaub ich. Aber davon hab ich keine Ahnung.

ghost007 29. Jan 2006 13:08

Re: ingame mitteilung!?
 
Also, irgendwie sind die antworten nicht so ganz zufiedenstellend :(
hat denn kiener hier ne ahnung wie so was funktioniert?

3_of_8 29. Jan 2006 13:11

Re: ingame mitteilung!?
 
Ich hatte doch eh eine. Bemüh doch mal die Forumssuche und such nach DLL-Injection, vielleicht findest du was.

dizzy 29. Jan 2006 14:30

Re: ingame mitteilung!?
 
Meines Wissens nach geht das in der Tat nur sauber, wenn man es wie Fraps macht. Das Problem daran: Fraps "hooked" die gesamte DLL in der der Flipcode für DirectX enthalten ist. Das heisst: Sie haben eine eigene DLL geschrieben und damit die echte ersetzt (zur Laufzeit, also via Injection vermute ich). Diese neue DLL reicht alle Methodenaufrufe an die echte DLL durch, aber führt im Flipcode noch eigene Aktionen aus, womit Fraps also genau an die richtige Stelle gelangt für solche Dinge.
Der Haken wird sein: Diese DLL dürfte gewaltig groß sein, und ich kann mir mehr als gut vorstellen dass nicht alle vorhandenen Methoden von MS dokumentiert sind...

Du hast dir keine leichte Aufgabe vorgenommen ;).

\\edit: Zu dem Thema gibt es bereits einige Threads im Forum

Die Muhkuh 29. Jan 2006 14:39

Re: ingame mitteilung!?
 
Hi,


meinst du sowas wie XFire?

maaalin 29. Jan 2006 15:30

Re: ingame mitteilung!?
 
Zitat:

Zitat von dizzy
Meines Wissens nach geht das in der Tat nur sauber, wenn man es wie Fraps macht. Das Problem daran: Fraps "hooked" die gesamte DLL in der der Flipcode für DirectX enthalten ist. Das heisst: Sie haben eine eigene DLL geschrieben und damit die echte ersetzt (zur Laufzeit, also via Injection vermute ich). Diese neue DLL reicht alle Methodenaufrufe an die echte DLL durch, aber führt im Flipcode noch eigene Aktionen aus, womit Fraps also genau an die richtige Stelle gelangt für solche Dinge.
Der Haken wird sein: Diese DLL dürfte gewaltig groß sein, und ich kann mir mehr als gut vorstellen dass nicht alle vorhandenen Methoden von MS dokumentiert sind...

Du hast dir keine leichte Aufgabe vorgenommen ;).

\\edit: Zu dem Thema gibt es bereits einige Threads im Forum

also wie ich schon gesagt habe,
die grafik hooken :D

ich denke es würde reichen wenn man eine funktion hooked und das sollte glPrint sein.
kann ich aber keine garantie drauf geben.

uall hat auch eine nützliche komponente dafür geschrieben.

dizzy 30. Jan 2006 11:51

Re: ingame mitteilung!?
 
Zitat:

Zitat von maaalin
also wie ich schon gesagt habe,
die grafik hooken :D

ich denke es würde reichen wenn man eine funktion hooked und das sollte glPrint sein.
kann ich aber keine garantie drauf geben.

uall hat auch eine nützliche komponente dafür geschrieben.

Das würde dann bedingen, dass man sich in den Prozess patched. Die Variante mit nem DLL-Wrapper geht dann ja nicht mehr ;). Bei OGL wäre das sogar noch die einfachere Variante, da die DLL wenn ich das richtig gesehen habe teuflisch viel exportiert. Bei DX hat man dann jedoch den Jammer, dass "Present/Flip" nicht wie bei OGL einfach nur eine Funktion ist, sondern Methode einer Klasse. Da kann ich nicht beurteilen ob das so viel ausmacht, aber es klingt für mich zunächst mal schwieriger =)

Ein 2. Problem hat die Patch-Variante noch: Manche Spielehersteller bauen Überwachungsmechanismen ein die u.a. versuchen herauszufinden ob sich da was am Game zu schaffen macht um Cheatern das Leben schwer zu machen. (World of Warcraft z.B. ist da recht rigoros.) Also würde man somit u.U. Gefahr laufen fälschlicherweise als Cheater identifiziert zu werden, was bei entsprechenden Online-Games mitunter zur Kündigung des Zugangs führen kann. Ich will nicht sagen, dass das auf jeden Fall bemerkt und geahndet wird, aber doch zumindest drauf hinweisen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 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