KoSiarzPL
2.01.2006 - 21:33
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?
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
2.01.2006 - 22:23
QUOTE(Olórin @ 2.01.2006 - 22:55)
Czy w takim razie da się zmienić właściciela (wtyczkę) akcji? Pewnie też nie bo w sdk żadnego SETOWNER nie ma :/
KoSiarzPL
3.01.2006 - 00:23
6. Jak przechwycic komunikaty akcji (ACTN_) innych wtyczek.
Subclassowanie akcji
W SDK jest przykład
KoSiarzPL
3.01.2006 - 12:39
O matko! Będe musiał subklasować wszystkie akcje konnekta?
KoSiarzPL
3.01.2006 - 13:48
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?
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
4.01.2006 - 15:56
A jak pobrać ikonki wtyczki (16x16 oraz 32x32)?
Pobrać? Możesz użyć ich identyfikatora, jeżeli chcesz wyświetlić w innym miejscu. Identyfikator ikonki jest zazwyczaj w parametrze p1 akcji.
Innymi słowy nie istnieje coś takiego jak ikona wtyczki
KoSiarzPL
18.01.2006 - 02:36
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
18.01.2006 - 08:03
IM_ALLPLUGSINITIALIZED czy coś pod ten deseń...
KoSiarzPL
18.01.2006 - 09:22
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
18.01.2006 - 09:26
IStart jest juży wywoływane po IPrepare (chyba
), ale jak do tego dodać najniższy priorytet wtyczki, wtedy wszystko na pewno wyłapiesz
Wtyczki inicjalizują akcje w IM_PREPARE - więc w IM_START wszystkie powinny być już zarejestrowane...
KoSiarzPL
20.01.2006 - 22:26
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.
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
KoSiarzPL
21.01.2006 - 14:23
Ech zapomnialem o dodaniu rozszerzenia "ico". Dzieki.
KoSiarzPL
21.01.2006 - 15:17
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.
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
1.02.2006 - 17:45
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
11.04.2006 - 19:04
Nowy problem
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
11.04.2006 - 20:09
Wszystko się zgadza odnośnie dopisku -1 (0xffffffff) ustawia wszystkie flagi zawarte w masce....
bulanh
11.04.2006 - 20:35
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
11.04.2006 - 22:00
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';
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ć
Chyba nie trzyma w jakiejś zmiennej "przyciskOn" dla kazdego okna.
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.