2017-05-31 31 views
1

當使用樣式時單擊TDateEdit選擇器中的選定日期時,我正在訪問衝突。德爾福東京FMX - 從TDateEdit使用樣式選擇日期後訪問衝突

首先,您必須從(DELPHI)/ Redist/styles/fmx文件夾的樣式樣本中選擇任何樣式到TStyleBook組件。

然後在Windows

運行該程序,然後從日期選擇任何日期

單位: 「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. 

圖片:

enter image description here

+2

在Quality Portal提交錯誤報告 –

回答

0

現在在東京NeedStyleLookup實際上是免費控制風格的資源。當你在彈出的TCalendar中點擊日期時,會使IsOpen:= False彈出並彈出表格爲TCalendar - FPopupForm.RemoveObject(Self)殺掉樣式化資源;

我沒有看到優雅的方式來通過自定義TDateEdit來解決這個問題。 只能提供一個快速解決方案。我不知道ISO和ANDROID這裏的其他單位(FMX.PhoneDialer.iOS.pas,FMX.PhoneDialer.iOS.pas)的情況。對於其他人,你可以在你的項目中複製FMX.Pickers.Default.pas並將其重命名,例如FMX.Pickers.DefaultFix.pas

現在添加此變化:

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; 

,並添加

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

此AV行爲也發生在柏林版本中。 我不得不在Windows版本上禁用StyleBook纔沒有這個問題。 –

+0

但是你的實現像一個魅力。 @App –