Leikepöydän käyttö.net ja QT Juha Järvensivu juha.jarvensivu@tut.fi 2008
Sisältö Leikepöydän toiminta.net toteutus + esimerkki QT - toteutus
Yleistä
Leikepöytä (Clipboard) Keino siirtää tietoa nopeasti prosessien välillä tai ohjelman sisällä Leikepöytä Copy Paste
Toiminnot Kopiointi (Copy) Kopioi valitun objektin leikepöydälle Leikkaaminen (Cut) Kopioi valitun objektin leikepöydälle ja poistaa alkuperäisen Liittäminen (Paste) Kopioi leikepöydän sisällön valittuun paikkaan
Leikepöydän käyttö Leikepöydälle voi asettaa saman datan useana eri tyyppinä Esim Sovellus itse käsittelee Data-objekteja, mutta Paint-sovellus käsittelee Bitmaptyyppisiä olioita.
Leikepöydän käyttö Datatyypit Data Kuvaa Ääntä Tekstiä
Leikepöydän käyttö Leikepöytä Bitmap Paste Bitmap Data Data Copy Paste
.NET
Clipboard Namespace: System.Windows.Forms Assembly: system.windows.forms.dll Luokka, jonka avulla voidaan asettaa ja lukea tietoa leikepöydältä public sealed class Clipboard
Clipboard [S] bool ContainsData [S] bool ContainsAudio [S] bool ContainsImage [S] bool ContainsText [S] Get/SetData [S] Get/SetAudio [S] Get/SetImage [S] Get/SetText [S] Get/SetDataObject
DataObject Mahdollistaa datan asettamisen leikepöydälle useassa formaatissa DataObject o = new DataObject(); ArrayList data = new ArrayList(); Bitmap bm = new Bitmap(10,10); o.setdata("data", data); o.setdata(dataformats.bitmap, bm);
SetData public static void SetData ( string format, Object data ) Parameters format The format of the data to set. See DataFormats for predefined formats. data An Object representing the data to add.
Bitmap Html MetaFilePict PenData Text WaveAudio UnicodeText Jne DataFormats
Datan asettaminen leikepöydälle Työpöydälle asetettava objekti pitää olla sarjallistuva Serializable public static void SetDataObject ( Object data, bool copy )
Datan asettaminen leikepöydälle private void Copy () { DataObject o = new DataObject(); Bitmap bm = GetBitmap(); ArrayList data = GetData(); o.setdata("data", a); o.setdata(dataformats.bitmap, copytoimage()); } Clipboard.SetDataObject(o);
Datan lukeminen leikepöydältä private void Paste () { IDataObject o = Clipboard.GetDataObject(); ArrayList a = (ArrayList)o.GetData("data"); }
Esimerkki
QT
QClipboard QT:luokka windowsin leikepöydän käsittelyyn settext() setpixmap() setmimedata() QClipboard *clipboard = QApplication::clipboard();
QMimeData Voi sisältää saman data useassa eri formaatissa QStringList formats(); // list of mime types Datan kysyminen binäärimuodossa QByteArray data(qstring mimetype);
Esimerkki // Datan kirjoittaminen QByteArray itemdata; QMimeData *mimedata = new QMimeData; mimedata->setdata("image/x-puzzle-piece", itemdata); // Datan lukeminen QMimeData *mimedata if (mimedata->hasformat("image/x-puzzle-piece") { QByteArray piecedata = mimedata->data("image/xpuzzle-piece"); }
MIME data Multipurpose Internet Mail Extensions Standardi joka kertoo sisällön tiedostonmuodon text/plain; charset=iso-8859-1 application/octet-stream
Clipboard mode QClipboard::Clipboard QClipboard::Selection (X11) QClipboard::FindBuffer (Mac OS)
Clipboard - signaalit void changed ( QClipboard::Mode mode ) Kutsutaan kun data leikepöydällä muuttuu void datachanged () Kutsutaan kun data leikepöydällä muuttuu clipboard changes made by other applications will only be detected when the application is activated. void findbufferchanged () Kutsutaan kun find buffer muuttuu (vain Mac OS) void selectionchanged () Ei tukea windows tai MAC ympäristöissä
Lähteitä Clipboard http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemwindowsformsclipboardclasstopic.asp Placing data on clipboard http://msdn.microsoft.com/library/default.asp?url=/library/enus/vbcon/html/vbtskplacingdataonclipboard.asp Retrieve information from clipboard http://msdn.microsoft.com/library/default.asp?url=/library/enus/vbcon/html/vbtskretrievinginformationfromclipboard.asp MIME http://fi.wikipedia.org/wiki/mime-tyyppi http://www.iana.org/assignments/media-types/