darksell |
Отправлено: 07 Июня, 2020 - 02:56:38
|
Прохожий
Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2018
Репутация: 0
|
Zireael пишет: 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)); // установить шрифт
}
Подскажи пожалуйста как в одну из вкладок создать кнопку и.т.д(Отредактировано автором: 07 Июня, 2020 - 02:57:45) |
|
|
Zireael |
Отправлено: 08 Июня, 2020 - 11:36:52
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Подскажи пожалуйста как в одну из вкладок создать кнопку и.т.д
Tab (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define SW_HIDE 0
#define SW_SHOW 5
#define TCIF_TEXT 1
#define TCM_GETCURSEL 4875
#define TCM_INSERTITEMA 4871
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "ShowWindow", "ShowWindow", "User32.dll");
int TabControl;
string text_tab[3] = {"Вкладка1", "Вкладка2", "Вкладка3"}
char text_tab_c[99];
int current_tab=0, temp_current_tab;
int TCITEMA[7]={TCIF_TEXT, 0, 0, address(#text_tab_c[0]), sizearray(text_tab_c), 0, 0};
int control[3][10]; // массив, в котором будут храниться хендлы контролов таба
createdialog(0);
showdialog(0, "Dialog", 300, 300, 450, 300, 1, 1);
enabletimer(0);
loop()
{
textout(0, 300, 100, format(current_tab), 1);
sleep(10);
}
function getmessage(0, WM_CREATE)
{
TabControl=CreateWindow(0, "SysTabControl32", "", WS_VISIBLE | WS_CHILD, 10, 10, 300, 200, gethwnd(0), 0, 0, 0); // создать tab
for(int i=0; i<3; i++) // цикл чтобы добавить вкладки
{
strcpy(#text_tab_c[0], text_tab[i]);
sendmessage(TCM_INSERTITEMA, i, address(#TCITEMA[0]), formatiw(TabControl));
}
initialarray(#control[0][0], 0);
// добавить контролы для первой вкладки
control[0][0]=3; // на первой вкладке 3 контрола
control[0][1] = CreateWindow(0, "BUTTON", "Кнопка1", WS_VISIBLE | WS_CHILD, 10, 40, 70, 20, gethwnd(0), 0, 0, 0);
control[0][2] = CreateWindow(0, "BUTTON", "Кнопка2", WS_VISIBLE | WS_CHILD, 10, 70, 70, 20, gethwnd(0), 0, 0, 0);
control[0][3] = CreateWindow(0, "EDIT", "Edit1", WS_BORDER | WS_VISIBLE | WS_CHILD, 100, 55, 80, 20, gethwnd(0), 0, 0, 0);
// добавить контролы для второй вкладки, без стиля WS_VISIBLE
control[1][0]=1; // на второй вкладке 1 контрол
control[1][1] = CreateWindow(0, "BUTTON", "Кнопка3", WS_CHILD, 30, 70, 100, 40, gethwnd(0), 0, 0, 0);
// добавить контролы для третьей вкладки, без стиля WS_VISIBLE
control[2][0]=2; // на третьей вкладке 2 контрола
control[2][1] = CreateWindow(0, "BUTTON", "Кнопка4", WS_CHILD, 50, 40, 70, 20, gethwnd(0), 0, 0, 0);
control[2][2] = CreateWindow(0, "EDIT", "Edit3", WS_BORDER | WS_CHILD, 50, 70, 80, 20, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
// обработка сообщений
if (message.lparam == control[0][1])
{
messagebox("Нажата Кнопка1");
return;
}
if (message.lparam == control[0][2])
{
messagebox("Нажата Кнопка2");
return;
}
if (message.lparam == control[1][1])
{
messagebox("Нажата Кнопка3");
return;
}
}
CREATE_TIMER(0, 300)
{
temp_current_tab=sendmessage(TCM_GETCURSEL, 0, 0, formatiw(TabControl)); // узнать текущую выбранную вкладку
if(temp_current_tab != current_tab) // если она не равна текущей выбранной вкладке
{
for(int tab_control_show=0; tab_control_show < control[current_tab][0]; tab_control_show++)
ShowWindow(control[current_tab][tab_control_show+1], SW_HIDE); // скрыть контролы текущей вкладки
current_tab=temp_current_tab; // запомнить какая выбрана вкладка
for(tab_control_show=0; tab_control_show < control[current_tab][0]; tab_control_show++)
ShowWindow(control[current_tab][tab_control_show+1], SW_SHOW); // показать контролы выбранной вкладки
}
} |
|
|
Zireael |
Отправлено: 14 Октября, 2020 - 12:48:35
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Перетаскивание окна за клиентскую часть (Отобразить)CODE:#define HTCAPTION 2
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
createdialog(0);
showdialog(0, "Dialog", 500, 300, 300, 300, 1, 0);
loop()sleep(10);
function getmessage (0, WM_LBUTTONDOWN)
{
sendmessage(WM_NCLBUTTONDOWN, HTCAPTION, 0, formatiw(gethwnd(0)));
} |
|
|
Karkun |
Отправлено: 12 Января, 2021 - 23:21:35
|
Участник
Покинул форум
Сообщений всего: 82
Дата рег-ции: Март 2019
Репутация: 0
|
[quote=testphp]спасибо! подскажите как еще вставить блок, в который можно раз в какое-то время подгружать текст, он переходил на новую строку при достижении правой границы, а при заполнении полностью появлялся scroll с возможностью прокрутки.
вот типа такого, только прокрутка не появляется(для просмотра ссылки Вам необходимо авторизоваться) /quote] Zireael пишет: #define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define ES_AUTOHSCROLL 128
#define ES_AUTOVSCROLL 64
#define ES_MULTILINE 4
#define ES_WANTRETURN 4096
#define WS_VSCROLL 2097152
#define WS_HSCROLL 1048576
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int edit;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
edit=CreateWindow(0, "EDIT", "", WS_VISIBLE | WS_CHILD | WS_BORDER | WS_VSCROLL | WS_HSCROLL |
ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN, 10, 10, 150, 120, gethwnd(0), 0, 0, 0);
}
Здравствуйте. Подскажите как в это поле отправлять текст из программы. Чтобы каждое сообщение было на своей строке? |
|
|
Zireael |
Отправлено: 12 Января, 2021 - 23:34:49
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Подскажите как в это поле отправлять текст из программы. Чтобы каждое сообщение было на своей строке?
code (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define ES_AUTOHSCROLL 128
#define ES_AUTOVSCROLL 64
#define ES_MULTILINE 4
#define ES_WANTRETURN 4096
#define WS_VSCROLL 2097152
#define WS_HSCROLL 1048576
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll");
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
int edit;
createdialog(0);
settext(edit, "string1"); // добавить текст в Edit
settext(edit, "string2"); // добавить текст в Edit
settext(edit, "str3");
settext(edit, "str4");
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
edit=CreateWindow(0, "EDIT", "", WS_VISIBLE | WS_CHILD | WS_BORDER | WS_VSCROLL | WS_HSCROLL |
ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN, 10, 10, 150, 120, gethwnd(0), 0, 0, 0);
}
function settext(int handle, string text)
{
char edit_text[99999];
if(GetWindowText(handle, address(#edit_text[0]), sizearray(edit_text)))
SetWindowText(handle, format(#edit_text[0])+"^r^n"+text);
else SetWindowText(handle, text);
} |
|
|
Karkun |
Отправлено: 13 Января, 2021 - 02:34:05
|
Участник
Покинул форум
Сообщений всего: 82
Дата рег-ции: Март 2019
Репутация: 0
|
Zireael пишет: Цитата:
Подскажите как в это поле отправлять текст из программы. Чтобы каждое сообщение было на своей строке?
code (Отобразить)
Не отображает. Я так понимаю должны отобразится строки
CODE:string1
string2
str3
str4;
но их нет в поле.
Прошу прощения невнимателен все отображается. Спасибо.(Отредактировано автором: 13 Января, 2021 - 02:36:37) |
|
|
Karkun |
Отправлено: 15 Января, 2021 - 20:17:15
|
Участник
Покинул форум
Сообщений всего: 82
Дата рег-ции: Март 2019
Репутация: 0
|
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)); // установить шрифт
}
Подскажите как на этих полях размещать элементы?
Еще вопрос как изменить цвет текстового сообщения в поле edit?<br><br>Тема закрыта! Продолжение в теме "Версия 5.50 Получение и обработка сообщений в немодальных окнах Кибор - 2".
|
|
|
|