Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close; ?) (https://www.delphipraxis.net/190002-messagedlg-ueber-den-default-button-automatisch-schliessen-meincustomdialog-close%3B.html)

p80286 19. Aug 2016 13:57

AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
 
Zitat:

Zitat von RandomDD (Beitrag 1345293)
Der Modus aktiviert nicht die Fernsteuerung sondern er unterbindet das Anzeigen von Dialogen.

Und warum gibt es dann keine Zwangskoppelung?

Gruß
K-H

RandomDD 19. Aug 2016 14:00

AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
 
Das Wort fällt jetzt zum ersten Mal. Was genau meinst du damit? Klingt interessant.

EWeiss 19. Aug 2016 14:37

AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
 
So wie mir bekannt ist hat ein Dialog seine eigene Message Queue.
Demnach sollte ein einfaches WM_DESTROY reichen.

Dort wird dann PostQuitMessage(0); ausgelöst und die Message Queue beendet.
Zumindest haben meine Selbsterstellten Dialoge diese besagte Message Queue.

gruss

himitsu 19. Aug 2016 14:52

AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
 
Zitat:

Zitat von EWeiss (Beitrag 1345303)
So wie mir bekannt ist hat ein Dialog seine eigene Message Queue.

nJAin

VCL-Dialoge haben standardmäßig niemals eine eigene Message-Queue, schon alleine deswegen, da die VCL nicht thread-save ist.
Da läuft alles im Hauptthread und in dessen Queue.

EWeiss 19. Aug 2016 14:57

AW: MessageDlg über den Default-Button automatisch schließen (MeinCustomDialog.Close;
 
Zitat:

Zitat von himitsu (Beitrag 1345304)
Zitat:

Zitat von EWeiss (Beitrag 1345303)
So wie mir bekannt ist hat ein Dialog seine eigene Message Queue.

nJAin

VCL-Dialoge haben standardmäßig niemals eine eigene Message-Queue, schon alleine deswegen, da die VCL nicht thread-save ist.
Da läuft alles im Hauptthread und in dessen Queue.

Das scheint mir aber die (beste) einfachste Lösung..
Example:

Delphi-Quellcode:
function TSkinBrowseForFolder.ShowBrowseFolderDialog: TBrowseFolderDialogConstant;
var
  Msg: TMsg;

begin
  MoveWindow(Handle, x, y, rc.Right + 1, rc.Bottom + 1, True);

  SkinEngine.ShowMainWindow(Handle, 0);
  EnableWindow(HParent, False);

  // Windows Messagen verarbeiten
  while GetMessage(Msg, 0, 0, 0) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;

  EnableWindow(HParent, true);

  Result := DlgConstant;

end;
Wird dann einfach so aufgerufen..
Ausschnitt..
Delphi-Quellcode:
          IDM_AddFolder:
            begin
              if not Assigned(BrowseForFolder) then
                AddBrowseForFolderControls(MainHandle);

              BrowseFolderDialogConstant := BrowseForFolder.ShowBrowseFolderDialog;
              if not (BrowseFolderDialogConstant = bffdcCancel) then
              begin
                dir := BrowseForFolder.OutPutDir;

Der Dialog beendet sich dann selbst nach einem Click als Beispiel auf "Cancel"
Delphi-Quellcode:
          ID_BTN_CANCEL:
            begin
              SkinEngine.SetCTLText(edInput.Handle, '');
              BrowseForFolder.DlgConstant := bffdcCancel;
              SendMessage(WinHandle, WM_DESTROY, 0, 0);
              DriveList.DestroyWindow;
              DriveList := nil;
              BroForFolderHandle := 0;
            end;
Ok hat jetzt weniger mit seinem Problem zu tun..
Daher bin ich raus ;)

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr.
Seite 3 von 3     123   

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