Ich habe ein Formular in einer Anwendung geschrieben mit FireMonkey. Auf dieser (modalen) Form gibt es einen OK-Button, für den ich die Default-Eigenschaft auf True gesetzt habe. Es gibt auch eine Memo-Komponente. Wenn Sie nun beim Eingeben des Memos die Eingabetaste drücken, wird das Formular geschlossen, anstatt den Zeilenumbruch in das Memo einzufügen.Zeilenumbrüche in TMemo in einem Formular mit Standardschaltfläche
Was ich erreichen möchte, ist, dass, wenn eingegeben (oder shift + enter oder smth wie) in Memo-Komponente gedrückt wird, dann Zeilenumbruch eingegeben wird. In anderen Komponenten, in denen Sie keine Zeilenumbrüche eingeben können, möchte ich trotzdem die Eingabetaste drücken, um das Formular zu schließen. Das Beste, was ich bisher gefunden füge folgenden Code in Formen OnCloseQuery Aktion:
if (Focused.GetObject.ClassName = 'TMemo') and (ModalResult = mrOk) then
begin
CanClose := False;
Memo := TMemo(Focused.GetObject);
Memo.InsertAfter(Memo.CaretPosition, sLineBreak, [TInsertOption.ioMoveCaret,
TInsertOption.ioCanUndo]);
end
else
CanClose := True;
Dies funktioniert, aber es jetzt ist es eine kleine ärgerliche Verzögerung nach dem Zeilenumbruch erscheint eingeben und bevor man. Auch hätte ich gerne Lösung, das wäre weniger hacky.
Ich sollte auch darauf hinweisen, dass ich auch Formulare habe, die die Schaltfläche OK enthalten, aber nicht die Memo-Komponente, jedoch wird ein Memo zur Laufzeit durch Ändern seiner übergeordneten Eigenschaft in dieses Formular verschoben.
Try 'Memo.Lines.BeginUpdate Memo;' vor Memo Inhalt zu ändern und 'Memo.Lines.EndUpdate;' danach. – Abelisto
Emba versäumt, TMemo WantReturns, WantTabs-Eigenschaften zu implementieren: o (Ich würde ein OnIdle-Ereignis im Formular verwenden, um zu überprüfen, ob ein fokussiertes TMemo die Default-Eigenschaft festlegt. Aber Emba hat auch kein TApplicationEvent für FMX: o (Nur TActionList hat OnUpdate Ereignis, das im Leerlauf ausgelöst wurde, wenn mindestens eine Aktion definiert und einem Steuerelement zugewiesen wurde –
In der Standardschaltfläche 'OnClick' testen Sie, ob das Memo fokussiert ist, und setzen Sie' ModalResult' auf mrNone, falls dies der Fall ist. –