Zireael |
Отправлено: 08 Октября, 2019 - 14:13:25
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Сворачивание диалога и добавление значка в трей (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define NIF_SHOWTIP 128
#define NIF_TIP 4
#define NIF_ICON 2
#define NIF_INFO 16
#define NIM_ADD 0
#define NIM_DELETE 2
#define NIF_MESSAGE 1
#define SC_MINIMIZE 61472
#define SW_HIDE 0
#define SW_SHOWNORMAL 1
#define IMAGE_ICON 1
#define LR_LOADFROMFILE 16
#define IDI_INFORMATION 32516
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "Shell_NotifyIcon", "Shell_NotifyIconA", "Shell32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
external(INT, "LoadImage", "LoadImageA", "User32.dll");
external(INT, "ShowWindow", "ShowWindow", "User32.dll");
int static;
char NOTIFYICONDATA[488];
createdialog(0);
showdialog(0, "Dialog",300, 300, 300, 150, 1, 1);
loop()sleep(10);
function getmessage(0, WM_SYSCOMMAND)
{
if(message.wparam==SC_MINIMIZE) // если окно было свёрнуто
{
ShowWindow(gethwnd(0), SW_HIDE); // скрыть диалог
Shell_NotifyIcon(NIM_ADD, address(#NOTIFYICONDATA[0])); // добавить значок в трей
return;
}
}
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "Это окно будет сворачиваться в трей", WS_CHILD | WS_VISIBLE, 20, 10, 250, 20, gethwnd(0), 0, 0, 0);
initialarray(#NOTIFYICONDATA[0], 0);
writeaddress(sizearray(NOTIFYICONDATA), address(#NOTIFYICONDATA[0]));
writeaddress(gethwnd(0), address(#NOTIFYICONDATA[4]));
writeaddress(1025, address(#NOTIFYICONDATA[8])); // идентификатор иконки
writeaddress(WM_MOUSEMOVE, address(#NOTIFYICONDATA[16]));
writeaddress(NIF_ICON | NIF_SHOWTIP | NIF_TIP | NIF_INFO | NIF_MESSAGE, address(#NOTIFYICONDATA[12]));
writeaddress(LoadIcon(0, IDI_INFORMATION), address(#NOTIFYICONDATA[20])); // одна из стандартных иконок
//writeaddress(LoadImage(0, "C:\111.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE), address(#NOTIFYICONDATA[20])); // своя иконка
strcpy(#NOTIFYICONDATA[24], "MyApp"); // подсказка при наведении на значок
}
function getmessage(0, WM_MOUSEMOVE)
{
if(message.wparam==1025) // если курсор наведён на значок с указанным идентификатором
{
if(message.lparam==WM_LBUTTONDOWN) // если был клик левой кнопкой мыши
{
ShowWindow(gethwnd(0), SW_SHOWNORMAL); // показать диалог
Shell_NotifyIcon(NIM_DELETE, address(#NOTIFYICONDATA[0])); // удалить значок из трея
return;
}
}
} |
|
|
Zireael |
Отправлено: 09 Октября, 2019 - 12:33:45
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Status Bar (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define SB_SETPARTS 1028
#define SB_SETTEXTA 1025
#define SB_SETBKCOLOR 8193
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
int status_bar;
int rect[3]={115, 230, 300} // ширина столбцов
string text[3]={"Текст1", "Текст2", ""} // текст столбцов
char text2[99];
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 300, 200, 1, 1);
sendmessage(WM_SIZE, 0, 0, formatiw(status_bar));
enabletimer(0);
loop()sleep(100);
function getmessage(0, WM_CREATE)
{
status_bar=CreateWindow(0, "msctls_statusbar32", "", WS_VISIBLE | WS_CHILD, 0, 0, 0, 0, gethwnd(0), 0, 0, 0);
sendmessage(SB_SETPARTS, sizearray(rect), address(#rect[0]), formatiw(status_bar)); // указываем сколько столбцов и их ширина
for(int i=0; i<sizearray(text); i++)
{
strcpy(#text2[0], text[i]);
sendmessage(SB_SETTEXTA, i, address(#text2[0]), formatiw(status_bar)); //устанавливаем текст
}
sendmessage(SB_SETBKCOLOR, 0, 16769193, formatiw(status_bar)); // цвет фона
}
CREATE_TIMER(0, 150)
{
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds); // получить текущую дату и время
strcpy(#text2[0], format(Hour)+":"+format(Minute)+":"+format(Second));
sendmessage(SB_SETTEXTA, 2, address(#text2[0]), formatiw(status_bar)); // установить текст
} (Отредактировано автором: 09 Октября, 2019 - 12:34:36) |
|
|
Zireael |
Отправлено: 10 Октября, 2019 - 02:39:55
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
TabControl (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define TCIF_TEXT 1
#define TCIF_IMAGE 2
#define TCM_INSERTITEMA 4871
#define TCM_SETIMAGELIST 4867
#define IMAGE_ICON 1
#define ILC_MASK 1
#define LVSIL_SMALL 1
#define ILC_COLOR32 32
#define IMAGE_ICON 1
#define LR_LOADFROMFILE 16
#define IDI_INFORMATION 32516
#define IDI_WARNING 32515
#define IDI_SHIELD 32518
#define RUSSIAN_CHARSET 204
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
external(INT, "LoadImage", "LoadImageA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "ImageList_Create", "ImageList_Create", "Comctl32.dll");
external(INT, "ImageList_ReplaceIcon", "ImageList_ReplaceIcon", "Comctl32.dll");
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll" );
int i, tab, ImageList, h_font;
string text_tab[3]={"Вкладка1", "Вкладка2", "Вкладка3"} // текст вкладок
char text_tab_c[99];
int TCITEMA[7]={TCIF_TEXT | TCIF_IMAGE, 0, 0, address(#text_tab_c[0]), size(#text_tab_c[0]), 0, 0}
createdialog(0);
showdialog(0, "Dialog", 300, 300, 450, 300, 1, 1);
loop()sleep(100);
function getmessage(0, WM_CREATE)
{
tab=CreateWindow(0, "SysTabControl32", "", WS_VISIBLE | WS_CHILD, 10, 10, 380, 150, gethwnd(0), 0, 0, 0); // создать таб
ImageList=ImageList_Create(18, 18, ILC_MASK | ILC_COLOR32, 5, 1); // список изображений
//ImageList_ReplaceIcon(ImageList, -1, LoadImage(0, "C:\111.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE)); // загрузить картинку из файла
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_INFORMATION)); // загрузить значок
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_WARNING)); // загрузить значок
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_SHIELD)); // загрузить значок
sendmessage(TCM_SETIMAGELIST, LVSIL_SMALL, ImageList, formatiw(tab)); // установить список изображений для таба
for(i=0; i<sizearray(text_tab); i++)
{
strcpy(#text_tab_c[0], text_tab[i]); // текст вкладки
TCITEMA[5]=i; // номер картинки для вкладки
sendmessage(TCM_INSERTITEMA, i, address(#TCITEMA[0]), formatiw(tab));
}
h_font = CreateFont(-14, 0, 0, 0, 500, 0, 0, 0, RUSSIAN_CHARSET, 0, 0, 0, 0, "Segoe Print"); // создать шрифт
sendmessage(WM_SETFONT, h_font, 1, formatiw(tab)); // установить шрифт
} |
|
|
007wan |
Отправлено: 13 Октября, 2019 - 10:09:55
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Сворачивание диалога и добавление значка в трей (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define NIF_SHOWTIP 128
#define NIF_TIP 4
#define NIF_ICON 2
#define NIF_INFO 16
#define NIM_ADD 0
#define NIM_DELETE 2
#define NIF_MESSAGE 1
#define SC_MINIMIZE 61472
#define SW_HIDE 0
#define SW_SHOWNORMAL 1
#define IMAGE_ICON 1
#define LR_LOADFROMFILE 16
#define IDI_INFORMATION 32516
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "Shell_NotifyIcon", "Shell_NotifyIconA", "Shell32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
external(INT, "LoadImage", "LoadImageA", "User32.dll");
external(INT, "ShowWindow", "ShowWindow", "User32.dll");
int static;
char NOTIFYICONDATA[488];
createdialog(0);
showdialog(0, "Dialog",300, 300, 300, 150, 1, 1);
loop()sleep(10);
function getmessage(0, WM_SYSCOMMAND)
{
if(message.wparam==SC_MINIMIZE) // если окно было свёрнуто
{
ShowWindow(gethwnd(0), SW_HIDE); // скрыть диалог
Shell_NotifyIcon(NIM_ADD, address(#NOTIFYICONDATA[0])); // добавить значок в трей
return;
}
}
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "Это окно будет сворачиваться в трей", WS_CHILD | WS_VISIBLE, 20, 10, 250, 20, gethwnd(0), 0, 0, 0);
initialarray(#NOTIFYICONDATA[0], 0);
writeaddress(sizearray(NOTIFYICONDATA), address(#NOTIFYICONDATA[0]));
writeaddress(gethwnd(0), address(#NOTIFYICONDATA[4]));
writeaddress(1025, address(#NOTIFYICONDATA[8])); // идентификатор иконки
writeaddress(WM_MOUSEMOVE, address(#NOTIFYICONDATA[16]));
writeaddress(NIF_ICON | NIF_SHOWTIP | NIF_TIP | NIF_INFO | NIF_MESSAGE, address(#NOTIFYICONDATA[12]));
writeaddress(LoadIcon(0, IDI_INFORMATION), address(#NOTIFYICONDATA[20])); // одна из стандартных иконок
//writeaddress(LoadImage(0, "C:\111.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE), address(#NOTIFYICONDATA[20])); // своя иконка
strcpy(#NOTIFYICONDATA[24], "MyApp"); // подсказка при наведении на значок
}
function getmessage(0, WM_MOUSEMOVE)
{
if(message.wparam==1025) // если курсор наведён на значок с указанным идентификатором
{
if(message.lparam==WM_LBUTTONDOWN) // если был клик левой кнопкой мыши
{
ShowWindow(gethwnd(0), SW_SHOWNORMAL); // показать диалог
Shell_NotifyIcon(NIM_DELETE, address(#NOTIFYICONDATA[0])); // удалить значок из трея
return;
}
}
} Не могу понять. Как добавить иконку в сообщение, и что бы на панели была своя иконка, а в сообщение была "Информация"?
(Добавление)
Вау, приколько Tab & Status
(Добавление)
Цитата: dwInfoFlags
Флаг, определяющий значок, отображаемый слева от подсказки в стиле balloon. Установите в 0, чтобы не использовать значок
NIIF_WARNING = &H30 Значок предупреждения
NIIF_ERROR = &H10 Значок ошибки
NIIF_INFO = &H40 Значок информации
Так почему, я запускаю код:Код (Отобразить)CODE:#define NIF_SHOWTIP 128
#define NIF_TIP 4
#define NIF_ICON 2
#define NIF_INFO 16
#define NIM_ADD 0
#define NIM_DELETE 2
external(INT, "Shell_NotifyIcon", "Shell_NotifyIconA", "Shell32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
char NOTIFYICONDATA[488];
createdialog(0);
Shell_NotifyIcon(NIM_ADD, address(#NOTIFYICONDATA[0])); // добавить значек в трей
//sleep(5000);
//Shell_NotifyIcon(NIM_DELETE, address(#NOTIFYICONDATA[0])); // удалить из трея
function getmessage(0, WM_CREATE)
{
initialarray(#NOTIFYICONDATA[0], 0);
writeaddress(sizearray(NOTIFYICONDATA), address(#NOTIFYICONDATA[0]));
writeaddress(gethwnd(0), address(#NOTIFYICONDATA[4]));
writeaddress(NIF_ICON | NIF_SHOWTIP | NIF_TIP | NIF_INFO, address(#NOTIFYICONDATA[12]));
writeaddress(LoadIcon(0, 32516), address(#NOTIFYICONDATA[20]));
strcpy(#NOTIFYICONDATA[24], "Подсказка");
strcpy(#NOTIFYICONDATA[160], "Сообщение"); // в win10 не работает
strcpy(#NOTIFYICONDATA[420], "Заголовок"); // в win10 не работает
}
loop()
{
sleep(10);
} и у меня не показывает в балоне информационный значок? |
|
|
konctantin777 |
Отправлено: 13 Октября, 2019 - 12:09:20
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Пробовал по разному, не получилось как надо ( Под скажите по минимальным блокам как надо ? Надо ставить на паузу и открывать доп диалог. В редакторе диалогов делаю 2 кода
код из редактора диалогов 1й (Отобразить)int pos_size_button0[2][4];
string text_button0[2];
int flag_button0[2];
pos_size_button0[0][0]=16; pos_size_button0[0][1]=16; pos_size_button0[0][2]=173; pos_size_button0[0][3]=42;
pos_size_button0[1][0]=17; pos_size_button0[1][1]=76; pos_size_button0[1][2]=100; pos_size_button0[1][3]=20;
text_button0[0]="Кнопка 0"; text_button0[1]="Кнопка 1";
//////////
int pos_size_edit0[1][4];
string text_edit0[1];
pos_size_edit0[0][0]=15; pos_size_edit0[0][1]=113; pos_size_edit0[0][2]=100; pos_size_edit0[0][3]=20;
text_edit0[0]="Поле 0";
//////////
int pos_size_check0[1][4];
string text_check0[1];
int flag_check0[1];
pos_size_check0[0][0]=20; pos_size_check0[0][1]=145; pos_size_check0[0][2]=60; pos_size_check0[0][3]=20;
text_check0[0]="Галка 0";
flag_check0[0]=0;
//////////
int pos_size_combo0[1][4];
string text_combo0[1][1];
int strok_combo0[1];
int flag_combo0[1];
pos_size_combo0[0][0]=127; pos_size_combo0[0][1]=222; pos_size_combo0[0][2]=100; pos_size_combo0[0][3]=80;
strok_combo0[0]=1;
text_combo0[0][0]="Список 0";
flag_combo0[0]=0;
//////////
int pos_size_ключ0[1][4];
string text_ключ0[1];
pos_size_ключ0[0][0]=24; pos_size_ключ0[0][1]=230; pos_size_ключ0[0][2]=100; pos_size_ключ0[0][3]=20;
text_ключ0[0]="Текст 0";
//////////
createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0] |
EDIT, #pos_size_edit0[0][0], #text_edit0[0] |
CHECK, #pos_size_check0[0][0], #text_check0[0], #flag_check0[0] |
COMBO, #pos_size_combo0[0][0], #text_combo0[0][0], #strok_combo0[0], #flag_combo0[0] |
STATIC, #pos_size_ключ0[0][0], #text_ключ0[0]);
//////////
showdialog(0, "
Диалог", 10, 285, 250, 300, 1, 1);
//////////
loop() sleep(10);//Убрать после теста
код из 2го (Отобразить)int pos_size_button100[2][4];
string text_button100[2];
int flag_button100[2];
pos_size_button100[0][0]=17; pos_size_button100[0][1]=13; pos_size_button100[0][2]=72; pos_size_button100[0][3]=21;
pos_size_button100[1][0]=104; pos_size_button100[1][1]=13; pos_size_button100[1][2]=100; pos_size_button100[1][3]=20;
text_button100[0]="Кнопка 0"; text_button100[1]="Кнопка 1";
//////////
int pos_size_edit100[2][4];
string text_edit100[2];
pos_size_edit100[0][0]=19; pos_size_edit100[0][1]=47; pos_size_edit100[0][2]=66; pos_size_edit100[0][3]=20;
pos_size_edit100[1][0]=102; pos_size_edit100[1][1]=48; pos_size_edit100[1][2]=100; pos_size_edit100[1][3]=20;
text_edit100[0]="Поле 0"; text_edit100[1]="Поле 1";
//////////
int pos_size_check100[2][4];
string text_check100[2];
int flag_check100[2];
pos_size_check100[0][0]=25; pos_size_check100[0][1]=84; pos_size_check100[0][2]=60; pos_size_check100[0][3]=20;
pos_size_check100[1][0]=114; pos_size_check100[1][1]=81; pos_size_check100[1][2]=60; pos_size_check100[1][3]=20;
text_check100[0]="Галка 0"; text_check100[1]="Галка 1";
flag_check100[0]=0; flag_check100[1]=0;
//////////
int pos_size_combo100[2][4];
string text_combo100[2][1];
int strok_combo100[2];
int flag_combo100[2];
pos_size_combo100[0][0]=23; pos_size_combo100[0][1]=144; pos_size_combo100[0][2]=100; pos_size_combo100[0][3]=80;
pos_size_combo100[1][0]=23; pos_size_combo100[1][1]=185; pos_size_combo100[1][2]=100; pos_size_combo100[1][3]=80;
strok_combo100[0]=1; strok_combo100[1]=1;
text_combo100[0][0]="Список 0";
text_combo100[1][0]="Список 1";
flag_combo100[0]=0; flag_combo100[1]=0;
//////////
int pos_size_ключ100[2][4];
string text_ключ100[2];
pos_size_ключ100[0][0]=28; pos_size_ключ100[0][1]=113; pos_size_ключ100[0][2]=100; pos_size_ключ100[0][3]=20;
pos_size_ключ100[1][0]=124; pos_size_ключ100[1][1]=119; pos_size_ключ100[1][2]=100; pos_size_ключ100[1][3]=20;
text_ключ100[0]="Текст 0"; text_ключ100[1]="Текст 1";
//////////
createdialog(1, BUTTON, #pos_size_button100[0][0], #text_button100[0], #flag_button100[0] |
EDIT, #pos_size_edit100[0][0], #text_edit100[0] |
CHECK, #pos_size_check100[0][0], #text_check100[0], #flag_check100[0] |
COMBO, #pos_size_combo100[0][0], #text_combo100[0][0], #strok_combo100[0], #flag_combo100[0] |
STATIC, #pos_size_ключ100[0][0], #text_ключ100[0]);
//////////
showdialog(1, "
Диалог", 335, 365, 250, 300, 0, 1);
//////////
loop() sleep(10);//Убрать после теста
Какие надо добавить квадратики в виз редактор ? Сейчас только получается открывать доп диалог при нажатии на диалог 1, а не на кнопку..
(Добавление)
открываю так: CODE:function getmessage(0, WM_LBUTTONDOWN)//Отлавливаем клик левой кнопки мыши
{
//////////
showdialog(1, "
Диалог", 335, 365, 250, 300, 0, 1);
//////////
}
CODE://////////
showdialog(0, "
Диалог", 10, 285, 250, 300, 1, 1);
//////////
loop() sleep(10);//Убрать после теста |
|
|
Zireael |
Отправлено: 13 Октября, 2019 - 12:24:00
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: получается открывать доп диалог при нажатии на диалог 1, а не на кнопку.
CODE:if(flag_button0[0]) // если нажата кнопка
{
flag_button0[0]=0; // обнуляем флаг нажатия
showdialog(1, "Диалог", 335, 365, 250, 300, 0, 1); // показать диалог
}
Можно добавить этот код в таймер. |
|
|
Zireael |
Отправлено: 13 Октября, 2019 - 13:30:13
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: расположение кнопки может меняться
Это никак не влияет на флаг нажатия кнопки.
Цитата: а function getmessage никак по простому не сделать ?
Создавать контролы через CreateWindow, тогда можно в обработчике получать сообщения. |
|
|
Adomb |
Отправлено: 13 Октября, 2019 - 15:31:15
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
CODE:function getmessage(0, WM_CREATE)
{
combo2=CreateWindow(0, "COMBOBOX", "", 3+64+2097152+1342177280, 10, 150, 110, 120, gethwnd(0), 0, 0, 0);
// добавление строк в combo2 из массива combo2_text
for(i=0; i<sizearray(combo2_text); i++)
{
strcpy(#c[0], combo2_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo2));
}
}
Запускается "пустым" . Как запустить сразу на определённой, нужной строке из списка?(Отредактировано автором: 13 Октября, 2019 - 15:32:12) |
|
|
|