Oui mais je souhaite insérer après le curseur
On progresse
L'ajout de la ligne; SetForegroundWindow(GetAncestor(Handle, GA_ROOT)); permet de fonctioner avec Notepad.
En revanche ça ne fonctionne pas avec Word
Bonjour,
Mon code fonctionne avec Notepad, mais pas avec Word ! Je vais essayer d'y remédier
l'inconvénient de mon code, c'est qu'il faut appuyer sur le bouton de la souris, faire un drag vers l'éditeur et relacher le bouton sur l'éditeur. Mais on doit pouvoir utiliser la méthode initiale ? (que je ne connais pas)
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Comme ça a été mentionné par rMist2024, le mieux est que la fenêtre ne s'active jamais.
Mais maintenant qu'on en sait un peu plus, il apparait que tu remplis toi-même le presse-papiers (depuis la DB) pour le coller ensuite. C'est parfaitement inutile, tu peux directement envoyer le texte par SendInput (accessoirement qui permettrait aussi de synthétiser ctrl+v).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 type TForm1 = class(TForm) protected Procedure CreateParams(var params: TCreateparams); override; end; procedure TForm1.CreateParams(var params: TCreateparams); begin inherited; params.exstyle := params.exstyle or WS_EX_NOACTIVATE; end;
Au final :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); protected Procedure CreateParams(var params: TCreateparams); override; public procedure SendText(const aText :string); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin SendText('Hello World!'#13); end; procedure TForm1.CreateParams(var params: TCreateparams); begin inherited; params.exstyle := params.exstyle or WS_EX_NOACTIVATE; end; procedure TForm1.SendText(const aText: string); var Inputs :array of TInput; begin SetLength(Inputs, aText.Length *2); ZeroMemory(Inputs, SizeOf(TInput) *Length(Inputs)); var i := 0; for var c in aText do begin Inputs[i].Itype := INPUT_KEYBOARD; Inputs[i].ki.wScan := word(c); Inputs[i].ki.dwFlags := KEYEVENTF_UNICODE; inc(i); Inputs[i].Itype := INPUT_KEYBOARD; Inputs[i].ki.wScan := word(c); Inputs[i].ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP; inc(i); end; SendInput(Length(Inputs), Inputs[0], SizeOf(TInput)); end;
Merci à tous pour vos contributions.
Pour répondre sur le "copier" du DBRichEdit dans le presse papier c'est simplement que je souhaite conserver la mise en forme.
Si je n'envoie que tu texte elle sera perdue.
Je vais déjà tester vos propositions ce soir (j'ai un autre métier)
Bien cordialement
Bonsoir
Un grand merci à tous les contributeurs sur ce sujet. Le code d'Andnotor fonctionne parfaitement.
Reste un mystère, pourquoi ne peut on coller simplement du texte dans Word?
Pour un autre jour.....
Bonjour,
j'ai modifié mon code pour faire comme tu le souhaitais avec AppDeactivate. ça marche bien avec Notepad, mais effectivement pas avec Word.
Je n'ai pas non plus compris pourquoi.
C'est une variante du code d'Andornot.
PressePapier.zip
A+
Charly
Mon site : http://lapaille.byethost24.com/index.htm
Partager