AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi GetLastError liefert Fehler, obwohl alles funktioniert
Thema durchsuchen
Ansicht
Themen-Optionen

GetLastError liefert Fehler, obwohl alles funktioniert

Ein Thema von Dalai · begonnen am 28. Okt 2012 · letzter Beitrag vom 28. Okt 2012
 
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#1

GetLastError liefert Fehler, obwohl alles funktioniert

  Alt 28. Okt 2012, 10:39
Hallo Leute,

vermutlich stehe ich vollkommen auf dem Schlauch, deswegen wäre es schön, wenn mir jemand einen Weg von dort weg zeigen könnte .

Ich schreibe gerade an einer Idee rum, die mir gestern kam, als ich einen Weg suchte, Schrift/Text in ein Bild zu speichern und die Ergebnisse mit ImageMagick eher schlecht waren (mit Antialiasing verschwommen und ohne ziemlich pixelig). Das ist aber nebensächlich für das Problem.

Im Rahmen dessen benutzte ich heute erstmals die Funktionen GetDC und ReleaseDC und hatte aufgrund diverser Funde Schwierigkeiten, die Parameter richtig zu ordnen (mindestens ein Post in der DP zeigt die Parameter von ReleaseDC vertauscht). Deshalb erinnerte ich mich an GetLastError und SysErrorMessage, die ich einbaute, aber das fördert nun Überraschendes zu Tage:

Delphi-Quellcode:
uses ..., pngimage;

TMainForm = class
    btnPreview: TButton;
    Memo: TMemo;
    imagePreview: TImage;
  private
    pic_image : TImage;
    pic_png : TPngObject;
  end;

procedure TMainForm.btnPreviewClick(Sender: TObject);
var DC: HDC;
    gle: DWORD;
    rdc: integer;
begin
    rdc:= 0;
    gle:= 0;
    DC := GetDC(Memo.Handle);
    MessageBox(Self.Handle, PChar(IntToStr(DC)), nil, MB_OK);
    try
        pic_image.Picture.Bitmap.Width:= Memo.Width;
        pic_image.Picture.Bitmap.Height:= Memo.Height;
        BitBlt(pic_image.Picture.Bitmap.Canvas.Handle,
               0, 0,
               pic_image.Picture.Bitmap.Width, pic_image.Picture.Bitmap.Height,
               DC,
               -1, -1,
               SRCCOPY);
        imagePreview.Picture.Bitmap.Assign(pic_image.Picture.Bitmap);
        imagePreview.Update;
        gle:= GetLastError;
        MessageBox(Self.Handle, PChar(Format('%d, %s (%d)', [rdc, SysErrorMessage(gle), gle])), nil, MB_OK);
// --> gle ist hier noch 0
        pic_png.Assign(pic_image.Picture.Bitmap);
        gle:= GetLastError;
        MessageBox(Self.Handle, PChar(Format('%d, %s (%d)', [rdc, SysErrorMessage(gle), gle])), nil, MB_OK);
// --> gle ist hier 8 (Für diesen Befehl ist nicht genügend Speicher verfügbar)
    finally
        rdc:= ReleaseDC(0, DC);
        gle:= GetLastError;
        MessageBox(Self.Handle, PChar(Format('%d, %s (%d)', [rdc, SysErrorMessage(gle), gle])), nil, MB_OK);
// --> gle ist hier 5 (Zugriff verweigert)
    end;
end;
In den Kommentaren sieht man, was ich nicht verstehe. OK, die 8 nach dem Assign soll mir erstmal egal sein. Aber die 5 verstehe ich überhaupt nicht, denn die gibt GetLastError auch zurück, wenn ich ReleaseDC auskommentiere oder mit einem anderen HWND (Memo.Handle) ausführe. ReleaseDC gibt übrigens 1 zurück, gibt den DC also offensichtlich erfolgreich frei.

Kann mir das jemand erklären?

MfG Dalai
  Mit Zitat antworten Zitat
 


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 16:50 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