|
Pochodzi od: żaden
Zadeklarowane w: be/app/Clipboard.h
Biblioteka: libbe.so
Alokacja: Konstruktor, na stosie lub użycie globalnego obiektu be_clipboard.
Streszczenie: więcej...
Obiekt BClipboard jest interfejsem do schowka, zasobu, który dostarcza systemowej usługi tymczasowego przechowywania danych. Schowki są identyfikowane przez nazwę; jeśli dwie aplikacje chcą odnosić się do tego samego schowka, każda z nich tworzy po prostu swój obiekt z taką samą nazwą:
/* Aplikacja A: Tworzy schowek nazwany "MyClipboard". */
BClipboard *appAclipboard = new BClipboard("MyClipboard");
/* Aplikacja B: Obiekt odnosi się do schowka już utworzonego przez Aplikację A. */
BClipboard *appBclipboard = new BClipboard("MyClipboard");
W praktyce, rzadko będziesz potrzebował konstruować swój własny obiekt BClipboard; zamiast tego użyj BClipboard, który jest tworzony dla Ciebie przez Twój obiekt BApplication. Ten obiekt, do którego odnosisz się poprzez zmienną globalną be_clipboard, udostępnia domyślny schowek systemowy. Dane, które zapisujesz do Twojego obiektu be_clipboard mogą być czytane z be_clipboard'ów innych aplikacji. Dla przykładu, operacje wytnij/kopiuj/wklej określone przez BTextView przesyłąją dane poprzez schowek systemowy.
![]()
Do udostępnienia schowka systemowego bez tworzenia obiektu BApplication, skonstruuj obiekt BClipboard z nazwą "system". Schowek systemowy jest pod kontrolą użytkownika - powinieneś tylko odczytywać lub zapisywać schowek systemowy jako bezpośredni wynik dziłań użytkownika. Jeśli tworzysz własne schowki nie nazywaj ich "system".
Do udostępnienia danych schowka wywołaj funkcje na obiekcie BMessage, który obiekt BClipboard Ci obsłuży (poprzez jego funkcję Data()). BMessage stosuje się do następujących konwencji:
- Wartość what nie jest używana.
- Dane są przechowywane w polu komunikatu. To pole powinno być typowane jako B_MIME_TYPE; typ MIME który opisuje dane do użycia jako nazwa pola które trzyma dane (dla przykładu popatrz na "Zapisywanie do Schowka").
- Jeśli BMessage zawiera wiecej niż jedno pol, każde pole powinno przedstawiać te same dane w różnym formacie. Dla przykładu, aplikacja StyledEdit zapisuje dane w swoim własnym formacie (w kolejności kodowania czcionki, kolorów itp.) a także zapisuje te dane jako prosty tekst ASCII (typ MIME "text/plain").
Poniżej zapisany przykład pokazuje jak zapisywać do schowka..
BMessage *clip = (BMessage *)NULL;
if (be_clipboard->Lock()1) {
be_clipboard->Clear()2;
if ((clip = be_clipboard->Data()3) {
clip->AddData("text/MyFormat", B_MIME_TYPE, myText, myLength)4;
clip->AddData("text/plain", B_MIME_TYPE, asciiText, asciiLength)4;
be_clipboard->Commit()5;
}
be_clipboard->Unlock()6;
}
1 Lock() Twój obiekt BClipboard. Ładuje ona dane ze schowka do Twojego lokalnego obiektu BMessage BClipboard'a i uniemożliwia innym wątkom w Twojej aplikacji dostęp do danych obiektu BClipboard. Zauważ, że blokowanie nie blokuje nakłądania danych schowka —inne aplikacje moga zmienić schowek dopóki masz swój obiekt zablokowany.
2 Przygotuj BClipboard do zapisywania przez wywołanie funckji Clear(). Czyści ona dane, które były załadowane ze schowka.
3 Wywołaj funkcję Data() aby uzyskać wskaźnik do obiektu BMessage BClipboard'a.
4 Zapisz dane przez wywołanie funkcji AddData() bezpośrednio na BMessage. W przykładzie zapisaliśmy dane w dwóch różnych formatach.
5 Wywołaj funkcję Commit() do skopiowania Twojego BMessage spowrotem do schowka. Jak tylko wywołasz Commit(), dane które dodałeś są widoczne dla innych klientów schowka.
6 Unlock() równoważy Lock(). Obiekt BClipboard może teraz być dostępny dla innych wątków w Twojej aplikacji.
Jeśli zadecydujesz, że nie chcesz umnieszczać swoich zmian, powinieneś wywołać funkcję Revert() przez odblokowaniem.
Pokażemy tutaj jak czytać proste napisy (string) ze schowka.
const char *text;
int32 textLen;
BMessage *clip = (BMessage *)NULL;
if (be_clipboard->Lock()1) {
if ((clip = be_clipboard->Data();
clip->FindData("text/plain", B_MIME_TYPE,
(const void **)&text, &textlen)2;
be_clipboard->Unlock()3;
}
1 Jak napisano, wzięliśmy w nawiasy operacje z Lock() i Unlock(). Pamiętaj, że Lock() załadowuje dane ze schowka do twojego obiektu. Zmiany, które są wykonane na schowku (przez inną aplikację) po wywołaniu Lock() nie będą tutaj widoczne.
2 W tym przykładzie wyszukaliśmy tylko jeden trudno kodowany format. W rzeczywistej aplikacji możesz mieć listę formatów, których możesz szukać.
3 Nie jest konieczne sprawdzanie danych schowka przed jego odblokowaniem. Wywołanie funckji FindData() może równie dobrze być przetworzone po wywołaniu Unlock().
Trwałość między uruchomieniami (systemu). Dane schowka nie są trwałe pomiędzy uruchomieniami — konstruktor dostarcza znacznik (flagę) trwałości ale nie jest to obecnie używane.Trwałość między uruchomieniami: Gdy masz utworzony schowek, schowek ten będzie istniał aż do restartu komputera. Przykładowo, powiedzmy że projektujesz aplikację, która tworzy schowek nazwany "MyClip": uruchamiasz aplikację, zapisujesz coś do"MyClip" i wtedy zamykasz aplikację. Schowek i dane, które zapisałeś do niego - zostaną, będą istnieć: jeśli ponownie uruchomisz swoją aplikację (lub inną aplikację, która wie o schowku "MyClip"), możesz odebrać dane przez przeczytanie ich ze schowka "MyClip".
![]() | BClipboard() |
BClipboard(const char *name, bool discard = false) Tworzy nowy obiekt BClipboard, który odnosi się do schowka name. Schowek jest tworzony przez samego siebie jeżeli schowek o tej nazwie jeszcze nie istnieje.
Flaga discard obecnie nie jest używana.
![]() | ~BClipboard() |
virtual ~BClipboard() Niszczy obiekt BClipboard. Sam schowek i dane, które on zawiera nie są naruszane przy destrukcji obiektu.
![]() | Clear() , Commit() , Revert() |
status_t Clear(void) status_t Commit(void) status_t Revert(void) Te funkcje są używane gdy zapisujesz dane do schowka. Clear() przygotowuje Twój schowek do zapisywania. Wywołuj Clear() dopiero przed dodaniem nowych danych do Twojego komunikatu schowka. Commit() kopiuje Twoje dane obiektu BClipboard do schowka. Aby zobaczyć przykłady tych funkcji popatrz do "Zapisywanie do Schowka".
Revert() odświeża dane komunikatu obiektu BClipboard przez załadowanie ich ze schowka. Ta funkcja jest dostarczona dla (rzadkiego) przykadku gdzie będziesz zmieniał Twoje dane komunikatu obiektu BClipboard a następnie decydował o cofnięciu tej zmiany. W tym przypadku, powinieneś wywołać Revert() (zamiast Commit()). Jeśli się nie wycofasz Twój komunikat schowka będzie zawierał Twoje niechciane zmiany, również jeśli odblokujesz i ponownie zablokujesz obiekt.
Wszystkie te funkcje zwracają B_ERROR jeśli obiekt BClipboard nie jest zablokowany i B_OK w przeciwnym wypadku.
![]() | Commit() patrz Clear() |
![]() | Data() |
BMessage *Data(void) const Zwraca obiekt BMessage, który przechowuje dane obiektu BClipboard lub NULL jeśli BClipboard nie jest zablokowany. Spodziewasz się czytać lub zapisywać BMessage bezpośrednio; jednak możesz gonie uwolnić lub wysłać go jak zwykły BMessage. Jeśli zmienisz BMessage i chcesz zapisać go do schowka, musisz wywołać Commit() po dokonaniu zmian.
Aby zdobyć więcej informacji popatrz do "Komunikat Schowka".
![]() | DataSource() |
BMessenger DataSource(void) const Zwraca obiekt BMessenger, który jest adresatem obiektu BApplication aplikacji, która ostatnio podała dane do schowka. Obiekt BClipboard nie potrzebuje być blokowany.
![]() | LocalCount(), SystemCount() |
uint32 LocalCount(void) const uint32 SystemCount(void) const Te funkcje zwracają licznik (liczbę elementów) schowka. LocalCount() używa podręcznego licznika, podczas gdy SystemCount() odpowiada do Application Server'a o bardziej dokładnym liczniku systemowym.
![]() | Lock(), Unlock(), IsLocked() |
bool Lock(void) void Unlock(void) bool IsLocked(void) Lock() pobiera dane ze schowka do Twojego obiektu BClipboard i blokuje ten obiekt więc inne wątki w twojej aplikacji nie moga go używać. Musisz wywołać Lock() przed czytaniem lub zapisywaniem BClipboard. Funkcja Lock() jest blokowana, jeśli obiekt już jest zablokowany. Zwraca ona true jeśli blokada była ustawiona i false jeśli obiekt BClipboard był usunięty w chwili gdy funkcja Lock() była zablokowana.
![]()
Nie jest to sposób na powiedzenie funkcji Lock() zrobieniu o przerwy. Unlock() odblokowuje obiekt żeby inne wątki w Twojej aplikacji mogły go używać.
IsLocked() mało potrzebny, żeby był udokumentowany.
![]() | Name() |
const char *Name(void) const Zwraca nazwę schowka. Obiekt nie potrzebuje być blokowany.
![]() | Revert() patrz Clear() |
![]() | StartWatching() , StopWatching() |
status_t StartWatching(BMessenger target) status_t StopWatching(BMessenger target) Jeśli chcesz być alarmowany gdy schowej jest zmieniany, wywołaj StartWatching(), prześlij obiekt BMessenger aby był adresatem zawiadomienia. Gdy schowek jest zmieniany, komunikat B_CLIPBOARD_CHANGED będzie wysłany do adresata.
StopWatching() zatrzymuje monitorowanie zmian w schowku.
ZWRACANE KODY
- B_OK. Brak błędu.
- Inne błędy. Dajemy Ci ten pomysł.
![]() | StopWatching() patrz StartWatching() |
![]() | LocalCount() |
![]() | Unlock() patrz Lock() |
|
Copyright © 2000 Be, Inc. Wszelkie prawa zastrzeżone.