Delphi 10.1 Berlin Starter - Hauptformular in den Vordergrund

    Delphi 10.1 Berlin Starter - Hauptformular in den Vordergrund

    Guten Abend,

    ich habe eine VCL-Anwendung, die aus etwa 20 Formularen besteht von Delphi 6 nach 10.1 migriert. Es gab ein paar Probleme bzgl. Einbau der JEDI-Bibliothek. Das ist inzwischen alles i. O. Die Anwendung läuft auch (fast) ordnungsgemäß.

    Problem: Das Haupformular, von dem alle anderen gestartet werden, läßt sich nicht in den Vordergrund bringen. Bei Anklicken wird es zwar aktiviert, bleibt aber teilweise verdeckt von anderen Formularen. Ich muss es dann immer 'freischieben', um z. B. die Anwendung zu schliessen via Menu oder den entsprechenden Button.

    Unter Delphi 6 klappte das problemlos. Alle anderen Fenster kommen bei Aktivierung in den Vordergrund. Bei den Eigenschaften habe ich einfach nichts gefunden, was ich ändern muss.

    Vielen Dank für den klärenden Hinweis und
    freundliche Grüße aus Leipzig
    Dieter
    Hast du schon einmal versucht, in deinem Hauptformular am Ende der OnClose OnActivate-Ereignisbehandlung den Befehl BringToFront einzusetzen?

    Mikhal hat natürlich recht, es muss im OnActivate ausgeführt werden. Beim Erstellen eines Formulars wird immer zuerst OnCreate ausgeführt, danach OnShow und zuletzt OnActivate (empirische Behauptung: selbst einstmals getestet). Irgendwie hat mich wohl das "am Ende" zu einem "OnClose" verführt :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Slipstream“ ()

    Hallo, ihr beiden,

    vielen Dank. Das sah ja recht plausibel aus. Ich habe sowohl bei 'OnActivate' als auch bei 'OnClick probiert.
    Es gibt leider keine Änderung.

    ich füge mal ein einfaches Testbeispiel ein (Form2 ist das Hauptformular):

    ****************************************************************************

    Delphi-Code

    1. unit hextoint_converter;
    2. interface
    3. uses
    4. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    5. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons;
    6. type
    7. TForm2 = class(TForm)
    8. LabeledEdit1: TLabeledEdit;
    9. LabeledEdit2: TLabeledEdit;
    10. LabeledEdit3: TLabeledEdit;
    11. LabeledEdit4: TLabeledEdit;
    12. SpeedButton1: TSpeedButton;
    13. procedure LabeledEdit1Exit(Sender: TObject);
    14. procedure SpeedButton1Click(Sender: TObject);
    15. procedure FormActivate(Sender: TObject);
    16. private
    17. { Private-Deklarationen }
    18. public
    19. { Public-Deklarationen }
    20. end;
    21. var
    22. Form2: TForm2;
    23. intnumb : int64;
    24. implementation
    25. {$R *.dfm}
    26. uses Unit1;
    27. procedure TForm2.FormActivate(Sender: TObject);
    28. begin
    29. Form2.BringToFront;
    30. end;
    31. procedure TForm2.LabeledEdit1Exit(Sender: TObject);
    32. begin
    33. intnumb:=StrToInt64 (LabeledEdit1.Text);
    34. LabeledEdit3.Text:=IntToStr(intnumb);
    35. end;
    36. procedure TForm2.SpeedButton1Click(Sender: TObject);
    37. begin
    38. Form1.Show;
    39. end;
    40. end.


    Delphi-Code

    1. unit Unit1;
    2. interface
    3. uses
    4. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    5. Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
    6. type
    7. TForm1 = class(TForm)
    8. private
    9. { Private-Deklarationen }
    10. public
    11. { Public-Deklarationen }
    12. end;
    13. var
    14. Form1: TForm1;
    15. implementation
    16. {$R *.dfm}
    17. end.


    ********************************************************************

    Mit freundlichen Grüßen
    Dieter

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DeddyH“ () aus folgendem Grund: Delphi-Tags ([delphi][/delphi]) gesetzt, künftig bitte selbst machen //MfG DeddyH

    Hallo,
    vielen Dank, das war es. Nur habe ich es noch nicht verstanden. Die Zeile war in meiner alten (migrierten) Anwendung und auch im obigen Testprojekt enthalten mit 'true'. Ich habe das in 'false' geändert, das Verhalten war dann wunschgemäß. Testweise habe ich die Zeile auskommentiert. Da war das Verhalten auch i. O.
    Mir ist nun nur noch nicht klar, was das verdeckte Hauptfenster mit der Taskleiste zu tun hat.

    Noch eine Frage zu MDI-Anwendungen. Ist das die bessere Wahl?

    Gruß
    Dieter
    Ob MDI-Anwendungen die bessere Wahl darstellen, liegt an dir und den Anwendern deines Programms. Wenn du die einschlägigen Foren durchsuchst, wird dort immer von MDI-Design abgeraten, weil es nicht mehr modern wäre, Einschränkungen unterliegt etc.

    Ich persönlich verwende das MDI-Design immer wieder gerne, wenn ich eine Programm schreibe, für dass ich mehrere Fenster benötige, die aber nicht permanent benötigt werden. Beispiel: ein Datenbank-gestütztes Programm in dem mehrere Themen abgewickelt werden müssen, z.B. ein Warenwirtschaftsprogramm. Hier habe ich als Themen (ganz grob) einen Artikelstamm, ein Stücklistenstamm, eine Produktionssteuerung, einen Lieferanten- und einen Kundenstamm, Lagerverwaltung, Bestandsführung, Vertrieb und nicht zu vergessen den Versand. Hier bietet sich eben für diese Themen der Einsatz entsprechender Fenster an, die eben nicht permanent benutzt werden, sondern gemäß der aktuellen Aufgabe geöffnet sind. Hier kann ich mir weder einen Ansatz wie gedockte Fenster noch Tabbed-Windows vorstellen. Das SDI (Single Document Interface) macht in diesem Umfeld in meinen Augen auch wenig Sinn, da hier die Fenster "wild" auf dem Desktop platziert werden.

    Meine Anwender haben sich bisher nicht darüber beklagt, dass das Design veraltet ist. Es kam ihnen darauf an, dass sich die Benutzeroberfläche intuitiv erschließt und die entsprechenden Aufgaben gelöst werden können.

    Grüße
    Mikhal
    Computer erleichtern die Arbeit -
    und die Welt ist eine Scheibe!