我在Delphi 10 Seattle中有一個Firemonkey多設備項目,用戶可以在應用程序的開始處獲取屏幕。這裏用戶需要填寫2個字段。但是當我點擊編輯字段時虛擬鍵盤沒有顯示。如果我在開始時跳過此屏幕並稍後調用,則會顯示虛擬鍵盤。這也是以相同的方式完成的。VirtualKeyboard不顯示焦點在Firemonkey項目中編輯字段
我找到了一種解決方案: 當我點擊編輯字段時,我稱之爲顯示VirtualKeyboard自己。唯一的問題是光標不顯示在編輯字段中。
有沒有辦法讓光標自己放置?還是有人知道如何解決虛擬鍵盤不以其他方式顯示問題?
問題是在Android和iOS
都在下面的代碼,你可以看到最初的形式創建。問題是當在ConnectFromProfile方法中調用actCreateNewProfileExecute時。在那裏它會調用一個新的表單。在這種形式下(TfrmProfile)虛擬鍵盤沒有顯示。我也用另一個動作調用這個表單,然後工作正常。
procedure TfrmNocoreDKS.FormCreate(Sender: TObject);
begin
Inherited;
System.SysUtils.FormatSettings.ShortDateFormat := 'dd/mm/yyyy';
CheckPhone;
ConnectfromProfile;
if not Assigned(fProfileAction) then
ConnectDatabase
Else
lstDocuments.Enabled := False;
{$IFDEF ANDROID}
ChangeComboBoxStyle;
{$ENDIF}
end;
procedure TfrmNocoreDKS.ConnectfromProfile;
begin
fdmProfileConnection := TdmConnection.Create(nil);
fdmProfileConnection.OpenProfileDb;
fdmProfileConnection.LoadProfiles;
if fdmProfileConnection.Profiles.Count = 0 then
begin // Createdefault Profile
fProfileAction := actCreateNewProfileExecute;
end
else if fdmProfileConnection.Profiles.Count = 1 then
begin // one profile load connection;
fProfileAction := nil;
fCurrentProfile := fdmProfileConnection.Profiles.Items[0];
end
else
begin // multiple profiles choose connection;
fProfileAction := SelectProfileOnStartUp;
end;
end;
procedure TfrmNocoreDKS.FormShow(Sender: TObject);
begin
if Assigned(fProfileAction) then
fProfileAction(Self);
end;
procedure TfrmNocoreDKS.actCreateNewProfileExecute(Sender: TObject);
var
profilename, databasename, pathname: string;
prf: TfrmProfile;
begin
prf := TfrmProfile.Create(nil);
prf.Data := fdmProfileConnection.Profiles;
prf.ShowModal(
procedure(ModalResult: TModalResult)
begin
if ModalResult = mrOk then
begin
profilename := prf.edtProfilename.Text;
databasename := prf.edtDatabaseName.Text;
{$IFDEF IOS}
pathname := System.IOUtils.TPath.GetDocumentsPath;
{$ENDIF}
{$IFDEF ANDROID}
pathname := System.IOUtils.TPath.GetDocumentsPath;
{$ENDIF}
{$IFDEF WIN32}
pathname := ExtractFilePath(ParamStr(0)) + '\Data';
{$ENDIF}
FDSQLiteBackup1.Database := System.IOUtils.TPath.Combine(pathname,
'default.sqlite3'); // Default Database
FDSQLiteBackup1.DestDatabase := System.IOUtils.TPath.Combine(pathname,
databasename + '.sqlite3');
FDSQLiteBackup1.Backup;
fdmProfileConnection.AddProfile(databasename + '.sqlite3', profilename);
fdmProfileConnection.LoadProfiles;
fCurrentProfile := fdmProfileConnection.Profiles.Items[0];
connectDatabase;
end else
Application.Terminate;
end);
end;
你的意思是'在應用程序開始時獲取屏幕'?它是一種形式還是它是一種對話? –
@SergeyKrasilnikov它是一種形式。但它並不總是顯示。這取決於某些條件。 – Remi
@Remi請顯示您的.dpr代碼(我認爲,登錄表單顯示在那裏(?))並指定目標平臺。 – kami