Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 12, 2025 07:46

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Apr 25, 2006 18:51 
Offline
DGL Member

Registriert: Di Apr 25, 2006 13:58
Beiträge: 1
Hallo


Ich habe folgendes Problem:

Ich möchte in ein fremdes Spiel einen Text einblenden. Das spiel hat so ca 100FPS die leicht schwanken
und wenn ich jetzt einfach mit Canvas ein einen
Text auf den Bildschirm schreib dann wird er sofort wieder überzeichnet.

Ich hab mal versucht mit einem Timer den Text möglichst schnell immer neu zu zeichnen aber dann flackert er.

Die sache sah dann bei mir so aus:

Code:
  1.  
  2. procedure TForm1.Timer1Timer(Sender: TObject);
  3. var
  4.  DCanvas: TCanvas;
  5.  DHandle: HWND;
  6. begin
  7.  DHandle:=GetDC(0);
  8.  if DHandle<>0 then
  9.  begin
  10.    try
  11.      DCanvas:=TCanvas.Create;
  12.      try
  13.        DCanvas.Handle:=DHandle;
  14.        DCanvas.Font.Color:=clRed;
  15.        DCanvas.Font.Size:=72;
  16.        DCanvas.Brush.Style:=bsClear;
  17.        DCanvas.TextOut(10, 10, 'Ein Schriftzug');
  18.      finally
  19.        DCanvas.Free;
  20.      end;
  21.     finally
  22.       if ReleaseDc(0, DHandle)<>1 then
  23.         RaiseLastOSError;
  24.     end;
  25.  end
  26.  else
  27.    RaiseLastOSError;
  28. end;
  29.  


gibt es da irgend eine bessere Lösung?

edit Lossy: Code durch Pascaltags ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 26, 2006 08:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also. Erstmal ein herzliches Willkommen im Forum. :-D

Jetzt aber mal zu deiner Frage. Leider ist es nicht so einfach wie du das gerne haben möchtest. Klar kannst du 100 Mal in der Sekunde einen Text auf das Fenster malen. Aber wie du selber festgestellt hast kann es sein, dass dieser wieder sofort überschrieben wird. Es häufiger zu zeichnen ist im übrigen auch keine Lösung.

Die einzige sinnvolle Lösung ist, den Text als einen Bestandteil deine Bildes zu gestalten. Oder genau zu wissen, wann ein Bild fertig gezeichnet wurde. Am Sinnvollsten wäre es dabei, wenn man mit hooks arbeitet um die entsprechenden Methoden abzufangen. Leider weiß ich selber nicht genau wie es geht. Und einige andere haben es auch schon probiert. Allerdings erfolglos. Mit anderen Worten ist es alles Andere als einfach.

Das prominentes Beispiel dabei ist Fraps.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 28, 2006 14:00 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Sowas kannst du mit einer eigenen dazwischen liegenden OGL-Dll machen. C++ Code dafür gibts beispielsweise hier:
http://www.hawksoft.com/download/, das GLTrace. Dort leitest du dann beispielsweise den SwapBuffers-Aufruf nicht direkt an die richtige OGL-Dll weiter sondern schreibst vorher noch ein bisschen Text (mit OGL-Funktionen).


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]