Форум » GUI » Как сделать "растяжку" окна? » Ответить

Как сделать "растяжку" окна?

gustow: Вот я тут озадачился: Проектирую я прогу (для простоты - со всего одним окном) и делаю это (главное) окно 640*480 (чтобы в любой по разрешению десктоп влезало, не курочя размещение интерфейса) (и делаю CENTER, естественно)... У кого 640*480 - все как надо, у кого 800*600 или 1024*768 - тже ничего (но окошко выглядит поменьше). А вот у обладателя, к примеру, 1280*1024 - оно будет совсем уж масеньким... И буковки/кнопочки/таблички соответственно... Вы скажете - "И чё?? пусть жмякает по "Maximize" - и имеет окно во весь экран!.." Да, но он (при _стандартном_ подходе) будет иметь те же "масенькие" GUI-объекты - только съедут они к левому верхнему углу полноэкранного окна (а справа и снизу будем иметь широченные пустые полосы)... И результат?.. Один черт - в мелкоту всматриваться, глаза сажать... Как бы поэлегантнее это сделать?: 1) при определении окна и GUI-объектов зафиксировать их стартовые смещения сверху/слева, размеры, фонтсайзы; 2) а по SIZE, MAXIMIZE, RESTORE отлавливать _изменившиеся_ размеры окна - и соответственно менять свойства у GUI-объектов. (тогда юзер имел бы что в полноэкранном, что в НЕполноэкранном окне - ТЕ ЖЕ расположение и пропорции элементов интерфейса). Я попробовал ("корявовато" - только начинаю осваиваться с Harbor'ом и MiniGUI) - вроде выходит (за исключением ширины колонок в GRID (они почему-то - согласно Help'у - доступны только при определении; (D) стоит...), но получается (на экране) покрасивше, чем "стандартным" путем. Если интересно - могу пример запостить. А то вдруг "мэтры" (или Allы) чем помогут? или что придумают? Ежели что - gustow33 пес-барбос mail.ru Заранее спасибки! ЗЫ А Харбор да с ГУЁМ - это замечательно!!! Как насчет порта на Линукс планы (у Лопеза - пока только наметки, как я понял)? ЗЗЫ Я из Екатеринбурга - есть тут земляки? Или "территориально близкие? А "медики" (оттопыриваюсь при обл. Минздраве)? ЗЗЗЫ "Это только я такой тупой? или это фича?"... При попытке вывести на печать с предпросмотром через HB_PRINT почему-то в превью шрифт при разных зумах получается все равно ОДИНАКОВОГО размера - что смотрится (мягко говоря) забавно: ============= #include "minigui.ch" #include "fileio.ch" #include "winprint.ch" // for print using HB_Print library // (preview looks better then MiniPrint - but in zoom shows // in SAME screen font size // [that looks very bad!] ) **************************** function main() DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 600 HEIGHT 400 ; TITLE "Test: Open .TXT and print with preview" ; MAIN @ 100, 400 BUTTON Button_1 ; CAPTION "Get File and Print It" ; HEIGHT 40 ; ACTION TsT() END WINDOW CENTER WINDOW Win_1 ACTIVATE WINDOW Win_1 return NIL *---------------- function TsT Local x LOCAL lSuccess x := Getfile ( , 'Open a File' , , .f. , .t. ) msginfo ( IFEMPTY( x, "Empty value!", x ) ) **** for printing using HB_Print library INIT PRINTSYS SELECT BY DIALOG PREVIEW IF HBPRNERROR>0 release printsys return Nil ENDIF SET UNITS MM START DOC START PAGE @ 10, 10 SAY "Hello World!" TO PRINT @ 20, 10 SAY memoread(x) TO PRINT END PAGE END DOC RELEASE PRINTSYS return Nil ====================

Ответов - 4

gfilatov: gustow, 1) по поводу "ресайза" элементов управления при изменении размеров окна посмотри, как это сделано в примере из папки samples\Advanced\PROCESS_KILLER (процедура ResizeCtrls() ) 2) для правильного масштабирования текста в режиме предпросмотра определи шрифт для вывода текста как в примере ниже: #include "minigui.ch" #include "winprint.ch" // for print using HB_Print library function main() DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 300 HEIGHT 200 ; TITLE "Test: Open .TXT and print with preview" ; MAIN @ 10, 40 BUTTON Button_1 ; CAPTION "Get File and Print It" ; HEIGHT 40 ; ACTION TsT() END WINDOW CENTER WINDOW Win_1 ACTIVATE WINDOW Win_1 return NIL function TsT Local x LOCAL lSuccess x := Getfile ( , 'Open a File' , , .f. , .t. ) INIT PRINTSYS SELECT BY DIALOG PREVIEW IF HBPRNERROR>0 release printsys return Nil ENDIF DEFINE FONT "Font_1" NAME "MS Sans Serif" SIZE 12 SET UNITS MM START DOC START PAGE @ 10, 10 SAY "Hello World!" FONT "Font_1" TO PRINT @ 20, 10 SAY memoread(x) FONT "Font_1" TO PRINT END PAGE END DOC RELEASE PRINTSYS return Nil

gustow: Спасибо за подсказку. Разобрался. Понял. Все-таки Харбор с ГУЁМ - "эт, баенька, хршо!" ((с) Стругацкие "Понедельник...")

Dima: gfilatov пишет: 1) по поводу "ресайза" элементов управления при изменении размеров окна посмотри, как это сделано в примере из папки samples\Advanced\PROCESS_KILLER (процедура ResizeCtrls() Только заметил что в MS OFFICE (например EXCEL) не делается ресайз элементов окна при изменении его размеров, просто и оригинально.


Vlad04: gustow Я обычно запрещаю распахивать окно, но растягиваю его сам на высоту экрана -GetDesktopHeight ( ). Для раличных рарешений экрана смотрится приемлимо.



полная версия страницы