Delphi-PRAXiS

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.

DaCoda 16. Apr 2023 12:23

AW: Caption in TTaskDialog
 
Zitat:

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.
Ok, das habe ich mal so gemacht und funktioniert. Ist zwar etwas unpraktisch, aber im Moment hilft mir das.

Vielen Dank @Uwe Raabe :hello:

TurboMagic 16. Apr 2023 19:37

AW: Caption in TTaskDialog
 
Zitat:

Zitat von DaCoda (Beitrag 1521090)
@Uwe Raabe:
Danke für deine Unterstützung.

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

d.h. du hast einen Report erstellt?
Falls ja, wo ist dann bitte die Rportnummer?
Dann können wir uns den auch anschauen, verfolgen, abstimmen etc.

Warum gibt's das immer wieder, dass Leute darüber schreiben einen Report erstellt zu haben,
aber die Nummer/URL nicht posten? So müssen wir die immer erraten... ;-) :-(

Uwe Raabe 16. Apr 2023 21:20

AW: Caption in TTaskDialog
 
https://quality.embarcadero.com/browse/RSP-41436

Maekkelrajter 17. Apr 2023 10:44

AW: Caption in TTaskDialog
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1521099)
Du kannst eventuell die ganze Unit Vcl.SysStyles in dein Projektverzechnis (neben die DPR) kopieren und die vorgeschlagene Änderung implementieren.

Da bin ich mit meiner 10.4 CE ja ziemlich angeschmiert. Wenn ich die Lizenzbedingungen richtig verstehe, darf ich ja die Sources nicht verändern. Da bleibt mir wohl nichts anderes übrig, als auf eine neue Version der CE zu warten, in der der Bug dann hoffentlich 'offiziell' beseitigt ist :(
Ist irgend etwas darüber bekannt, wann evtl. mit einer Delphi 11 CE zu rechnen ist? Aber erfahrungsgemäß gibt es ja auch keine Garantie, dass der Fehler bis dahin tatsächlich behoben ist :(

Gruß LP

Uwe Raabe 17. Apr 2023 11:25

AW: Caption in TTaskDialog
 
Zitat:

Zitat von Maekkelrajter (Beitrag 1521136)
Da bin ich mit meiner 10.4 CE ja ziemlich angeschmiert.

Dem ist in der Tat so.

Zitat:

Zitat von Maekkelrajter (Beitrag 1521136)
Ist irgend etwas darüber bekannt, wann evtl. mit einer Delphi 11 CE zu rechnen ist? Aber erfahrungsgemäß gibt es ja auch keine Garantie, dass der Fehler bis dahin tatsächlich behoben ist :(

Im Gegenteil: Es ist sogar ziemlich sicher, dass der Fehler in einer Delphi 11 CE nicht behoben sein wird. Voraussichtlich werden wir außer Patches keine neue Version für Delphi 11 erwarten können - die nächste Version wird Delphi 12 sein, und die wird es vorerst vermutlich nicht als CE geben. Ich gehe aber davon aus, dass eine Delphi 11 CE im gleichen zeitlichen Umfeld der Delphi 12 erscheinen wird.

Ich möchte aber nur mal erwähnen, dass bei zeitnaher Anlage eines entsprechenden Bugreports eventuell schon ein Fix in der 11.3 möglich gewesen wäre (wovon auch die kommende CE profitiert hätte). Das wäre zwar zeitlich schon recht sportlich gewesen und der Bug ist auch nicht wirklich kritisch, aber er ist relativ einfach zu beheben. Natürlich kann ich manchen Frust verstehen, der bei den z.T. exorbitant langen Laufzeiten mancher Bugs in QP aufkommen kann. Deswegen aber das Handtuch zu schmeißen und keine Bugs mehr anzulegen kann einfach keine Lösung sein. Die Wahrscheinlichkeit eines (schnellen) Bugfixes in QP ist im Schnitt vielleicht recht klein, aber sie ist noch sehr viel kleiner für Bugs die nicht in QP stehen.

TurboMagic 17. Apr 2023 20:26

AW: Caption in TTaskDialog
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1521120)

Danke Uwe. Ich wollte nur mal meine Verwunderung zum Ausdruck bringen, dass immer wieder
Leute Reports hier erwähnen aber nicht deren Nummern. Was ja offensichtlich wenig nützlich
für uns Leser ist, außer wir haben eine Glaskugel oder investieren die Zeit für eine Suche.
Wobei der jeweilige Poster diese Daten ja sicher i.d.R. parat hätte... ;-)

DaCoda 22. Apr 2023 10:22

AW: Caption in TTaskDialog
 
Nun bin ich mir ein wenig unsicher ob es ein Bug ist, oder eben auch nicht.
So wie hier beschrieben bringt diese Zeile den erwünschten Effekt:
Code:
  Flags := [tfAllowDialogCancellation, ...];
Somit ist das glaube ich auch abgehandelt.

Vielen Dank an Alle die mitgewirkt haben.

@TurboMagic: Ich gelobe Besserung und poste nächstes mal die Reportnummer dazu :-D

Uwe Raabe 22. Apr 2023 11:02

AW: Caption in TTaskDialog
 
Zitat:

Zitat von DaCoda (Beitrag 1521379)
Nun bin ich mir ein wenig unsicher ob es ein Bug ist, oder eben auch nicht.

Es ist definitiv ein Bug. Die Caption sollte bei allen Optionen angezeigt werden. Ohne VCL-Styles funktioniert es ja auch.

himitsu 22. Apr 2023 11:19

AW: Caption in TTaskDialog
 
VCL-Styles :wall:

Einfaches Beispiel (11.3 Patch 1 im Windows 11)
* alles schließen
* Datei > Neu > VCL Formular
* Datei > Neu > VCL Anwendung


und achtet dabei mal auf den Header
sowie StyleName nicht zugewiesen

* Formular ohne App : Aktiv/Selektiert = Weiß mit schwarzem Text / Inaktiv = Weiß mit grauem Text
* Formular mit App : Aktiv/Selektiert = Grau mit weißem Text / Inaktiv = Weiß mit grauem Text
* außerdem eckig

* zur Laufzeit abgerundet
* ohne Styles : Aktiv/Selektiert = Bläulich mit schwarzem Text / Inaktiv = Gräulich mit grauem Text
* mit "Windows" Style : wie Ohne

* eckig (wie im Designer)
* mit "Windows 10" Style : Aktiv/Selektiert = Grau mit schwarzem Text und bläulichem Rahmen / Inaktiv = Dunklgrauer mit grauem Text und ohne Rahmen


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.

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