Bonjour,
je travaille sur les glissers/collers et je récupère le contenu du Clipboard en FireMonkey XE7
En Windows, je rencontre un problème lorsque la source du glisser/copier est une sélection dans Notepad++. Enfin, c'est avec lui que j'ai mis ce problème en évidence.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TForm1.Panel1DragOver(Sender: TObject; const Data: TDragObject; const Point: TPointF; var Operation: TDragOperation); begin Showmessage(IntToStr(length(data.Data.ToString))); //ou Data.Data.DataSize if not(Data.Data.IsEmpty) then Operation := TDragOperation.Copy; end;
Si le document source (la sélection) est encodée en UTF8 (avec ou sans BOM), tout fonctionne bien.
Si le document est encodé en ANSI, Data.Data.IsEmpty est vrai alors que length(data.Data.ToString) ou data.Data.DataSize n'est pas nulle. Si j'enlève la condition, je vois apparaître dans mon Label : (empty).
Je suppose qu'il s'agit d'un problème d'encodage.
L'idéal serait de détecter l'encodage de data.data (RTTI.Tvalue)... Ensuite est-il changeable et affectable... Cela suppose de modifier le contenu du Clipboard (d'affecter un nouvel encodage à la chaîne qu'il contient). J'ai l'impression de refaire du Lazarus.... C'est l'objet de ma question.
Pour parer à tout problème, j'ai affecté à mon TPanel un TPopupMenu Copier/Coller. Si je copie le texte ANSI dans le ClipBoard et le colle ensuite dans le Label, cela fonctionne correctement....et ce programme (glisser/coller) écrit initialement en Qt ne pose pas ce problème en Windows avec NotePad++.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.mnPasteClick(Sender: TObject); var Clipboard: IFMXClipboardService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, IInterface(Clipboard)) then Label1.Text := Clipboard.GetClipboard.ToString; end;
Partager