Avatar billede hr__hallandsen Nybegynder
30. juni 2008 - 22:36 Der er 13 kommentarer og
2 løsninger

Detektering af kopiering/indsætning TEdit

Har en TEdit, hvor jeg gerne skal kunne detektere, når brugeren kopierer/indsætter noget (både med ctrl+c/v og højreklik+copy/paste).

Kender nogen en løsning på dette?

{ Personal declarations }

// THallandsen1 = class(THallandsen)
// end;
Avatar billede kammeyer Nybegynder
30. juni 2008 - 22:45 #1
Har du prøvet med TEdit's onChange handler? Den burde gøre det du ønsker.
Avatar billede hr__hallandsen Nybegynder
30. juni 2008 - 22:55 #2
Ja, men jeg skal gerne kunne kende forskel på indsæt fra clipboard/tastatur-

Ideen er, at jeg har en Edit med ES_NUMBER (tillader kun indtastning af 0-9).

Pga. en fejl i Windows kan man imidlertid godt kopiere fx et h ind fra clipboardet.

Jeg skal så gerne kunne fange paste-eventen og hvis indholdet af clipboardet ikke er et tal, annullere den inden TEdit ændres (hvorfor onchange ikke dur, da den udføres efter TEdit er ændret).

Jeg har fundet ud af at ctrl+c svarer til tegnet #22, hvorfor jeg i KeyPress
har skrevet:

if Key = #22 then
  ...
    Key = #0;

Dette virker imidlertid kun, hvis man indsætter vha. ctrl+v, ikke ved hjælp af højreklik, og det er dér problemet er.

/Hallandsen
Avatar billede kammeyer Nybegynder
30. juni 2008 - 22:58 #3
Måske lave din egen popup menu og styre "paste" den vej? Så kan du tilgå klippebordet manuelt og sortere fæle ting fra.
Avatar billede hr__hallandsen Nybegynder
30. juni 2008 - 23:04 #4
Hmm ... en lidt "dirty" løsning. Popupmenuens sprog/layout skulle jo gerne følge operativsystemets ...

/Hallandsen
Avatar billede kroning Nybegynder
01. juli 2008 - 10:18 #5
Prøv at kikke på:
SetClipboardViewer
ChangeClipboardChain
WM_DRAWCLIPBOARD
WM_CHANGECBCHAIN
Avatar billede hr__hallandsen Nybegynder
01. juli 2008 - 12:37 #6
^ Kom lige i tanke om noget andet.

Hvis man nu i TEdit.OnContextPopup fandt en ikkegyldig værdi i Clipboard.AsText, kunne man måske disable Sæt ind-muligheden i genvejsmenuen, men ved ikke lige, hvordan det skal gøres?

/Hallandsen
Avatar billede kroning Nybegynder
01. juli 2008 - 12:55 #7
Glem min kommentar det er jo til når man sætter text ind i clipboard og ikke når man trækker det ud. Jeg har brugt det til at få et program til automatisk at hente tekst fra clipboard når der kopieres text ind i clipboard.
Avatar billede kroning Nybegynder
01. juli 2008 - 12:57 #8
Men prøv at kikke på WM_PASTE

An application sends a WM_PASTE message to an edit control or combo box to copy the current content of the clipboard to the edit control at the current caret position. Data is inserted only if the clipboard contains data in CF_TEXT format.
Avatar billede hrc Mester
01. juli 2008 - 23:16 #9
Denne her er lidt lo-tech, men måske kan du bruge den:
  http://delphi.about.com/od/delphitips2007/qt/disable_ctrl_v.htm

Har set en mere "professionel" løsning så jeg søger videre.
Avatar billede hrc Mester
01. juli 2008 - 23:17 #10
Der var selvfølgelig også dette forslag:
  http://www.swissdelphicenter.ch/torry/showcode.php?id=1403
Avatar billede hr__hallandsen Nybegynder
02. juli 2008 - 17:53 #11
Både WM_PASTE og http://www.swissdelphicenter.ch/torry/showcode.php?id=1403 ser ud til at kunne bruges, men har nogen en ide om, hvordan man kan disable "Sæt ind"/"Paste" i TEdit's genvejsmenu?

(

Skal vel gøres i OnContextPopup efter
if Clipboard.HasFormat(CF_TEXT) then
  if TryStrToInt(Clipboard.AsText, J) then
    ShowMessage('Et eller andet stykke kode til at enable Paste i contextmenuen')
  else
    ShowMessage('Et eller andet stykke kode til at disable Paste i contextmenuen');

)

REM // ' # ; <!-- /* (* { HALLANDSEN } *) */ -->
Avatar billede hrc Mester
03. juli 2008 - 07:45 #12
Du kan evt. bruge Application.OnMessage og undertrykke den der, men det er alt andet end kønt og man kan virkelig sløve programmet i den procedure. Ved ikke lige hvordan man fanger den på komponentniveau.
Avatar billede hr__hallandsen Nybegynder
04. juli 2008 - 14:51 #13
Lukker dette spørgsmål og starter et nyt om fjernelse af Paste i TEdit's genvejsmenu.

kroning, hrc < Læg et svar

/Hallandsen
Avatar billede kroning Nybegynder
04. juli 2008 - 14:57 #14
.
Avatar billede hrc Mester
05. juli 2008 - 07:04 #15
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester