Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Caption in TTaskDialog (https://www.delphipraxis.net/212073-caption-ttaskdialog.html)

Maekkelrajter 13. Dez 2022 11:57

Caption in TTaskDialog
 
Liste der Anhänge anzeigen (Anzahl: 2)
In einem TTaskdialog ist der Caption-String nur dann sichtbar, wenn mit den CommonButtons ein Cancel-Button deklariert wird. Dummerweise kann ich in diesem Dialog aber keinen Cancel - Button gebrauchen.
Delphi-Quellcode:
function InsertGUID(FN:string): Integer;
begin
  result:= mrNO;
  with TTaskDialog.Create(NIL) do
  try
    Caption:= 'GUIDs einfügen';
    MainIcon:= tdiShield;
    Title:= 'GUID in aktuelle Datei einfügen';
    Text:= 'Soll eine GUID generiert und in die Datei "' + FN + '" geschrieben werden?';
    commonButtons:= [tcbYes,tcbNo,tcbCancel];  // so funktioniert's
    //commonButtons:= [tcbYes,tcbNo];  // so funktioniert's nicht!
    flags:= [tfVerificationFlagChecked];
    verificationtext:= 'Für alle folgenden Tracks übernehmen';
    If Execute Then
    begin
      result:= modalresult;
      If tfVerificationFlagChecked in Flags Then result:= -result;
    end;
  finally
    Free;
  end;
end;
Ist das reguläres Verhalten oder mache ich etwas falsch?
Gruß LP

himitsu 13. Dez 2022 12:31

AW: Caption in TTaskDialog
 
Eigentlich nicht.

Vielleicht hängt es einfach von der Breite des Dialogs ab?
Delphi-Quellcode:
Text := 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...'


Oder nur Abbrechen, ohne Ja/Nein, also auch mit schmaleren Fenster.


Sieht die Titelleiste nur auf den Bildern dünner/flacher aus?

Könnte am Fensterstil liegen: mit Abbrechen gibt es ein [x] und damit wohl einen anderen Style.


VCL oder WinAPI?
Delphi-Quellcode:
  LatestCommonDialogs := False; // False = VCL emuliert diesen Dialog (mit einer TForm)
  with TTaskDialog.Create(NIL) do

Maekkelrajter 13. Dez 2022 13:58

AW: Caption in TTaskDialog
 
Zitat:

Zitat von himitsu (Beitrag 1516116)
Könnte am Fensterstil liegen: mit Abbrechen gibt es ein [x] und damit wohl einen anderen Style.
Delphi-Quellcode:
 
LatestCommonDialogs := False; // False = VCL emuliert diesen Dialog (mit einer TForm)

Es könnte tatsächlich am Fensterstil liegen. Wenn ich das Flag 'tfAllowDialogCancellation' setze, ist die Caption auch ohne CancelButton sichtbar, aber eben leider auch das [x], das ich nicht brauchen kann. Nur wenn ich unter Projekt/Optionen/Erscheinungsbild 'Windows' wähle, dann geht's auch ohne.

Und 'LatestCommonDialogs' müsste wohl 'UseLatestCommonDialogs' heißen. ;-)

Gruß LP

DaCoda 15. Apr 2023 20:33

AW: Caption in TTaskDialog
 
Dieses Thema ist zwar schon alt, aber offensichtlich hat sich nichts geändert am Verhalten.
In Kombination mit Styles wird die Titelzeile nur angezeigt, wenn es einen "Abbruch-Button" gibt.
Hat hierzu jemand inzwischen eventuell was rausgefunden ?

Uwe Raabe 15. Apr 2023 23:06

AW: Caption in TTaskDialog
 
Gibt es dafür einen Bug-Report? Ich könnte dann einen Kommentar mit der Ursache und einem Lösungsvorschlag dazu schreiben.

DaCoda 16. Apr 2023 06:55

AW: Caption in TTaskDialog
 
@Uwe Raabe:
Danke für deine Unterstützung.

Nein einen offiziellen Report gab es noch nicht, aber jetzt habe ich das mal gemacht.

DaCoda 16. Apr 2023 08:10

AW: Caption in TTaskDialog
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hier noch mal etwas vollständiger, damit man das besser Testen kann:
Code:
procedure TfrmMain.TestTaskDialog;
var
  TaskDialog: TTaskDialog;
begin
  TaskDialog := TTaskDialog.Create(Self);
  try
    TaskDialog.Title := 'Titletext';
    TaskDialog.Caption := 'Caption';
    TaskDialog.Flags := [tfPositionRelativeToWindow, tfSizeToContent];
    TaskDialog.CommonButtons := [tcbOk];
    TaskDialog.ModalResult := MB_OK;
    TaskDialog.Execute;
  finally  
    TaskDialog.Free;
  end;
end;
Das Ergebnis:
Ohne Style [Windows]: https://www.delphipraxis.net/attachm...1&d=1681628764
Mit Style: https://www.delphipraxis.net/attachm...1&d=1681628624

Uwe Raabe 16. Apr 2023 10:04

AW: Caption in TTaskDialog
 
Das Problem liegt in TSysDialogStyleHook.PaintNC. Dort wird TextRect mit TRect.Empty initialisiert und im weiteren Verlauf Left und Right an die anzuzeigenden Buttons angepasst. Werden nun gar keine Buttons rechts angezeigt verbleibt TextRect.Right bei 0 und es erfolgt keine Textausgabe.

DaCoda 16. Apr 2023 10:24

AW: Caption in TTaskDialog
 
Vielen Dank Uwe,
dann kann ich da wohl nicht viel machen oder ?

Uwe Raabe 16. Apr 2023 10:42

AW: Caption in TTaskDialog
 
Zitat:

Zitat von DaCoda (Beitrag 1521097)
Vielen Dank Uwe,
dann kann ich da wohl nicht viel machen oder ?

Das Problem ist eher, dass man als Entwickler schon verhältnismäßig viel machen muss um es zu beheben. Einfach TSysStyleHook ableiten und die PaintNC Methode überschreiben funktioniert leider nicht, da private Methoden verwendet werden (ein leider häufig anzutreffendes Ärgernis).

Du kannst eventuell die ganze Unit Vcl.SysStyles in dein Projektverzechnis (neben die DPR) kopieren und die vorgeschlagene Änderung implementieren. Bei einem Wechsel der Delphi-Version muss das aber mit der dann gültigen Unit wiederholt werden. Wie aufwändig das genau ist kann ich auch nicht sagen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz