2017-06-28 4 views
1

J'ai des problèmes lors de l'utilisation d'un Vista TFileOpenDialog dans une application Delphi 10.1 Berlin VCL avec des styles VCL sous Windows 10 64 bits. Le plus gros problème est que le bouton Ouvrir apparaît comme un bouton radio:TFileOpenDialog avec VCL Style sur Win 10 64 bits: Le bouton Ouvrir apparaît comme bouton radio

(rouge ??? sont ajoutés par moi)

Windows 10 Blue Style

Iceberg Classico Style

Il y a quelques autres problèmes d'apparence, comme :

image

mais ils peuvent être ignorés pour l'instant.

TFileSaveDialog n'a pas le même problème avec le bouton Enregistrer, mais a le même problème avec la barre d'adresse.

Il est très probablement un problème avec Windows 10 lui-même, parce que sur Windows 10 le bouton Ouvrir est un bouton de Split:

image

Reproduire:

  1. Créer une nouvelle demande VCL
  2. Définir un bouton et TFileOpenDialog sur son formulaire principal
  3. Définir l'événement OnClick pour le bouton qui appelle FileOpen Dialog1.Execute
  4. Dans Project-> Options-> Apparence, cochez certains styles personnalisés
  5. Sélectionnez l'un d'entre eux. Si vous le souhaitez - mettre une zone de liste déroulante (cbStyle) sur la forme et le remplir comme ceci:

    for S in TStyleManager.StyleNames do 
        cbStyle.Items.Add(s); 
    

    et définir le cas OnChange:

    if cbStyle.ItemIndex >= 0 then 
        TStyleManager.TrySetStyle(cbStyle.Items[cbStyle.ItemIndex]); 
    

Cela vous permettra de changer la styles dans le temps d'exécution (et sélectionnez de Windows si aucun style requis)

Le problème persiste également lorsque GetOpenFileName() de Winapi.CommDlg est utilisé:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    OFN: TOpenFileName; 
begin 
    FillChar(OFN, SizeOf(OFN), 0); 
    OFN.lStructSize := SizeOf(OFN); 
    OFN.nMaxFile := MAX_PATH; 
    OFN.Flags := OFN_OVERWRITEPROMPT or OFN_HIDEREADONLY or 
       OFN_ENABLESIZING or OFN_EXPLORER; 
    GetOpenFileName(OFN); 
end; 

Jusqu'à présent, je peux essayer d'utiliser un hack: cacher le bouton Ouvrir original et le remplacer par un autre (style Pushbutton), mais je fait des choses semblables il y a plusieurs années avec boîte de dialogue standard boîtes - en ajoutant une case à cocher, par exemple. Je ne sais pas si une approche similaire fonctionnerait. Ou, je pourrais oublier TFileOpenDialog et juste utiliser le bon vieux style XP TOpenDialog.

Est-ce que quelqu'un a une solution?

+0

Pas de problème avec Windows 10. Vous n'utilisez pas le code Windows 10. Vous l'avez remplacé par du code de styles VCL. Cela dépend des détails de mise en œuvre qui peuvent changer. L'application des correctifs du projet VCL Styles utils corrigera probablement le problème. Jusqu'à la prochaine version de Windows. C'est un aspect des styles VCL qu'Emba ne vous dit pas, qu'ils sont susceptibles de casser à chaque fois que de nouvelles versions de Windows arrivent. Pas d'épreuve du futur. Évitez tous les maux de tête en évitant les styles VCL. –

+1

Avez-vous essayé d'utiliser [VCL Styles Utils] (https://github.com/RRUZ/vcl-styles-utils)? Ça arrange les choses exactement comme ça. Je suis surpris que vous ayez eu autant de succès que vous avez déjà avec les dialogues VCL Styles dans Windows. –

+0

Non, VCL Styles Utils (excellent travail de RRUZ!) Ne résout pas le problème (sauf s'il y a eu des changements récents). Peut être lié au fait que Windows 10 a mis à jour récemment ... Je vais télécharger la dernière version et essayer. – roumen

Répondre

1

Le problème ne semble pas si:

  • vcl-styles-utils sont utilisés et
  • vcl.styles.utils.stdCtrls est ajouté à la clause uses de l'unité qui appelle la boîte de dialogue Exécuter méthode (dans mon cas la boîte de dialogue est placée dans un module de données).

Merci Rodrigo Ruz pour l'excellent travail! Les problèmes d'apparence sont également fixés: VCL Stile "Windows 10 Blue"

(presque - voir le bouton Annuler le style Tablet - mais il peut être ignoré!): VCL Style "Tablet Light"

Merci Jerry Dodge pour l'astuce!

Marre des fonctionnalités semi-cuites d'Embarcadero - expédié juste pour "cocher la case" et ajouter à la "liste des fonctionnalités"!

+0

En temps voulu, une future version de Windows va de nouveau casser votre application. Il est impossible pour Emba de faire fonctionner cette fonctionnalité de manière robuste. –