2017-05-31 1 views
1

Je reçois une violation d'accès lorsque je clique sur la date sélectionnée dans le sélecteur TDateEdit lorsque j'utilise Styles. Vous devez d'abord choisir n'importe quel style parmi les exemples de style du dossier (DELPHI)/Redist/styles/fmx, au composant TStyleBook.Delphi Tokyo FMX - Violation d'accès après avoir sélectionné la date de TDateEdit lors de l'utilisation des styles

puis exécutez le programme et choisir une date de datepicker sur Windows

Unité: "untDateTime.pas"

unit untDateTime; 

interface 

uses 
    System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, 
    FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, 
    FMX.DateTimeCtrls, FMX.Styles.Objects, FMX.Ani, FMX.StdCtrls, FMX.Effects, 
    FMX.Filter.Effects; 

type 
    TForm1 = class(TForm) 
    StyleBook1: TStyleBook; 
    DateEdit2: TDateEdit; 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.fmx} 

end. 

Images de la conception et de l'erreur:

enter image description here

+2

Envoyer un rapport de bogue sur le portail de qualité –

Répondre

0

maintenant à Tokyo NeedStyleLookup effectivement contrôler les ressources de style. Et lorsque vous cliquez sur Date dans la popup, TCalendar rend IsOpen: = False pour les popups et les popupforms pour supprimer les ressources stylisées pour TCalendar - FPopupForm.RemoveObject (Self);

Je ne vois pas de façon élégante de résoudre ce problème en faisant TDateEdit personnalisé. Peut offrir une seule solution rapide. Je ne connais pas la situation pour ISO et ANDROID ici d'autres unités (FMX.PhoneDialer.iOS.pas, FMX.PhoneDialer.iOS.pas). Pour les autres, vous pouvez copier FMX.Pickers.Default.pas dans votre projet et le renommer par exemple FMX.Pickers.DefaultFix.pas

ajouter maintenant cette modification:

procedure TPopupDateTimePicker.DoDateSelected(Sender: TObject); 
begin 
    TThread.CreateAnonymousThread(
    procedure 
    begin 
     TThread.Synchronize(nil, 
     procedure 
     begin 
      IsOpen := False; 
     end); 
    end).Start; 

// IsOpen := False; 
end; 

procedure TPopupDateTimePicker.DoDayClick(Sender: TObject); 
begin 
    DoDateChanged(Parent); 

    TThread.CreateAnonymousThread(
    procedure 
    begin 
     TThread.Synchronize(nil, 
     procedure 
     begin 
      IsOpen := False; 
     end); 
    end).Start; 

// IsOpen := False; 
end; 

et ajouter

initialization 
{$IFNDEF IOS OR ANDROID} 
    UnregisterPickersService; 
    RegisterPickersService; 
{$ENDIF} 
end. 
+0

Ce comportement AV se produisait également dans la version berlinoise. J'ai dû désactiver StyleBook sur Windows Version pour ne pas avoir ce problème. –

+0

Mais votre implémentation a fonctionné comme un charme. @App –