Podstawowe operacje na schowku (wytnij/kopiuj/wklej) w Delphi
Korzystanie z obiektu TClipboard
CC0 Domena publiczna
http://pxhere.com/en/photo/860609
Schowek systemu Windows reprezentuje kontener dla dowolnego tekstu lub grafiki, które są wycinane, kopiowane lub wklejane z lub do aplikacji. Ten artykuł pokaże Ci, jak używać obiektu TClipboard do implementacji funkcji wytnij-kopiuj-wklej w twojej aplikacji Delphi.
Schowek w ogóle
Jak zapewne wiesz, schowek może przechowywać tylko jeden fragment tego samego rodzaju danych do jednoczesnego wycinania, kopiowania i wklejania. Jeśli wysyłamy nowe informacje w tym samym formacie do schowka, usuwamy to, co było wcześniej, ale zawartość schowka pozostaje w schowku nawet po wklejeniu tej zawartości do innego programu.
Schowek
Aby korzystać ze Schowka Windows w naszych aplikacjach, musimy dodać Jednostka ClipBrd do klauzuli uses projektu, z wyjątkiem sytuacji, gdy ograniczymy wycinanie, kopiowanie i wklejanie do komponentów już posiadających wbudowaną obsługę metod ze schowka. Te komponenty to TEdit, TMemo, TOLEContainer, TDDEServerItem, TDBEdit, TDBImage i TDBMemo.
Jednostka ClipBrd automatycznie reprezentuje obiekt TClipboard o nazwie Clipboard. Użyjemy Wytnij do schowka , Skopiuj do schowka , Wklej ze schowka , Jasne oraz Ma format metody radzenia sobie z operacjami schowka i manipulacją tekstem/grafiką.
Wyślij i pobierz tekst
W celu przesłania tekstu do schowka wykorzystywana jest właściwość AsText obiektu Clipboard. Jeśli chcemy na przykład wysłać strunowy informacje zawarte w zmiennej SomeStringData do Schowka (usuwając cały tekst), użyjemy następującego kodu:
|_+_|Aby pobrać informacje tekstowe ze schowka, użyjemy
|_+_|Uwaga: jeśli chcemy tylko skopiować tekst z, powiedzmy, komponentu Edit do schowka, nie musimy dołączać jednostki ClipBrd do klauzuli uses. Metoda CopyToClipboard TEdit kopiuje zaznaczony tekst w kontrolce edycji do Schowka w formacie CF_TEXT.
|_+_|
Obrazy ze schowka
Aby pobrać obrazy graficzne ze schowka, Delphi musi wiedzieć, jaki typ obrazu jest tam przechowywany. Podobnie, aby przenieść obrazy do schowka, aplikacja musi powiedzieć schowkowi, jakiego rodzaju grafikę wysyła. Poniżej przedstawiono niektóre z możliwych wartości parametru Format; istnieje wiele innych formatów schowka dostarczanych przez system Windows.
Metoda HasFormat zwraca True, jeśli obraz w schowku ma prawidłowy format:
|_+_|
Użyj metody Assign, aby wysłać (przypisać) obraz do schowka. Na przykład poniższy kod kopiuje bitmapę z obiektu bitmapowego o nazwie MyBitmap do Schowka:
|_+_|Ogólnie MyBitmap to obiekt typu TGraphics, TBitmap, TMetafile lub TPicture.
Aby pobrać obrazek ze schowka musimy: zweryfikować format aktualnej zawartości schowka i użyć metody Assign obiektu docelowego:
|_+_|Więcej kontroli schowka
Schowek przechowuje informacje w wielu formatach, dzięki czemu możemy przesyłać dane między aplikacjami przy użyciu różnych formatów. Czytając informacje ze schowka za pomocą klasy TClipboard Delphi, jesteśmy ograniczeni do standardowych formatów schowka: tekstu, obrazów i metaplików.
Załóżmy, że pracujesz między dwoma różnymi aplikacjami Delphi; jak zdefiniowałbyś niestandardowy format schowka, aby wysyłać i odbierać dane między tymi dwoma programami? Na potrzeby eksploracji załóżmy, że próbujesz zakodować pastępozycja w menu. Chcesz, aby była wyłączona, gdy w schowku nie ma tekstu (jako instancja).
Ponieważ cały proces ze schowkiem odbywa się za kulisami, nie ma metody klasy TClipboard, która poinformuje Cię, gdy nastąpi jakaś zmiana w zawartości schowka. Chodzi o to, aby podłączyć system powiadomień w schowku, aby móc uzyskać dostęp do zdarzeń i reagować na nie, gdy schowek się zmieni.
Aby cieszyć się większą elastycznością i funkcjonalnością, konieczne jest radzenie sobie z powiadomieniami o zmianach w schowku i niestandardowymi formatami schowka - słuchanie schowka.