Einzelnen Beitrag anzeigen

Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#10

Re: TAboutScroller Fensterklasse [nonVCL]

  Alt 31. Jan 2006, 20:31
Kleines Exe-Demo-Update siehe oben...
---------------------------------------------

So, nun habe ich wieder mal was mit dem AboutScroller zu tun gehabt.
Was mir aufgefallen ist, ist das einige Sachen nicht wieder freigegeben werden.
Delphi-Quellcode:
function ScrollThread(psc: PScrollConfig): DWORD; stdcall;
begin
  // As long as a main window is assigned
  while (psc^.MainWnd <> 0) do
  begin
    // Increment position
    InterlockedIncrement(psc^.Position);
    // Send the change request to the window
    SendMessage(psc^.MainWnd, WM_ASSAREFRESHSCROLL, 0, 0);
    // Sleep until next refresh cycle
    Sleep(psc^.ScrollDuration);
  end;
  // --- nach dem WM_DESTROY kommt er nicht er hier an ---------- //
  // deswegen habe ich die Freigaben ins WM_DESTROY - Ereignis verschoben

  // Make sure no one else will use the pointer
  SetWindowLong(psc^.MainWnd, GWL_USERDATA, Integer(0));
  // And the config struct itself
  GlobalFree(THandle(psc));
  result := Ord(True);
end;
Delphi-Quellcode:
function TAboutScroller_WindowProc...
//...
    WM_DESTROY:
      begin
        // Terminate the scroller thread, friendly method to do this
        // From this value the thread knows it should terminate and free the
        // config struct.

        // Finally free the text buffer <----<<<
        GlobalFree(THandle(psc^.TextBuffer));
        // Delete GDI objects
        DeleteObject(psc^.Bmp);
        DeleteObject(psc^.BgBrush); // <----<<<
        // Close Thread Handle
        CloseHandle(psc^.Thread);

        psc^.MainWnd := 0;
      end;
Was macht man denn nun mit dem "GlobalFree(THandle(psc));"-Dingens, im WM_DESTROY-Ereigniss bringt es eine AV ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat