Kibor |
Отправлено: 07 Марта, 2019 - 11:06:48
|
Эксперт
Просматривает форум
Сообщений всего: 8226
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
007wan пишет: Как еще сделать и ограничить минимальный размер окна, что бы не пропали контролы
CODE:#define WS_SIZEBOX 262144
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll");
int Button1, x;
win w;
createdialog(0);
SetWindowPos(Button1, 0, x-50, 10, 40, 20, 0);
loop()sleep(1);
function getmessage (0, WM_CREATE)
{
SetWindowLong(gethwnd(0), -16, GetWindowLong(gethwnd(0), -16) + WS_SIZEBOX); // добавляем стиль к диалогу (позволяет растягивать диалог за край окна)
showdialog(0, "Диалог", 558, 234, 250, 300, 1, 0);
Button1 = CreateWindow(0, "BUTTON", "1", 1342177280, 0, 0, 0, 0, gethwnd(0), 0, 0, 0);
}
function getmessage (0, WM_SIZE) // если меняется размер окна
{
w= window ("Диалог");
if (message.x<200)
{
w.width=200;
movewindow(w);
}
if (message.y<250)
{
w.height=250;
movewindow(w);
}
x=message.x;
SetWindowPos(Button1, 0, message.x-50, 10, 40, 20, 0);
}
Максимальный так же. |
|
|
007wan |
Отправлено: 07 Марта, 2019 - 14:37:50
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Как сделать вывод визуального окна(уже сложнее) в зависимости от ширины и высоты окна, причем ширина и высота тесно связано между собой:
максимальная ширина окна = 1034.
максимальная высота окна = 819.
минимальная ширина окна = 644.
минимальная высота окна = 534.
Почему я решил, что ширина и высота тесно связана:
если меняем ширину(тянем за угол), то высота же остается неизменной и так же наоборот(тянем за высоту). поэтому надо, что бы высота и ширина в правильных пропорция уменьшала или увеличивала масштаб визуального окна.
Координаты визуального окна(положение и размеры в диалоге): 294,111,1292,841.
(Добавление)
Kibor , CODE:function getmessage (0, WM_SIZE)
{
MainWindow = window ("Диалог");
if (message.x < 644)
{
MainWindow.width = 644;
movewindow(MainWindow);
}
[size=18]
if (message.y < 534)
{
MainWindow.height = 534);
}
[/size]
if (message.x > 1034)
{
MainWindow.width = 1034;
movewindow(MainWindow);
}
if (message.y > 819)
{
MainWindow.height = 819;
movewindow(MainWindow);
}
Button3_X = message.x;
SetWindowPos(Button3, 0, message.x-30, 10, 20, 20, 0);
}
То, что я отметил не работает
(Добавление)
007wan пишет: movewindow(MainWindow); Сорян. Случайно стер и не заметил. целый час искал)
(Добавление)
CODE:if (message.y < 534)
{
MainWindow.height = 534);
movewindow(MainWindow);
}
if (message.y > 819)
{
MainWindow.height = 819;
movewindow(MainWindow);
}
Да-да. Всё верно сделал и почему-то с высотой не работает, а с шириной пашет
(Добавление)
CODE:#define WS_SIZEBOX 262144
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll");
int Button1, x;
win w;
createdialog(0);
SetWindowPos(Button1, 0, x-50, 10, 40, 20, 0);
loop()sleep(1);
function getmessage (0, WM_CREATE)
{
SetWindowLong(gethwnd(0), -16, GetWindowLong(gethwnd(0), -16) + WS_SIZEBOX); // äîáàâëÿåì ñòèëü ê äèàëîãó (ïîçâîëÿåò ðàñòÿãèâàòü äèàëîã çà êðàé îêíà)
showdialog(0, "Äèàëîã", 558, 234, 250, 300, 1, 0);
Button1 = CreateWindow(0, "BUTTON", "1", 1342177280, 0, 0, 0, 0, gethwnd(0), 0, 0, 0);
}
function getmessage (0, WM_SIZE) // åñëè ìåíÿåòñÿ ðàçìåð îêíà
{
w= window ("Äèàëîã");
if (message.x < 644)
{
w.width = 644;
movewindow(w);
}
if (message.x > 1034)
{
w.width = 1034;
movewindow(w);
}
if (message.y < 534)
{
w.height = 534);
movewindow(w);
}
if (message.y > 819)
{
w.height = 819;
movewindow(w);
}
x=message.x;
SetWindowPos(Button1, 0, message.x-50, 10, 40, 20, 0);
}
даже на примере не работает
(Добавление)
CODE:if (message.y < 534)
{
w.height = 534);
movewindow(w);
} Именно оно не работает, а другие 3 работают
(Добавление)
CODE:А всё. нашел ошубка там скобка мешалась |
|
|
007wan |
Отправлено: 29 Марта, 2019 - 14:38:23
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Вообщем я сделал так:
При кручении колесика прибавляется значение 1. (в зависимости как крутим если вниз, то минусуется, а если вверх , то прибвляется).
Минимальное значение колесика = 38, а максимальное = 100;
Потом это значение идет в расчеты:
рассчитал ширину визуального окна таким образом:
CODE:
VisualWindow_Width = 1000/100*Value1;
/*
1000/100*значение колесика.
*/
А ширину таким образом:
CODE:VisualWindow_Height = 730/100*Value1;
Потом зная ширину окна я мысленно прибавляю +20(отступ)
CODE:SetWindowPos(Object_Listbox1, 0, VisualWindow_Width+20, 10, 200, VisualWindow_Height+30, 0);
Далее, я раз знаю ширину визуального окна, а еще значит складываю все отступы, а так же ширину списка+ еще один отстпу и мы теперь знаем какой предел окна будет, т.е ширина окна будет = ширины визуального окна+ширины списка+отстпупы эти контроллов+ 20
CODE:MainWindow.width = Listbox1_Size[0]+VisualWindow_Width+30+(MainWindow.width-MainWindow.widthclient);
MainWindow.height = VisualWindow_Height+50+(MainWindow.height-MainWindow.heightclient);
movewindow(MainWindow);
Вроде всё окей, но проблема то в том, что когда сильно крутишь ползунок размеры окна в прямом смысле "скачут". В чем дело? может ползунок неправильно получает значение или рассчитывает?
Вот код для скроллера мыши:(это то, что я описал выше, только цельный)
CODE:function getmessage(0, WM_MOUSEWHEEL)
{
resettextout(1);
if(message.wparam > 0)
{
Value1++;
}
else
{
Value1--;
}
if (Value1 < 38)
{
Value1 = 38;
}
if (Value1 > 100)
{
Value1 = 100;
}
if (Game != 0)
{
if(format(#Text_Button2[0]) == "Получить изображение из игры")
{
visualwindow(MainWindow, 0, 0, 0, Game.widthclient, Game.heightclient, 10, 40, Value1, Game);
}
}
VisualWindow_Width = 1000/100*Value1;
VisualWindow_Height = 730/100*Value1;
textout(0, 0, 0, format(VisualWindow_Width)+","+format(VisualWindow_Height)+","+format(Value1)+"-"+format(hiword(message.wparam)), 1);
//visualwindow(MainWindow, 0, 0, 0, sizearray(VisualImage), sizearray(VisualImage[]), 10, 40, Value1, #VisualImage[0][0]);
SetWindowPos(Object_Listbox1, 0, VisualWindow_Width+20, 10, 200, VisualWindow_Height+30, 0);
MainWindow.width = Listbox1_Size[0]+VisualWindow_Width+30+(MainWindow.width-MainWindow.widthclient);
MainWindow.height = VisualWindow_Height+50+(MainWindow.height-MainWindow.heightclient);
movewindow(MainWindow);
}
(Добавление)
007wan пишет: VisualWindow_Width = 1000/100*Value1;
/*
1000/100*значение колесика.
*/
Где 1000 и 730 это ширина и высота визуального окна в максимальных размерах, а 38 это масштаб его.
(Добавление)
Тоесть при кручении колеса меняется масштаб, а потом вычитывается и размер и размер окна и списка меняется |
|
|
007wan |
Отправлено: 30 Марта, 2019 - 09:10:52
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
CODE:
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "CreateMenu", "CreateMenu", "User32.dll" );
external(INT, "CreatePopupMenu", "CreatePopupMenu", "User32.dll" );
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll");
external(INT, "SetMenuInfo", "SetMenuInfo", "User32.dll" );
external(INT, "SetBkMode", "SetBkMode", "Gdi32.dll" );
external(INT, "SetScrollRange", "SetScrollRange", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "SetScrollRange", "SetScrollRange", "User32.dll" );
external(INT, "SetScrollPos", "SetScrollPos", "User32.dll" );
external(INT, "SetTextColor", "SetTextColor", "Gdi32.dll" );
external(INT, "SetWindowTextA", "SetWindowTextA", "User32.dll" );
external(INT, "SetMenu", "SetMenu", "User32.dll" );
external(INT, "SendMessage", "SendMessageA", "User32.dll" );
external(INT, "ShowWindow", "ShowWindow", "User32.dll" );
external(INT, "SetFocus", "SetFocus", "User32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "SetTextColor", "SetTextColor", "Gdi32.dll" );
external(INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll");
external(INT, "GetFocus", "GetFocus", "User32.dll" );
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll" );
external(INT, "GlobalMemoryStatusEx", "GlobalMemoryStatusEx", "Kernel32.dll");
external(INT, "GetSystemTimes", "GetSystemTimes", "Kernel32.dll");
external(INT, "InvalidateRect", "InvalidateRect", "user32.dll");
external(INT, "IsWindowVisible", "IsWindowVisible", "User32.dll");
external(INT, "IsIconic", "IsIconic", "User32.dll");
external(INT, "IsZoomed", "IsZoomed", "User32.dll");
external(INT, "EnableWindow", "EnableWindow", "User32.dll" );
external(INT, "AppendMenu", "AppendMenuA", "User32.dll" );
external(INT, "TrackPopupMenu", "TrackPopupMenu", "User32.dll" );
external(INT, "TextOut", "TextOutA", "Gdi32.dll" );
external(INT, "FlashWindowEx", "FlashWindowEx", "User32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "Strftime", "Strftime", pathfolder()+"Time.dll" );
external(INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define WS_SIZEBOX 262144
#define WS_CHILD 1073741824
#define WS_HSCROLL 1048576
#define WS_VSCROLL 2097152
#define WS_POPUP 2147483648
#define WS_GROUP 131072
#define MNS_NOTIFYBYPOS 134217728
#define MIM_STYLE 16
#define MF_POPUP 16
#define WM_GETTEXT 13
#define WM_SETTEXT 12
#define WM_GETTEXTLENGTH 14
#define WM_SETCURSOR 32
#define WM_SIZE 5
#define WM_ERASEBKGND 20
#define WM_ENABLE 10
#define CB_GETITEMDATA 336
#define CB_GETCURSEL 327
#define CB_ADDSTRING 323
#define CB_DELETESTRING 324
#define CB_FINDSTRING 332
#define CB_GETCURSEL 32
#define CBS_DROPDOWNLIST 3
#define CBS_AUTOHSCROLL 64
#define CBS_DROPDOWN 2
#define CBS_DROPDOWNLIST 3
#define LBS_EXTENDEDSEL 2048
#define LB_ADDSTRING 384
#define LB_GETCOUNT 395
#define LB_SETTOPINDEX 407
#define LBS_DISABLENOSCROLL 4096
win MainWindow, SecondaryWindow, Browser, Game;
int Display_Color, Display_Width, Display_Height;
int VisualWindow_Width = 1000, VisualWindow_Height = 730;
int Value1 = 38;
int ImageX[10], ImageY[10];
int VisualImage[1000][730];
int Object_Button1;
char Text_Button1[255];
int Object_Button2;
int RectButton2[4];
char Text_Button2[255];
int Object_Listbox1;
int Object_Edit1;
int Edit1_TextLength;
int Menu_Information[7] = {28, MIM_STYLE, MNS_NOTIFYBYPOS, 0, 0, 0, 0};
int Menu1, Menu2 = CreatePopupMenu();
getdisplay(Display_Color, Display_Width, Display_Height);
createdialog(0);
createdialog(1);
showdialog(0, "диалог", Display_Width/2-450, Display_Height/2-400, 700, 400, 1, 1);
MainWindow = window ("диалог");
function getmessage(0, WM_CREATE)
{
Object_Button1 = CreateWindow(0, "BUTTON", "1", WS_VISIBLE | WS_CHILD, 10, 10, 120, 20, gethwnd(0), 0, 0, 0);
Object_Button2 = CreateWindow(0, "BUTTON", "2", WS_VISIBLE | WS_CHILD, 140, 10, 250, 20, gethwnd(0), 0, 0, 0);
Object_Listbox1 = CreateWindow(0, "LISTBOX", "3", WS_BORDER | WS_HSCROLL | WS_VSCROLL | LBS_DISABLENOSCROLL | WS_CHILD | WS_VISIBLE, 400, 10, 200, 200, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_MOUSEWHEEL)
{
MainWindow = window ("диалог");
resettextout(1);
if(message.wparam > 0)
{
Value1++;
}
else
{
Value1--;
}
if (Value1 < 38)
{
Value1 = 38;
}
if (Value1 > 100)
{
Value1 = 100;
}
VisualWindow_Width = 1000/100*Value1;
VisualWindow_Height = 730/100*Value1;
visualwindow(MainWindow, 0, 0, 0, 1000, 730, 10, 40, Value1, #VisualImage[0][0]);
SetWindowPos(Object_Listbox1, 0, VisualWindow_Width+20, 10, 200, VisualWindow_Height+30, 0);
MainWindow.width = 200+VisualWindow_Width+30+(MainWindow.width-MainWindow.widthclient);
MainWindow.height = VisualWindow_Height+50+(MainWindow.height-MainWindow.heightclient);
movewindow(MainWindow);
}
loop()
{
textout(0, 0, 0, format(VisualWindow_Width)+","+format(VisualWindow_Height)+","+format(Value1)+"-"+format(hiword(message.wparam)), 1);
sleep(10);
}
(Добавление)
Проблема в том, что когда быстро крутишь, то размеры окна сильно теряются, а если медленно по 1 значению, то всё супер
(Добавление)
Пожалуйста, нужна помощь! |
|
|
007wan |
Отправлено: 31 Марта, 2019 - 12:26:41
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Всё я сделал. Использовал это и не пойму что к чему немного: CODE:
MainWindow.width = 1000*Value1/100+220+10+(MainWindow.width-MainWindow.widthclient);
MainWindow.height = 730*Value1/100+40+10+(MainWindow.height-MainWindow.heightclient);
movewindow(MainWindow);
Не понимаю: Почеему+220 и +40 и +10
Еще выше есть код . Почему список не четко прижимается к визуальному окну, т.е не одном уровне?
(Добавление)
007wan пишет: Не понимаю: Почеему+220 и +40 и +10 Но это работает и без лагов, а: Zireael пишет: сначала менять размеры диалога, а потом подгонять размер визуала. Ты имел ввиду поменять местами? Пробовал - не работает |
|
|
Zireael |
Отправлено: 31 Марта, 2019 - 13:42:48
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: function getmessage(0, WM_MOUSEWHEEL)
Заменить содержимое функции на это:
CODE:function getmessage(0, WM_MOUSEWHEEL)
{
MainWindow = window ("диалог");
Value1=Value1 + hiword(message.wparam) / 120;
if (Value1 < 38)Value1 = 38;
if (Value1 > 100)Value1 = 100;
VisualWindow_Width = 1000/100*Value1;
VisualWindow_Height = 730/100*Value1;
MainWindow.width = 200+VisualWindow_Width+30+(MainWindow.width-MainWindow.widthclient);
MainWindow.height = VisualWindow_Height+50+(MainWindow.height-MainWindow.heightclient);
movewindow(MainWindow);
SetWindowPos(Object_Listbox1, 0, VisualWindow_Width+20, 10, 200, VisualWindow_Height+30, 0);
visualwindow(MainWindow, 0, 0, 0, 1000, 730, 10, 40, Value1, #VisualImage[0][0]);
update(MainWindow);
} |
|
|
007wan |
Отправлено: 31 Марта, 2019 - 14:05:29
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Спасибо.
(Добавление)
Zireael , CODE:SetWindowPos(Object_Listbox1, 0, VisualWindow_Width+20, 10, 200, VisualWindow_Height+30, 0); Вот высота визуального окна при каждом скролле не равняется с списком, причем если первый раз крутануть, то равняется, а вот следующий раз - нет. и так чередуется. В чем проблема? Как выровнять? Может добавить что-то из этгоо духа:CODE:+(MainWindow.width-MainWindow.widthclient) Однако пробовал, но шикарных результатов мне не дало.
(Добавление)
Такая в голову идея пришла: А возможно ли после скрытия браузера через прозрачность с параметром -1. Отключить звук в браузере определенной игры? Что бы не работала музыка из игры, например. через external.
(Добавление)
Я хочу отключить звук программно, а не так, что бы пришлось игру кликать или по поиску изображениям |
|
|
|