Zireael |
Отправлено: 27 Февраля, 2019 - 14:26:21
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: а с изменением мастаба и уменьшалось и самого окно.
И как это? Тянем за ползунок и тут же окно диалога меняет размеры?
Цитата: Как сделать
Создать диалог, ползунок и вывести визуал можно и по примерам с форума. Начинайте писать код, остальное подскажут. |
|
|
Kibor |
Отправлено: 27 Февраля, 2019 - 15:09:21
|
Эксперт
Просматривает форум
Сообщений всего: 8224
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Zireael пишет: Тянем за ползунок и тут же окно диалога меняет размеры?
Это квест ловкость. Цель - не потерять мышь с ползунка.
(Добавление)
CODE:external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetScrollRange", "SetScrollRange", "User32.dll" );
external(INT, "SetScrollPos", "SetScrollPos", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
int b1, b2, s1, hText, hwnd;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
while(window("Диалог")==0)sleep(10);
win w=window("Диалог");
int min=0, max=300, pos=195;
SetScrollRange(s1,2,min,max,1);
SetScrollPos(s1,2,pos,1);
Изменить();
loop()sleep(1);
function Изменить()
{
SetWindowText(hText, format(pos));
//messagebox (pos);
w.height=pos;
movewindow(w);
}
function getmessage(0, WM_HSCROLL)
{
if (message.lparam==s1)
{
if (message.wparam==1 || message.wparam==3)//SB_LINERIGHT
{
pos=pos+10;
if (pos>max)pos=max;
SetScrollPos(s1,2,pos,1);
Изменить();
return;
}
if (message.wparam==0 || message.wparam==2)//SB_LINELEFT
{
pos=pos-10;
if (pos<min)pos=min;
SetScrollPos(s1,2,pos,1);
Изменить();
return;
}
///////////
if (loword(message.wparam)==5)//Зажали и двигаем
{
pos=pos-(pos-hiword(message.wparam));
if (pos>max)pos=max;
if (pos<min)pos=min;
SetScrollPos(s1,2,pos,1);
Изменить();
}
}
}
//
function getmessage(0, WM_CREATE)//Создание кнопок
{
hwnd = gethwnd(0);
s1=CreateWindow(0, "scrollbar", 0, 1342177280, 10, 10, 200, 20, hwnd, 0, 0, 0);
hText = CreateWindow(0, "STATIC", "",1342177280, 10, 30, 100, 15, hwnd, 0, 0, 0);
} |
|
|
007wan |
Отправлено: 28 Февраля, 2019 - 15:14:03
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Блин. Сложные математические вычисления.
Размер моего диалога 1025, 890
визуальное окно выводится по координатам в окне на 10, 100
масштаб от 0 до 100
не знаю как задать размеры ползунка и чего добавить, что бы мастаб визуального окна уменьшался когда крутим влево соотвественно и окно тоже( снизу и справа)
(Добавление)
Если
int min=0, max=100, pos=59;
SetScrollRange(Scrollbar1,2,min,max,1);
SetScrollPos(Scrollbar1,2,pos,1);
То оптимальный размеры окна при 59 будут 615-570 |
|
|
Zireael |
Отправлено: 01 Марта, 2019 - 03:15:58
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Размер моего диалога 1025, 890
pos=59
1025 * 59 / 100 = 604
890 * 59 / 100 = 525
Цитата: То оптимальный размеры окна при 59 будут 615-570
При таком размере не сохранятся пропорции. |
|
|
007wan |
Отправлено: 01 Марта, 2019 - 14:15:51
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
CODE:showdialog(0, "Диалог", Display_Width/2-400, Display_Height/2-300, 1025, 870, 1, 0);
CODE:visualwindow(MainWindow, 0, x[0]-42, y[0]-89, x[1]+188, y[1]+38, 10, 100, pos, Browser);
Всё-таки не пойму если pos+1, то во сколько раз окно должно увеличиваться и что добавить сюда?
CODE:int min=0, max=100, pos=59;
SetScrollRange(Scrollbar1,2,min,max,1);
SetScrollPos(Scrollbar1,2,pos,1);
Èçìåíèòü();
function Èçìåíèòü()
{
visualwindow(MainWindow, 0, x[0]-42, y[0]-89, x[1]+188, y[1]+38, 10, 100, pos, Browser);
resettextout(1);
//MainWindow.height=pos;
//movewindow(MainWindow);
}
function getmessage(0, WM_HSCROLL)
{
if (message.lparam==Scrollbar1)
{
if (message.wparam==1 || message.wparam==3)
{
pos=pos+1;
if (pos>max)
{
pos=max;
}
SetScrollPos(Scrollbar1,2,pos,1);
Èçìåíèòü();
return;
}
if (message.wparam==0 || message.wparam==2)
{
pos=pos-1;
if (pos<min)
{
pos=min;
}
SetScrollPos(Scrollbar1,2,pos,1);
Èçìåíèòü();
return;
}
///////////
if (loword(message.wparam)==5)
{
pos=pos-(pos-hiword(message.wparam));
if (pos>max)
{
pos=max;
}
if (pos<min)
{
pos=min;
}
SetScrollPos(Scrollbar1,2,pos,1);
Èçìåíèòü();
}
}
}
// |
|
|
Zireael |
Отправлено: 02 Марта, 2019 - 19:11:21
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
А ползунок точно нужен? Может проще растянуть диалог до нужных размеров, а визуал подогнать под размер диалога.
code (Отобразить)CODE:#define WS_SIZEBOX 262144
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
int percent=50; // начальный процент для visual
char name[255];
win w; // указатель на диалог
win game=window ("Program Manager", "Progman", -1); // окно с игрой
createdialog(0);
visualwindow(w, 0, 0, 0, game.width, game.height, 0, 0, percent, game);
loop()sleep(1);
function getmessage (0, WM_CREATE)
{
SetWindowLong(gethwnd(0), -16, GetWindowLong(gethwnd(0), -16) + WS_SIZEBOX); // добавляем стиль к диалогу (позволяет растягивать диалог за край окна)
showdialog(0, "Диалог", 100, 100, game.width * percent / 100, game.height * percent / 100, 1, 0);
while(window("Диалог")==0)sleep(10);
w=window("Диалог");
}
function getmessage (0, WM_SIZE) // если меняется размер окна
{
w=window("Диалог");
percent=w.width * 100 / game.width; // считаем процент для visual в зависимости от размеров диалога
update(w);
visualwindow(w, 0, 0, 0, game.width, game.height, 0, 0, percent, game);
} |
|
|
007wan |
Отправлено: 02 Марта, 2019 - 19:47:20
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Да, но у меня еще должны поместиться контролы, а их может бысть много, а пока 2-4.
Я хочу сделать, что бы было сначала 3 галочки, у первой галки справа ползунок.
А ниже всех этих галочек визуальное окно в масштае 100, от моей игры получается большой вывод изображение на диалог, что даж диалог 1025. 890 размера при масштабе 100 но если окно мешает, я хочу , что бы уменьшалось само окно по мере уменьшения мастшаба визуального окна, учитывая, что бы окно уменьшилось не до конца, потому что прпадут контролы, я пока не могу сделать
(Добавление)
Я могу завтра узнать какой захват изображения у меня имеет визуальное окно, скинуть диалог. А то ваще не вдупляю
(Добавление)
А рамку в принципе могу вывести потом по координатам визуального окна
(Добавление)
Рамка нужна, что бы обозначить визуальное окно, которое выключено/сброшено или очищено от экрана
(Добавление)
Просто регулирование ползунком позволит сделать изображение по качеству лучше или хуже, но за счет качества и будет меняться размер окна, что компактно. Так же из-за качества можно будет что-то в игре разглядеть и увидеть, что что-то там делается... |
|
|
007wan |
Отправлено: 03 Марта, 2019 - 10:43:13
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
CODE://-----------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "EnableWindow", "EnableWindow", "User32.dll" );
external(INT, "SetWindowTextA", "SetWindowTextA", "User32.dll" );
external(INT, "CreateMenu", "CreateMenu", "User32.dll" );
external(INT, "CreatePopupMenu", "CreatePopupMenu", "User32.dll" );
external(INT, "AppendMenu", "AppendMenuA", "User32.dll" );
external(INT, "SetMenuInfo", "SetMenuInfo", "User32.dll" );
external(INT, "SetMenu", "SetMenu", "User32.dll" );
external(INT, "TrackPopupMenu", "TrackPopupMenu", "User32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll" );
external(INT, "TextOut", "TextOutA", "Gdi32.dll" );
external(INT, "SetTextColor", "SetTextColor", "Gdi32.dll" );
external(INT, "SetBkMode", "SetBkMode", "Gdi32.dll" );
external(INT, "InvalidateRect", "InvalidateRect", "user32.dll");
external(INT, "SetScrollRange", "SetScrollRange", "User32.dll" );
external(INT, "SetScrollPos", "SetScrollPos", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "SetScrollRange", "SetScrollRange", "User32.dll" );
external(INT, "SetScrollPos", "SetScrollPos", "User32.dll" );
external(INT, "EnableWindow", "EnableWindow", "user32.dll");
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
getdisplay(Display_Color, Display_Width, Display_Height);
createdialog(0);
showdialog(0, "Äèàëîã", Display_Width/2-400, Display_Height/2-300, 1025, 810, 1, 0);
win MainWindow = window ("Äèàëîã");
win game=window ("Program Manager", "Progman", -1); // îêíî ñ èãðîé
int Display_Color, Display_Width, Display_Height;
int HWND;
int MenuInfo[7] = {28, 16, 134217728, 0, 0, 0, 0};
int Menu1, Menu2, Menu3;
//-----------------------------------------------------------------------
while(window ("Äèàëîã")==0)
{
sleep(1);
}
//-----------------------------------------------------------------------
int Button1 = CreateWindow(0, "BUTTON", "ìèí ðàçìåð", 1342177280, 10, 10, 120, 20, formatwi(MainWindow), 0, 0, 0);
int Button2 = CreateWindow(0, "BUTTON", "ìàêñ ðàçìåð", 1342177280, 140, 10, 250, 20, formatwi(MainWindow), 0, 0, 0);
int Scrollbar1 = CreateWindow(0, "SCROLLBAR", 0, 1342177280, 400, 10, 200, 20, formatwi(MainWindow), 0, 0, 0);
int min=0, max=100, pos=100;
SetScrollRange(Scrollbar1,2,min,max,1);
SetScrollPos(Scrollbar1,2,pos,1);
Èçìåíèòü();
function Èçìåíèòü()
{
visualwindow(MainWindow, 0, 214, 209, 1212, 939, 10, 40, pos, game);
resettextout(1);
}
function getmessage(0, WM_HSCROLL)
{
if (message.lparam==Scrollbar1)
{
if (message.wparam==1 || message.wparam==3)
{
pos=pos+1;
if (pos>max)
{
pos=max;
}
SetScrollPos(Scrollbar1,2,pos,1);
Èçìåíèòü();
return;
}
if (message.wparam==0 || message.wparam==2)
{
pos=pos-1;
if (pos<min)
{
pos=min;
}
SetScrollPos(Scrollbar1,2,pos,1);
Èçìåíèòü();
return;
}
///////////
if (loword(message.wparam)==5)
{
pos=pos-(pos-hiword(message.wparam));
if (pos>max)
{
pos=max;
}
if (pos<min)
{
pos=min;
}
SetScrollPos(Scrollbar1,2,pos,1);
Èçìåíèòü();
}
}
}
//-----------------------------------------------------------------------
loop()
{
textout(0, 0, 0, format(pos), 1);
sleep(10);
}
//-----------------------------------------------------------------------
function getmessage(0, WM_CREATE)
{
HWND = gethwnd(0);
SetMenuInfo(Menu1, address(#MenuInfo[0]));
SetMenu(HWND, Menu1);
}
//-----------------------------------------------------------------------
function getmessage(0, WM_COMMAND)
{
if (message.lparam == Button2)
{
SetScrollPos(Scrollbar1,2,100,1);
Èçìåíèòü();
showdialog(0, "Äèàëîã", Display_Width/2-400, Display_Height/2-300, 1025, 810, 1, 0);
}
if (message.lparam == Button1)
{
showdialog(0, "Äèàëîã", Display_Width/2-400, Display_Height/2-300, 615, 510, 1, 0);
SetScrollPos(Scrollbar1,2,59,1);
Èçìåíèòü();
}
}
(Добавление)
Я не знаю как сделать, что бы ползунок регулировал и не уходил в лево меньше, чем д кнопки "мин размер", а если вправо регулировать, то регулировался до "макс размер" в полном масштабе.
PS : торопился и когда жмете кнопку в диалоге, потом жмите на ползунок, что бы обновить окно
(Добавление)
Кнопки я выставил, что бы показать, что я хочу, а на самом деле регулировка окна будет только с помощью ползунка, эти кнопки имеют другое значение
(Добавление)
Я догнал кажется: нужно min=59. А с размерами окна пока думаю |
|
|
|