Bonjour à tous,
J'utilise un composant TSynEdit pour la saisie de requêtes SQL dans un programme, et il se trouve que le texte ajouté par le programme n'est pas pris en compte par la méthode Undo.
Voici un extrait du code incriminé (le but étant d'insérer automatiquement les noms et les champs des tables à partir de ListBox/ComboBox sans avoir à les taper manuellement) :J'ai essayé de délimiter les modifications avec les propriétés BlockBegin et BlockEnd, sans plus de succès: la méthode Undo efface le texte situé aux endroits saisis manuellement, ignorant les insertions de la procédure ci-dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 procedure TMainForm.ListBoxTablesDblClick(Sender: TObject); var Pre: String;// texte avant le curseur Post: String;// texte après le curseur begin SynEditSQL.SetFocus; Pre := copy(SynEditSQL.Lines[SynEditSQL.CaretY - 1], 1, SynEditSQL.CaretX - 1); Post := copy(SynEditSQL.Lines[SynEditSQL.CaretY - 1], SynEditSQL.CaretX, Length(SynEditSQL.Lines[SynEditSQL.CaretY - 1])); SynEditSQL.BeginUndoBlock; SynEditSQL.Lines[SynEditSQL.CaretY - 1] := Pre + ListBoxTables.Items[ListBoxTables.ItemIndex] + Post; SynEditSQL.EndUndoBlock; SynEditSQL.CaretX := Length(SynEditSQL.Lines[SynEditSQL.CaretY - 1]) + 1; SynEditSQL.Modified := True; end;
Quid ?
Partager