PDA

Visualizza la versione completa : [DELPHI] Come usare la ClipBoard


shake84
23-05-2006, 18:48
Che dire ho provato a cercare in giro qualche esempio, purtroppo però non sono riuscito a trovare nulla :dhò:

Comunque sia quello che mi interessava sapere è questo:

Avendo ad esempio l'indirizzo di un file, come faccio ad inserirlo nella ClipBoard per poi farlo incollare in automatico in un'applicazione specifica es. in word?


Ps.
Stavo provando a fare anche qualche esperimento con il Drag and Drop, per aggirare l'ostacolo.. Solo che per ora riesco solo a trascinare il mio file all'interno della mia applicazione, ma quando si tratta di riportarlo ad esempio su word non succede nulla :dottò:

alka
23-05-2006, 19:07
Inserire qualcosa negli Appunti (Clipboard) è una cosa, pilotarne il comando di "Incolla" riferito ad un'altra applicazione è un altro.

Delphi mette a disposizione un oggetto (Clipboard) per la gestione degli Appunti; lo puoi utilizzare inserendo la unit Clipbrd nella clausola uses.

Questo oggetto ti fornisce metodi (documentati) e proprietà in grado di copiare e ottenere dagli appunti qualsiasi tipo di risorsa, con membri semplificati per quanto riguarda il testo.

Prova a dare un'occhiata, aiutandoti con l'indispensabile Guida in linea per maggiori informazioni.

Ciao! :ciauz:

shake84
24-05-2006, 14:07
Originariamente inviato da alka
Delphi mette a disposizione un oggetto (Clipboard) per la gestione degli Appunti; lo puoi utilizzare inserendo la unit Clipbrd nella clausola uses.


Ti ringrazio, in effetti uno dei miei problemi principali era che non conoscevo la unit, e quindi non riuscivo a far partire gli esempi della Guida in Linea...

Comunque sia ho fatto qualche prova, e ora riesco a scrivere e a leggere dalla Clipboard testi ed immagini...

Per la copia di file purtroppo invece sono in alto mare..

Tra le varie funzioni ho notato GetComponent e SetComponent, per caso con queste sarei in grado, di inserire un determinato file nella Clipboard o di tirarlo fuori?
Se si come? :master:

Per il discorso di pilotare il comando "Incolla" in un'altra applicazione, credo che proverò ad indirizzarmi verso il Drag and Drop, lasciando così la gestione all'applicazione finale (almeno credo)

alka
24-05-2006, 15:01
Originariamente inviato da shake84
Per la copia di file purtroppo invece sono in alto mare..

Non esiste la copia - in senso stretto - di file, ma solo la copia di una risorsa di un determinato tipo.


Originariamente inviato da shake84
Tra le varie funzioni ho notato GetComponent e SetComponent, per caso con queste sarei in grado, di inserire un determinato file nella Clipboard o di tirarlo fuori?
Se si come? :master:
No, se non ricordo male quei metodi consentono di copiare e incollare componenti, così come avviene durante la progettazione del form.

shake84
24-05-2006, 18:18
Originariamente inviato da alka
Non esiste la copia - in senso stretto - di file, ma solo la copia di una risorsa di un determinato tipo.


Mh.. :master:

Quindi non esiste qualcosa di generico che mi permetta di gestire il contenuto della ClipBoard in modo diretto?

Ad esempio un Get e un Set, con cui prelevare o inserire un qualiasi oggetto supportato dalla ClipBoard?

Per spiegarmi meglio quello che sto cercando di fare è qualcosa del genere...

L'utente se ne va in giro per il proprio PC, e copia qualche cosa: file, testo, immagini o qualsiasi altra cosa copiabile.

A questo punto entra nella mia applicazione e scarica li il contenuto della ClipBoard..

Successivamente potrà fare quello che vuole, copiarsi altra roba e così via, però tornando sulla mia applicazione deve poter recuperare quello che aveva precedentemente scaricato..

E' giusto il mio approcio a questo tipo di problema? Ovvero prendo tutto quello che c'è nella ClipBoard senza curarmi di cosa sia, me lo salvo da qualche parte e quando voglio lo rimetto dentro?

shake84
25-05-2006, 23:17
:( Nessuno ha mai smanettato con le ClipBoard..

Ho provato a consultare la guida in linea e a cercare un po' per la rete ma non ho trovato nulla di quello che fa al caso mio :bhò:

Ho trovato solo come fare, se quello che ho nella ClipBoard è del Testo, ma niente che riguardi qualcosa di generale..



function SaveClipboardTextDataToFile( sFileTo : string ) : boolean;
var
ps1,
ps2 : PChar;
dwLen : DWord;
tf : TextFile;
hData : THandle;
begin
Result := False;
with Clipboard do
begin
try
Open;
if( HasFormat( CF_TEXT ) ) then
begin
hData := GetClipboardData( CF_TEXT );
ps1 := GlobalLock( hData );
dwLen := GlobalSize( hData );
ps2 := StrAlloc( 1 + dwLen );
StrLCopy( ps2, ps1, dwLen );
GlobalUnlock( hData );
AssignFile( tf, sFileTo );
ReWrite( tf );
Write( tf, ps2 );
CloseFile( tf );
StrDispose( ps2 );
Result := True;
end;
finally
Close;
end;
end;
end;


Ormai non so più dove cercare..
Possibile che debba fare una funzione per ogni tipo di file? :master:

alka
25-05-2006, 23:26
I formati che possono essere copiati nella clipboard sono in numero limitato: ve ne sono alcuni che fanno riferimento a risorse standard, come icone, cursori, bitmap, testo e affini; poi, vi sono formati "custom" che sono raggruppati tutti all'interno di un formato di tipo "raw", cioè un insieme di dati binari che possono essere copiati e incollati e che devono essere trattati all'occorrenza come si deve in base al programma che si trova ad accettarli.

Ho trovato un tip che consente di aggianciarsi alla clipboard per ricevere notifiche sui cambiamenti, forse potrebbe esserti utile. Leggi qui (http://www.swissdelphicenter.ch/torry/showcode.php?id=677).

Nello stesso sito vi sono altri tip ricercabili con la parola chiave "clipboard".

Ciao! :ciauz:

shake84
26-05-2006, 10:26
Originariamente inviato da alka
I formati che possono essere copiati nella clipboard sono in numero limitato: ve ne sono alcuni che fanno riferimento a risorse standard, come icone, cursori, bitmap, testo e affini; poi, vi sono formati "custom" che sono raggruppati tutti all'interno di un formato di tipo "raw", cioè un insieme di dati binari che possono essere copiati e incollati e che devono essere trattati all'occorrenza come si deve in base al programma che si trova ad accettarli.


Ti ringrazio davvero, le informazioni che mi stai dando mi son davvero utili..

Il formato di tipo RAW , sembrerebbe essere esattamente quello che fa al caso mio, anche perchè non mi interessa sapere cosa ci sia nella ClipBoard, ma vorrai solo farne una copia su file, da ricaricare quando voglio..

Avrei solo un problemino..
Non riesco a trovare nulla a riguardo sulla Guida in Linea di Delphi, l'unica cosa era inerente ai database :bhò:

Per caso hai qualche link o esempio?

alka
26-05-2006, 10:28
Originariamente inviato da shake84
Per caso hai qualche link o esempio?
Te l'ho già dato nel messaggio precedente... :stordita:

shake84
26-05-2006, 10:40
Originariamente inviato da alka
Te l'ho già dato nel messaggio precedente... :stordita:

:master: Li ho guardati ma non ho trovato nulla inerente a RAW..
Ora provo a ricontrollare..

Loading