Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

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

Nicht modales Fenster reagiert nicht mehr

  Alt 27. Mai 2006, 14:06
Ich zeige in einem Thread ein nicht modales Fenster an:

Delphi-Quellcode:
function Thread(p: PThreadParams): Integer;
var
  Info : PWaitInfo;
  hDlg : THandle;
begin

  New(Info);
  Info.hParent := p.hParent;
  Info.InfoText := rsWaitPrivileges;

  EnableWindow(p.hParent, False);
  hDlg := CreateDialogParam(hInstance, MAKEINTRESOURCE(500), p.hParent, @waitdlgproc, Integer(Info));
  try
    FillLVGroups(p.hParent, hDlg, ID_LV_GROUPS);
    FillLVPrivileges(p.hParent, hDlg, ID_LV_PRIVILEGES);
  except
    on E: Exception do
      DisplayExceptionMsg(p.hParent, E.Errorcode, E.Message, rsErrorGetPrivilegesCap);
  end;

  sleep(5000);
  EnableWindow(p.hParent, True);
  DestroyWindow(hDlg);
  Dispose(Info);

  Dispose(p);
  result := 0;
end;
Der Code zu CreateDialogParam sieht so aus:
Delphi-Quellcode:
(******************************************************************************
*                                                                            *
*  Usermanager                                                              *
*  WaitDlg -- WaitDialog                                                    *
*                                                                            *
*  Copyright (c) 2006 Michael Puff  [url]http://www.michael-puff.de[/url]              *
*                                                                            *
******************************************************************************)


unit WaitDlg;

interface

uses
  Windows,
  Messages;

const
  ID_STC_INFO = 501;

type
  TWaitInfo = record
    hParent: THandle;
    InfoText: WideString;
  end;
  PWaitInfo = ^TWaitInfo;

function waitdlgproc(hDlg: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): bool; stdcall;

implementation

function waitdlgproc(hDlg: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): bool; stdcall;
var
  rect, rect1 : TRect;
  x, y : Cardinal;
  hParent : THandle;
  Text : WideString;
begin
  Result := true;

  case uMsg of
    WM_INITDIALOG:
      begin
        hParent := PWaitInfo(lParam)^.hParent;
        Text := PWaitInfo(lParam)^.InfoText;
        GetWindowRect(hParent, rect);
        GetWindowRect(hDlg, rect1);
        x := rect.Left - ((rect.Left - rect.Right) div 2) - ((rect1.Right - rect1.Left) div 2);
        y := rect.Top - ((rect.Top - rect.Bottom) div 2) - ((rect1.Bottom - rect1.Top) div 2);
        SetWindowPos(hDlg, 0, x, y, 0, 0, SWP_NOSIZE);
        SetWindowPos(GetDlgItem(hDlg, 299), 0, 0, 0, 305, 2, SWP_NOMOVE or SWP_SHOWWINDOW);
        SetDlgItemTextW(hDlg, ID_STC_INFO, PWideChar(Text));
      end;
  else
    Result := false;
  end;
end;

end.
Jetzt habe ich aber festgestellt, dass es, trotz dass es nicht modal, ist einfriert. Woran liegt das? Oder anderes gefargt, was mache ich falsch?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat