Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obsługa akcji cz. 2
Konnekt | Forum > Developerzy > Tworzenie wtyczek
KoSiarzPL
1. Jak pobrać właściciela (wtyczkę) akcji.
2. Jak pobrać ikonkę wtyczki/akcji.
3. Co mi zwracają UIGroupHandle i UIActionHandle. Czym są te uchwyty bo nie rozumiem i co mogę z nimi zrobić.
4. Czy istnieje sposób zmiany pozycji akcji bez jej niszczenia i ponownego utworzenia?
Olórin
CODE
ICMessage(IMI_ACTION_GETOWNER , (int)&nfo.act);

2. UIActionGet, z maską UIAIM_P1, w p1 będziesz miał ikonę akcji
3. UIGroupHandle(sUIAction(0,IMIG_MSGWND,cnt)) zwróci HWND okna rozmowy, sądze że UIActionHandle będzie zwracało HWND poszczególnych kontrolek w konfigu
4. Raczej nie...
KoSiarzPL
QUOTE(Olórin @ 2.01.2006 - 22:55)
4. Raczej nie...
*


Czy w takim razie da się zmienić właściciela (wtyczkę) akcji? Pewnie też nie bo w sdk żadnego SETOWNER nie ma :/
KoSiarzPL
6. Jak przechwycic komunikaty akcji (ACTN_) innych wtyczek.
Olórin
Subclassowanie akcji smile.gif W SDK jest przykład
KoSiarzPL
O matko! Będe musiał subklasować wszystkie akcje konnekta?
KoSiarzPL
W związku z pytaniem pierwszym. Mając ID wtyczki mogę coś z nim zrobić? Pobrać nazwę wtyczki, wartość NET itp? Jeśli nie to jak pobrać nazwę konkretnej wtyczki?
hao
Nie, imho subclassowanie wszystkich akcji w K to beznadziejny pomysł... Powinieneś poszukać jakiegoś innego rozwiązania... Co chcesz zrobić?

Mając ID wtyczki możesz wysłać do niego komunikat (IMessageDirect), a jak wiadomo, każda wtyczka musi obsługiwać komunikaty IM_PLUG_*
KoSiarzPL
A jak pobrać ikonki wtyczki (16x16 oraz 32x32)?
Aule
Pobrać? Możesz użyć ich identyfikatora, jeżeli chcesz wyświetlić w innym miejscu. Identyfikator ikonki jest zazwyczaj w parametrze p1 akcji.
Olórin
Innymi słowy nie istnieje coś takiego jak ikona wtyczki smile.gif
KoSiarzPL
W jaki sposób mogę wychwycic moment gdy wszystkie wtyczki juz wystartowały? Cce miec pewnosc ze wszystkie utworzyly juz swoje akcje.
Jedyny sposob na ten moment to ustawienie mojej wtyczki na samym koncu ladowanych wtyczek i wykonac to co chce w momencie przechwycenia komunikatuu IM_PLUGIN_START.
Olórin
IM_ALLPLUGSINITIALIZED czy coś pod ten deseń...
KoSiarzPL
Tylko to "chyba" wysyła powiadomienie gdy do wszystkich wtyczek roześle IM_PLUGINS_INIT. Tak mi się wydaje bo tego już próbowałem i wtedy żadnych akcji nie było utworzonych. Wszystkie wtyczki natomiast tworzą swoje akcjie trochę poźniej.
Olórin
IStart jest juży wywoływane po IPrepare (chyba tongue.gif), ale jak do tego dodać najniższy priorytet wtyczki, wtedy wszystko na pewno wyłapiesz wink.gif
hao
Wtyczki inicjalizują akcje w IM_PREPARE - więc w IM_START wszystkie powinny być już zarejestrowane...
KoSiarzPL
Jak dynamicznie wyświetlać w kontrolce IMAGE ikonkę akcji? Próbowałem już na wiele sposobów i nic.
Tak jak Olórin pisał korzystam z p1 struktury suiacioninfo. Tylko pewnie trzeba jakoś to sformatować.
Na koniec robię UIActionSetText() dla kontrolki.
Aule
Mi się wydaje, że chyba ten tekst musi być w formacie reg://lista/id.typ lista = IML16|IML32(wyciągnięte z sdk, nie weryfikowałem). Jako typ wpisz ico chyba wink.gif
KoSiarzPL
Ech zapomnialem o dodaniu rozszerzenia "ico". Dzieki.
KoSiarzPL
To jeszcze jedna sprawa z kontrolką IMAGE. Da się jej przypisać tip? Próbowałem tak:
CODE
string txt = "reg://IML16/" + wartosc_id + ".ico" CFGTIP "tiiiip";

CODE
string txt = "reg://IML16/" + wartosc_id + ".ico";
txt += "\x1A";
txt += "tip=tiiip";

CODE
string txt = "reg://IML16/" + wartosc_id + ".ico";
txt = SetActParam(txt, AP_TIPRICH, "tiiiip");
txt = SetActParam(txt, AP_TIPRICH_WIDTH, "300");

CODE
string txt = "reg://IML16/" + wartosc_id + ".ico";
txt = SetActParam(txt, AP_TIP, "tiiiip");
txt = SetActParam(txt, AP_TIP_WIDTH, "300");


UIActionSetText( cfg_main2, IMIB_CFG|cfg_wtyczka_ico, txt.c_str() );

Ikonka jest ale tipa nadal nie ma.
hao
O ile pamiętam obrazkom tipów przydzielać nie można...

Co do samego ustawiania - dwie ostatnie metody są najlepsze.
Ew. txt = "link" AP_TIP "blebleble";

Możesz zawsze koło obrazka wstawić przycisk helpa.
KoSiarzPL
Juz jakoś sobie z tym poradizłam. Troszke szkoda że obrazek nie może mić tipa ale coż. Problem tylko w tym że nie można tego tipa dynamicznie zmieniać jak również ukrywać akcji.
KoSiarzPL
Nowy problem sad.gif

Jak sprawdzić czy dany przycisk na toolbarze okna rozmowy jest wciśnięty?

Jeśli zrobię tak:
CODE
int status = UIActionGetStatus( msg->act );
lub
CODE
sUIActionInfo nfo( msg->act );
nfo.mask = UIAIM_ALL;
nfo.txt = new char [100];
nfo.txtSize = 99;
UIActionGet( nfo );

status = nfo.status;

to zawsze status == 0 :/
Oczywiście te kawałki kodu są wywoływane w bloku
CODE
if( msg->code == ACTN_ACTION )

[edit]
Dodam tylko, że jeśli zrobię:
CODE
UIActionSetStatus( msg->act, -1, ACTS_CHECKED );
To przycisk się zaznaczy. Czyż to nie dziwne?
Olórin
Wszystko się zgadza odnośnie dopisku -1 (0xffffffff) ustawia wszystkie flagi zawarte w masce....
bulanh
Nie wiem czy to będzie działać na przyciski, ale z checkbox'ami się świetnie spisuje:

CODE

int GetCheckBox(int contr)
    {
    char ret[2];
    UIActionCfgGetValue(sUIAction(GRUPA, contr), ret, 2);
//    ret[1]='\0';
    return (ret[0]=='1');
    };

KoSiarzPL
QUOTE(Olórin @ 11.04.2006 - 19:13) *

Wszystko się zgadza odnośnie dopisku -1 (0xffffffff) ustawia wszystkie flagi zawarte w masce....

Tak wiem. Mówiąc dziwne miałem na myśli że ustawianie wartosci status dziala ale pobieranie zawsze zwraca zero :/

QUOTE(bulanh @ 11.04.2006 - 19:39) *

Nie wiem czy to będzie działać na przyciski, ale z checkbox'ami się świetnie spisuje:

CODE

int GetCheckBox(int contr)
    {
    char ret[2];
    UIActionCfgGetValue(sUIAction(GRUPA, contr), ret, 2);
//    ret[1]='\0';
    return (ret[0]=='1');
    };


Jest szybszy sposób
CODE
return *UIActionCfgGetValue(sUIAction(GRUPA, contr), 0, 0) == '1';

smile.gif Niestety ta funkcja jest przeznaczona do sprawdzania kontrolek w konfiguracji tu chyba na nic sie przyda. A jak K sprawdza czy na toolbarze jest wciśnięty przycisk "enter"? Hao napewno musi to wiedzieć wink.gif Chyba nie trzyma w jakiejś zmiennej "przyciskOn" dla kazdego okna.
hao
Ciężko mi tak na szybko odpowiedzieć, ale w oknach rozmowy jest generalny problem z poleganiem na odczytywanych z kontrolek wartościach. Jedynym dobrym sposobem, jest uzależnić wartość checked/nie-checked od ustawienia w konfiguarcji (i jes odczytywać przy tworzeniu kontrolki i potem zmieniać przy jej naciskaniu). Tak zrobiony jest właśnie ten enter... sad but true
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.