AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Probleme mit CreateCompatibleDC und DeleteDC
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit CreateCompatibleDC und DeleteDC

Ein Thema von Nonsense · begonnen am 11. Okt 2004 · letzter Beitrag vom 11. Okt 2004
Antwort Antwort
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#1

Probleme mit CreateCompatibleDC und DeleteDC

  Alt 11. Okt 2004, 10:14
Hallo,

meine Frage bezieht sich auf Luckies Tutorial OffScreenBitmap realisieren ohne VCL, hat primär damit aber nichts zu tun.

Zum Überprüfen nutze ich immer MemProof (sollte bekannt sein). Jedenfalls kriege ich nach dem Beenden meines Programmes in der MemProof-Sandbox 25 mal den Fehler: 'DeleteDC(...): Falscher Parameter'.

Mal kurz zusammengefasst...
Mein WM_CREATE:
Delphi-Quellcode:
    WM_CREATE:
      begin
        [...]

        hDevCon := GetDC(hWnd);
        hDevConMem := CreateCompatibleDC(hDevCon);

        hBmp := CreateCompatibleBitmap(hDevCon, WND_WIDTH, WND_HEIGHT);
        hBmpOld := SelectObject(hDevConMem, hBmp);

        DeleteObject(hBmp);

        TextOut(hDevConMem, 10, 10, 'Hello World', 11);

        // Wäre wohl "richtig":
        // SelectObject(hDevConMem, hBmpOld);
        // DeleteDC(hDevConMem);

        ReleaseDC(hWnd, hDevCon);

        Result := 0;
      end;
Mein WM_DESTROY:
Delphi-Quellcode:
    WM_DESTROY:
      begin
        SelectObject(hDevConMem, hBmpOld);
        DeleteDC(hDevConMem);

        [...]
      end;
Problem ist jetzt, dass ich hDevConMem schon im WM_CREATE wieder löschen müsste (dann würde ich auch keine Fehler bekommen). Habe ich aber nichts von, da ich das DC im WM_PAINT nicht mehr auf das Fenster-DC kopieren könnte, was konkret heißt, mein "Hello World" wird nicht dargestellt.

Nun wollte ich fragen, ob es da eine andere Lösung gibt? D.h.: wo müsste ich mein "CreateCompatibleDC" und "DeleteDC" platzieren, dass ich
a.) im WM_PAINT darauf zugreifen kann
b.) es wieder freigeben kann, ohne dass ich Fehler von der gdi32.dll gekommen.

MfG Philipp
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Probleme mit CreateCompatibleDC und DeleteDC

  Alt 11. Okt 2004, 10:16
Warum machst du das eigenbtlich in WM_CREATE? Mach es doch gleich in WM_PAINT.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#3

Re: Probleme mit CreateCompatibleDC und DeleteDC

  Alt 11. Okt 2004, 10:19
Zitat von Luckie:
Warum machst du das eigenbtlich in WM_CREATE? Mach es doch gleich in WM_PAINT.
Reicht es nicht, wenn der Aufruf nur 1x kommt? Dachte da jetzt an die Performance. Aber ich teste es mal aus.

E: Haut soweit hin. Hatte mich nur gewundert, ob es wirklich nötig ist das Ganze im WM_PAINT immer wieder neu zu erstellen/löschen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 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