Einzelnen Beitrag anzeigen

Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Header Übersetzung (von C++ nach Delphi)

  Alt 1. Feb 2008, 14:08
Moin,

Der Vollständigkeit halber gebe ich mir jetzt mal selbst die Antwort(en).

Zitat von Prototypjack:
Ich bekomme irgendwann (leider sagt mir der Debugger nicht wann und Breakpoints nutzen irgendwie auch nicht wirklich was) eine Acess Violation. Jetzt ergeben sich folgende Fragen:
  • Ist die Übersetzung der Funktionen überhaupt korrekt (Ich hatte keine *.h Datei, sondern habe mich aus dem MSDN bedient, bei dem 1. der Modus BP_BUFFERFORMAT - BPBF_COMPOSITED nicht existiert und 2. eben so wenig die komplette Beschreibung der BufferedPaintMakeOpaque Funktion (ich habe da einfach geraten -.-))
  • Kann es Probleme geben, wenn ich die uxTheme.dll zwei Mal im Programm geladen habe (Ich denke Delphi lädt sie von selbst schon einmal, wegen der Themes, oder?)?
  • Kann es sein, das ich beim Laden oder in der gehookten WindowProc (siehe Oben) etwas versemmelt habe?
  • Kann das überhaupt so funktionieren?
  • Ist die Übersetzung der Funktionen überhaupt korrekt? - Fast, siehe unten.
  • Kann es Probleme geben, wenn ich die uxTheme.dll zwei Mal im Programm geladen habe? - Scheinbar nicht.
  • Kann es sein, das ich beim Laden oder in der gehookten WindowProc (siehe Oben) etwas versemmelt habe? - Ein wenig, siehe unten.
  • Kann das überhaupt so funktionieren? - Ja.

Folgende Änderungen sind dem obigen Code hinzuzufügen:

Delphi-Quellcode:
      Button1.Perform(WM_ERASEBKGND, MemDC, MemDC);
      Button1.Perform(WM_PRINTCLIENT, MemDC, PRF_CLIENT);
Delphi-Quellcode:
  HPAINTBUFFER = THandle; // Irgendwie "richtiger"
  TBeginBufferedPaint = function(hdcTarget: HDC; const prcTarget: TRECT;
    dwFormat: BP_BufferFORMAT; pPaintParams: Pointer; out phdc: HDC): HPAINTBUFFER; stdcall; // Blöder Fehler.. Wegen "out".
Dann sollte es funktionieren. Achja, BufferedPaintMakeOpaque ist gleichbedeutend mit BufferedPaintSetTransparent (nur mit dem Startvalue 255 bei Alpha). Also stattdessen diese Methode benutzen, dabei spart man sich etwas Arbeit.

Grüße,
Max
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat