Автор | Сообщение |
Andrey
|
| постоянный участник
|
Пост N: 1929
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.11.11 21:36. Заголовок: Примеры из Минигуи -ошибки, вопросы.....
Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 (наверно AVI-шки нет в ресурсах) Предложение Григорию: Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ? Пример: \MiniGUI\SAMPLES\Advanced\DisplayMode - не работает под ХР и далее.... Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - вылетает на ХР -------------------------------------------------------------------------------- Harbour MiniGUI Errorlog File Harbour MiniGUI Extended Edition 2.0.1 - 2011.09.21 -------------------------------------------------------------------------------- Date: 11/15/2011 Time: 22:13:24 Error BASE/1124 Argument error: LEFT Called from LEFT(0) Called from SCANSOFT(195) Called from MAIN(84) Пример: \MiniGUI\SAMPLES\BASIC\MsgEdit - не собирается... Z:\MiniGUI\SAMPLES\BASIC\MsgEdit>call ..\..\..\batch\compile.bat demo /L shell32 Harbour 3.1.0dev (Rev. 17042) Copyright (c) 1999-2011, http://harbour-project.org/ Compiling 'demo.prg'... Lines 20133, Functions/Procedures 30 Generating C source output to 'demo.c'... Done. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland demo.c: Error E2141 demo.prg 993: Declaration syntax error *** 1 errors in Compile *** C compile error.
| |
|
Ответов - 301
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|
gfilatov2002
|
| moderator
|
Пост N: 293
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.11.11 23:16. Заголовок: Andrey пишет: Взялс..
Andrey пишет: цитата: | Взялся смотреть примеры из МиниГуи, так не все работают |
| Andrey пишет: цитата: | \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 |
| Посмотрю, что можно сделать... Andrey пишет: цитата: | Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - вылетает на ХР |
| Похоже, у Вас есть некорректно установленные программы Но все равно попробую поправить... Andrey пишет: цитата: | Пример: \MiniGUI\SAMPLES\BASIC\MsgEdit - не собирается |
| Устаревшая информация! Проверьте на текущей версии 2.0.3 - дата файла demo.prg должна быть 11.10.2011
| |
|
Andrey
|
| постоянный участник
|
Пост N: 1932
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.11.11 15:43. Заголовок: Пример: \MiniGUI..
Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - в версии 2.0.3 работает ! Классный пример ! Хочу также и для хХарбора !!! gfilatov2002 пишет: цитата: | Устаревшая информация! Проверьте на текущей версии 2.0.3 - дата файла demo.prg должна быть 11.10.2011 |
| Точно в версии 2.0.3 работает ! Классный пример ! Остался \MiniGUI\SAMPLES\Advanced\AVI_Animation И еще: Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 294
Зарегистрирован: 11.02.10
|
|
Отправлено: 16.11.11 16:02. Заголовок: Andrey пишет: Остал..
Andrey пишет: цитата: | Остался \MiniGUI\SAMPLES\Advanced\AVI_Animation |
| Переработал этот пример: - avi-файл хранится в ресурсах проекта; - элемент управления ANIMATERES определен как пользовательский компонент и теперь его можно вызвать из своей программы, подключив в нее файл animate.prg
| |
|
Andrey
|
| постоянный участник
|
Пост N: 1934
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.11.11 13:57. Заголовок: Пример: \MiniGU..
Пример: \MiniGUI\SAMPLES\BASIC\Menu_2>demo2.exe Выглядит так: Как сделать чтоб само меню было с левой стороны ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2025
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.01.12 14:15. Заголовок: Столкнулся с непоказ..
Столкнулся с непоказом иконки на форме. Какой максимальны размер иконки можно выводить ? Если использую одну иконку 128х128 в ICO-файле и записываю ее в ресурсный файл, то не показывает. Как можно выводить из ICO-файла конкретную иконку, т.е. нужно допустим 128х128 ? Может я чего то не понимаю, объясните мне пожалуйста как происходит показ иконок из ресурсов. Заранее спасибо.
| |
|
PSP
|
| постоянный участник
|
Пост N: 713
Зарегистрирован: 27.01.07
|
|
Отправлено: 24.01.12 14:24. Заголовок: Если не ошибаюсь, то..
Если не ошибаюсь, то набор размеров для винды такой: 256х256, 48х48, 32х32 и 16х16. 128х128 используется в Mac OS. Винда сама выбирает размер в зависимости от того, в каком месте интерфейса рисуется иконка. Если нужного размера нет, то ничего и не нарисует. Имхо.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2026
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.01.12 14:28. Заголовок: PSP пишет: 128х128 ..
PSP пишет: цитата: | 128х128 используется в Mac OS. |
| Т.е. если я использую одну иконку 128х128 в ICO-файле и записываю ее в ресурсный файл, то при показе ICO на форме ничего показываться не будет ?
| |
|
PSP
|
| постоянный участник
|
Пост N: 714
Зарегистрирован: 27.01.07
|
|
Отправлено: 24.01.12 14:33. Заголовок: http://www.allok.ru/..
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2027
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.01.12 18:40. Заголовок: PSP Спасибо большое ..
PSP Спасибо большое !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2071
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.02.12 13:34. Заголовок: Вопрос по примеру sa..
Вопрос по примеру samples\Advanced\MenuEx По хелпу читал, так и не понял. Как задать шрифт (по умолчанию он 10) в верхнем меню программы ?
| |
|
Softlog86
|
| |
Пост N: 31
Зарегистрирован: 03.12.08
|
|
Отправлено: 26.02.12 17:07. Заголовок: Andrey По моему эти ..
Andrey По моему эти вопросы решает сама Винда ....
| |
|
|
Andrey
|
| постоянный участник
|
Пост N: 2073
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.02.12 17:30. Заголовок: Softlog86 пишет: По..
Softlog86 пишет: цитата: | По моему эти вопросы решает сама Винда .... |
| А почему тогда можно увеличить и изменить шрифт в ниспадающем меню ? Значит можно увеличить и шрифт верхнего меню программы ! Но вот только как ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 340
Зарегистрирован: 11.02.10
|
|
Отправлено: 26.02.12 20:47. Заголовок: Andrey пишет: Значи..
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2074
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.02.12 22:21. Заголовок: Судя по ссылке, прог..
Судя по ссылке, программно (из МиниГуи) никак ! Очень жалко... Спасибо за терпение....
| |
|
vovchok
|
| |
Пост N: 1
Зарегистрирован: 28.02.12
|
|
Отправлено: 29.02.12 00:45. Заголовок: Andrey Кажись я таки..
Andrey Кажись я таки нашел Вас... Это Ваш пример? У меня пара ламерских вопросов (потому как клиппером 17 лет не занимался и основательно забыл его). Скачал MiniGUI с того поста, но скомпилировать вышеупомянутый пример так и не удалось - ругается "unresolved external _hd_fun_adosettable_" и "unresolved external _hd_fun_adordd_". Добавил #include "c:\MiniGUI\Harbour\lib\adordd.lib" - прежние ошибки при компиляции сменились кучей ошибок c:\MiniGUI\Harbour\lib\adordd.lib(1) Error E0001 Illegal character '\x00' и в конце c:\MiniGUI\Harbour\lib\adordd.lib(1) Error E0030 Syntax error "syntax error at 'Ё'" Еще одна проблема - взял пример tutor20.prg из того же MiniGUI и наткнулся на невозможность включить 866 кодировку, в которой почему-то работает Excel с файлами dbase4. Получается, что то, что в dbf занесено в Excel не читабельно в BROWSE от Harbour и наоборот. Вставлял REQUEST HB_CODEPAGE_RU866 после #include и hb_SetCodepage( "RU866" ) после main - никакой реакции: ни на что не ругается но выдает всю кирилицу в 1251. Как победить?
| |
|
AlexMyr
|
| |
Пост N: 458
Зарегистрирован: 11.06.10
|
|
Отправлено: 29.02.12 09:40. Заголовок: vovchok пишет: Скач..
vovchok пишет: цитата: | Скачал MiniGUI с того поста, но скомпилировать вышеупомянутый пример так и не удалось - ругается "unresolved external _hd_fun_adosettable_" и "unresolved external _hd_fun_adordd_". |
|
Minigui тут ни причем! Чистый harbour. Попробуйте тот же пример, только без adordd и создания базы access, а просто база dbf REQUEST HB_LANG_RUWIN REQUEST HB_CODEPAGE_RU1251 Function Main() Local nI:=45, nK:=32 // - объявление переменных hb_SetCodepage( "RU1251" ) // - переключение на русскую кодировку (доступны и др.языки, со всеми сортировками, датами и .д.) DbCreate( "test2", { { "FIRST", "C", 10, 0 },; { "LAST", "C", 10, 0 },; { "AGE", "N", 8, 0 } } ) // - создать таблицу USE test2 // - открыть таблицу APPEND BLANK // - добавить запись в таблицу test2->First := "Вася" // - запись в поле test2->Last := "Сидоров" test2->Age := nI APPEND BLANK test2->First := "Коля" test2->Last := "Пупкин" test2->Age := nK GO TOP // переместить указатель на первую запись в таблице Browse() // показать таблицу со всеми записями..... return nil
| |
|
vovchok
|
| |
Пост N: 2
Зарегистрирован: 28.02.12
|
|
Отправлено: 29.02.12 21:18. Заголовок: Попробуйте тот же пр..
цитата: | Попробуйте тот же пример, только без adordd и создания базы access, а просто база dbf |
|
Что-то все равно не то... В процессе компиляции не ругается, но созданный EXEшник зависает в памяти ничего не выдавая на экран (видимо Browse() глючит) и его приходится снимать принудительно. Кроме того созданная база выглядит в Excel таким образом (крякозябы) FIRST LAST AGE ┬рё ╤шфюЁют 45 ╩юы ╧єяъшэ 32 А все потому, что кирилица в DBF в понимании мелкософтов должна быть в кодировке 866, а не 1251. Но включить 866 не получается - как это сделать? цитата: | Minigui тут ни причем! Чистый harbour |
|
MiniGUI - это виндовый оконный интерфейс, а чистый Harbour работает лишь с системной консолью? Что же все-таки должна выдавать функция Browse()?
| |
|
AlexMyr
|
| |
Пост N: 461
Зарегистрирован: 11.06.10
|
|
Отправлено: 29.02.12 21:35. Заголовок: Вот рабочий пример, ..
Вот рабочий пример, проверил func main() Local nI:=45, nK:=32 // - объявление переменных REQUEST HB_CODEPAGE_RU1251 REQUEST HB_CODEPAGE_RU866 HB_CDPSELECT( "RU866" ) // - переключение на русскую кодировку (доступны и др.языки, со всеми сортировками, датами и .д.) DbCreate( "test2", { { "FIRST", "C", 10, 0 },{ "LAST", "C", 10, 0 },{ "AGE", "N", 8, 0 } } ) // - создать таблицу USE test2 // - открыть таблицу APPEND BLANK // - добавить запись в таблицу test2->First := "Вася" // - запись в поле test2->Last := "Сидоров" test2->Age := nI APPEND BLANK test2->First := "Коля" test2->Last := "Пупкин" test2->Age := nK GO TOP // переместить указатель на первую запись в таблице Browse() // показать таблицу со всеми записями..... return nil вот browse ╒═════════════════════════════════════════════════════════════════════ │ Record 1/2 │ FIRST LAST AGE ╞══════════════════════════════════ ══════════ ═══════════════════════ │ Вася Сидоров 45 │ Коля Пупкин 32 │ │ │ │
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2078
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.02.12 22:09. Заголовок: vovchok пишет: Скач..
vovchok пишет: цитата: | Скачал MiniGUI с того поста |
| Какая версия ? vovchok пишет: цитата: | MiniGUI - это виндовый оконный интерфейс, а чистый Harbour работает лишь с системной консолью? |
| Harbour работает везде - и в МиниГуи и Qt и в терминалке. Это язык программирования. Более подробно читайте: http://ru.wikipedia.org/wiki/Harbour Почитайте также как установить: http://clipper.borda.ru/?1-4-0-00000515-000-0-0-1267900828 А потом напишите - какую задачу вы хотите сделать: терминалку под Win32 или полноценное приложение Win32 на МиниГуи ?
| |
|
AlexMyr
|
| |
Пост N: 463
Зарегистрирован: 11.06.10
|
|
Отправлено: 29.02.12 23:02. Заголовок: Andrey пишет: Harbo..
Andrey пишет: цитата: | Harbour работает везде - и в МиниГуи |
|
это как?
| |
|
vovchok
|
| |
Пост N: 3
Зарегистрирован: 28.02.12
|
|
Отправлено: 01.03.12 00:06. Заголовок: Чувствую себя в танк..
Чувствую себя в танке в башне и в шлемофоне... AlexMyr пишет: цитата: | Вот рабочий пример, проверил |
|
Эффект все тот же - Browse() не работает и вешает программу с блокировкой базы. Пробовал запускать в системной консоли - результат не меняется - на экран вообще ничего не выводится, а в диспетчере задач висит процесс с именем проги и блокирует базу. Когда Browse() комментирую - создает файл без зависания, но все с теми же крякозябами. Видимо Harbour у Вас не такой, как у меня. Andrey пишет: не знаю где это посмотреть - файл hmg-1.7-79-setup.zip, BCC55 Andrey А почему с базами Access у меня в Вашем примере не получается ничего?
| |
|
|
AlexMyr
|
| |
Пост N: 464
Зарегистрирован: 11.06.10
|
|
Отправлено: 01.03.12 00:25. Заголовок: vovchok пишет: не з..
| |
|
vovchok
|
| |
Пост N: 4
Зарегистрирован: 28.02.12
|
|
Отправлено: 01.03.12 00:35. Заголовок: AlexMyr пишет: Ищите..
AlexMyr пишет: цитата: | Ищите папку harbour/bin потом команда |
|
c:\MiniGUI\Harbour\bin>harbour -build Harbour 2.0.0 (Rev. 13372) Copyright (c) 1999-2010, http://www.harbour-project.org/ Harbour MiniGUI Extended Distribution AlexMyr пишет: Это я тоже разворачивал и harbour-nightly-win (3.1), но хотел выполнить пример Андрея, а оно не дается мне никак - вот и взял его же дистрибутив из поста с примером. К тому же в том пакете MiniGUI есть пакетники для компиляции, а в чистом Harbour я их не обнаружил... Хотя может плохо искал... Кстати примеры, которые в том MiniGIU компилируются и выполняются без проблем, довольно таки поучительно, если что-то писать под винды.
| |
|
AlexMyr
|
| |
Пост N: 465
Зарегистрирован: 11.06.10
|
|
Отправлено: 01.03.12 00:43. Заголовок: В harbour есть утили..
В harbour есть утилита hbmk2, ее и используете для сборки prg в exe: Допустим мой пример, имя файла test1.prg, выполняете комманду: hbmk2 test1.prg, должно получиться test1.exe, никаких батников не нужно.
| |
|
vovchok
|
| |
Пост N: 5
Зарегистрирован: 28.02.12
|
|
Отправлено: 01.03.12 01:23. Заголовок: AlexMyr пишет: выпол..
AlexMyr пишет: цитата: | выполняете комманду: hbmk2 test1.prg, должно получиться test1.exe |
|
Выполнил на HB31 - заработало в системной консоли, но крякозябы все равно и в окне программы и в Excel. REQUEST HB_CODEPAGE_RU866 HB_CDPSELECT( "RU866" ) не работает
| |
|
AlexMyr
|
| |
Пост N: 466
Зарегистрирован: 11.06.10
|
|
Отправлено: 01.03.12 01:36. Заголовок: Я давал пример в дос..
Я давал пример в дос кодировке, потому у меня и выбирается дос кодировка HB_CDPSELECT( "RU866" ), если Вы скопировали текст с форума и вставили его в редактор в вин кодировке, то нужно и выбирать вин кодировку HB_CDPSELECT( "RU1251" )
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2082
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.03.12 09:22. Заголовок: AlexMyr пишет: Andr..
AlexMyr пишет: цитата: | Andrey пишет: цитата: Harbour работает везде - и в МиниГуи это как? |
| Я имел ввиду, что МиниГуи (HMG EE) это библиотека, с которой можно работать на языках: Харбор и хХарбор. Петр пишет: цитата: | Дать точное описание HMG EE трудно и на русском. Для меня это набор который состоит из компилятора Harbour, ряда библиотек, конечно же главной из которых является одноименная HMG EE GUI библиотека для платформы Windows базирующаяся на WinAPI, утилит и огромного числа примеров использования как самой библиотеки, так и WinAPI. Ну и IDE. |
| http://clipper.borda.ru/?1-1-160-00000188-000-0-0-1248515674
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2084
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.03.12 10:15. Заголовок: Да. vovchok пишет: ..
Да. vovchok пишет: цитата: | Andrey А почему с базами Access у меня в Вашем примере не получается ничего? |
| Посмотрите примеры в папках: \MiniGUI\SAMPLES\BASIC\Adordd ............... \MiniGUI\SAMPLES\BASIC\ADORDD_4
| |
|
vovchok
|
| |
Пост N: 6
Зарегистрирован: 28.02.12
|
|
Отправлено: 01.03.12 11:27. Заголовок: Andrey пишет: Посмот..
Andrey пишет: цитата: | Посмотрите примеры в папках: \MiniGUI\SAMPLES\BASIC\Adordd |
|
Я имею ввиду конкретный Ваш пример - почему он не работает? Или Вы его там привели просто как абстрактный образец исходника на Harbour не предполагая, что кто-то его надумает компилировать и он должен быть рабочим? AlexMyr пишет: цитата: | если Вы скопировали текст с форума и вставили его в редактор в вин кодировке, то нужно и выбирать вин кодировку |
|
т.е. выбор кодировки в программе не предполагает введение содержимого в этой кодировке, а только устанавливает порядок сортировки? Что нужно сделать, чтобы текст кирилицы, вводимой в поле БД DBF сохранялся в нем в DOS кодировке, как это происходит, если ту же базу заполнять в Excel? Меня интересует вот этот пример из MiniGUI: http://zalil.ru/32797519 - попробуйте заполнить имеющуюся в нем базу из скомпилированной программы и из Excel. Как добиться, чтобы прога вводила так же как Excel?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2085
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.03.12 12:30. Заголовок: vovchok пишет: Или ..
vovchok пишет: цитата: | Или Вы его там привели просто как абстрактный образец исходника на Harbour не предполагая, что кто-то его надумает компилировать и он должен быть рабочим? |
| Именно так !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2086
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.03.12 13:35. Заголовок: vovchok пишет: т.е...
vovchok пишет: цитата: | т.е. выбор кодировки в программе не предполагает введение содержимого в этой кодировке, а только устанавливает порядок сортировки? |
| Да ! Если вы используете MINIGUI ! Для терминалки - нет ! vovchok пишет: цитата: | Что нужно сделать, чтобы текст кирилицы, вводимой в поле БД DBF сохранялся в нем в DOS кодировке, как это происходит, если ту же базу заполнять в Excel? Меня интересует вот этот пример из MiniGUI: http://zalil.ru/32797519 - попробуйте заполнить имеющуюся в нем базу из скомпилированной программы и из Excel. Как добиться, чтобы прога вводила так же как Excel? |
| Если вы начали работать с МиниГуи, то необходимо почитать документацию \MiniGUI\Doc Или посмотрите примеры по базам (:\MiniGUI\SAMPLES\Applications\DBFview) Я в МиниГуи не работал сам еще с базами. Пока еще не перешел на МиниГуи. Так что ваш вопрос адресуйте gfilatov2002 ! Могу помочь только с ТЕРМИНАЛКАМИ. EXCEL вводит кодировку RU1251, зачем использовать DOS-кодировку ?
| |
|
|
vovchok
|
| |
Пост N: 7
Зарегистрирован: 28.02.12
|
|
Отправлено: 01.03.12 17:11. Заголовок: Andrey пишет: EXCEL ..
Andrey пишет: цитата: | EXCEL вводит кодировку RU1251, зачем использовать DOS-кодировку ? |
|
Простите мне мою дерзость, т.к. мне приходится Вам перечить, но у меня, если я создаю файл в Excel, ввожу в нем кирилицу и сохраняю его как dbf - вся кирилица получается в dos кодировке и через проги, написанные с применением MiniGUI, не просматривается (office2003). Собственно поэтому я и спросил - что надо указать в проге на MiniGIU, чтобы кирилица в графических окнах была в кодировке 866, и то, что набрано в Excel было читабельно?
| |
|
gustow
|
| постоянный участник
|
Пост N: 272
Зарегистрирован: 06.02.07
|
|
Отправлено: 01.03.12 19:16. Заголовок: vovchok , может быть..
vovchok , может быть, хоть в чем-то "для старта с ноля" поможет начатый да заброшенный мной "курс мол.бойца по МиниГУИ"? хоть немного вопросов снимет? оно тут: http://gustow.narod.ru/harbour/MiniGUI_help/welcome.htm . Заодно и отрецензировали бы имеющееся там - как уж явно самый "молодой боец" (в смысле - с МиниГУИ). :)
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2088
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.03.12 19:17. Заголовок: vovchok пишет: Прос..
vovchok пишет: цитата: | Простите мне мою дерзость, т.к. мне приходится Вам перечить |
| Да не заморачивайся, причем тут дерзость и перечить... Я просто спросил. vovchok пишет: цитата: | Собственно поэтому я и спросил - что надо указать в проге на MiniGIU, чтобы кирилица в графических окнах была в кодировке 866, и то, что набрано в Excel было читабельно? |
| Подправил ваш исходник. Да все равно не показывает DOS-кодировку. Хотя \MiniGUI\SAMPLES\Applications\DBFview показывает правильно. Там наверно что-то в BROWSE передавать надо.... Увы, моих знаний не хватает. Так что ваш вопрос адресуйте gfilatov2002 !
| |
|
vovchok
|
| |
Пост N: 8
Зарегистрирован: 28.02.12
|
|
Отправлено: 01.03.12 23:42. Заголовок: AlexMyr пишет:В harb..
AlexMyr пишет: цитата: | В harbour есть утилита hbmk2, ее и используете для сборки prg в exe: |
|
Все было хорошо, пока в программе не было ошибок... (компилировал готовые примеры, но когда начал ваять свое...) Теперь оно быстро моргает окном на экране и ничего не делает - где посмотреть почему? (exeшник не создается, ругательств не видно - просто запускается и тут же закрывается...)
| |
|
AlexMyr
|
| |
Пост N: 469
Зарегистрирован: 11.06.10
|
|
Отправлено: 01.03.12 23:47. Заголовок: vovchok пишет: Все ..
vovchok пишет: цитата: | Все было хорошо, пока в программе не было ошибок... |
| hbmk2 test1.prg -trace >err.log 2>&1
| |
|
Vlad04
|
| постоянный участник
|
Пост N: 300
Зарегистрирован: 13.10.05
|
|
Отправлено: 02.03.12 13:52. Заголовок: В MiniGU я использу..
В MiniGU я использую IDE. Там ведется лог ошибок. Все собирается. А с DOS кодировкой не получилось.Но работать с Excel можно как угодно. Используй для ввода данных в дбф специальные программы - здесь ПАША выкладывал свою, много есть чужих , поддерживающих обе кодировки( я применяю еще DBF dESKTOP)
| |
|
vovchok
|
| |
Пост N: 9
Зарегистрирован: 28.02.12
|
|
Отправлено: 03.03.12 10:46. Заголовок: Сори за оффтоп - мал..
Сори за оффтоп - маленький вопрос не по теме, но не хотел начинать новую. Нужен генератор случайных чисел - в клиппере такого не встречал, есть это в Harbour, или нужно использовать С? ps:Вопрос снимаю - нашел: round(HB_RANDOM(),10) возвращает случайное число от 0 до 1 с точностью 10 знаков.
| |
|
AlexMyr
|
| |
Пост N: 471
Зарегистрирован: 11.06.10
|
|
Отправлено: 03.03.12 14:14. Заголовок: vovchok пишет: Нуже..
vovchok пишет: цитата: | Нужен генератор случайных чисел - в клиппере такого не встречал, есть это в Harbour |
|
в hbmk2 используется hb_rand32()
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2092
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.12 16:21. Заголовок: Vlad04 пишет: А с D..
Vlad04 пишет: цитата: | А с DOS кодировкой не получилось. |
| Что тогда получается НЕЛЬЗЯ использовать @ 5,5 BROWSE Browse_1 ; WIDTH 930 ; HEIGHT 423 ; HEADERS { 'Code' , 'First Name' , 'Last Name', 'Birth Date', 'Married' , 'Biography' } ; WIDTHS { 50 , 120 , 120 , 70 , 60 , 490 } ; WORKAREA Test ; FIELDS { 'Test->Code' , 'Test->First' , 'Test->Last' , 'Test->Birth' , 'Test->Married' , 'Test->Bio' } ; DELETE ; LOCK ; EDIT INPLACE для DOS-кодировки ? Кто может помочь в решении этой проблемы ? Пример здесь. http://files.mail.ru/X77OOJ
| |
|
gfilatov2002
|
| moderator
|
Пост N: 344
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.03.12 17:25. Заголовок: Andrey пишет: Кто м..
Andrey пишет: цитата: | Кто может помочь в решении этой проблемы ? |
| Скорая помощь прибыла См. рабочий пример ниже Скрытый текст
REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 #include "minigui.ch" Function Main hb_SetCodepage( "RU1251" ) DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 950 HEIGHT 480 ; TITLE 'Tutor 20: BROWSE Test' ; MAIN NOMAXIMIZE ; ON INIT OpenTables() ; ON RELEASE CloseTables() ; DEFINE MAIN MENU POPUP 'File' ITEM 'Set Browse Value' ACTION Win_1.Browse_1.Value := Val ( InputBox ('Set Browse Value','') ) ITEM 'Get Browse Value' ACTION MsgInfo ( Str ( Win_1.Browse_1.Value ) ) SEPARATOR ITEM 'Exit' ACTION Win_1.Release END POPUP POPUP 'Help' ITEM 'About' ACTION MsgInfo ("Tutor 20: BROWSE Test") END POPUP END MENU @ 5,5 BROWSE Browse_1 ; WIDTH 930 ; HEIGHT 423 ; HEADERS { 'Code' , 'First Name' , 'Last Name', 'Birth Date', 'Married' , 'Biography' } ; WIDTHS { 50 , 120 , 120 , 70 , 60 , 490 } ; WORKAREA Test ; FIELDS { 'Code' , 'First' , 'Last' , 'Birth' , 'Married' , 'Bio' } ; DELETE ; LOCK ; EDIT INPLACE ; FONT "Courier Cur" SIZE 10 END WINDOW Win_1.Browse_1.Value := 1 Win_1.Browse_1.Refresh CENTER WINDOW Win_1 ACTIVATE WINDOW Win_1 Return Nil Procedure OpenTables() Use Test Codepage "RU866" Shared New Return Procedure CloseTables() Use Return
|
| |
|
|
Andrey
|
| постоянный участник
|
Пост N: 2093
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.12 22:38. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Ну что мы без тебя делали .... Спасибо большое ! 2 правильные строчки и все работает.... Чувствуется рука мастера....
| |
|
SergKis
|
| постоянный участник
|
Пост N: 5
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.03.12 08:41. Заголовок: Пример: \MiniGUI..
Пример: \MiniGUI\SAMPLES\BASIC\Mdi_2>demo.exe В browse по Up/Dn курсор двигается через строку (как будто dbSkip(2)). Это только у меня или это err ? HB 2.0, MiniGUI 2.07
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2111
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.03.12 22:44. Заголовок: SergKis пишет: HB 2..
SergKis пишет: Если установлен MiniGUI 2.0.7, то там используется Харбор - Version: 3.1.0dev ! У меня тоже через строку курсор двигается. И в добавок на большой базе (200 полей и 242 Mb) вешается программа.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 6
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.03.12 23:20. Заголовок: Andrey пишет: Если у..
Andrey пишет: цитата: | Если установлен MiniGUI 2.0.7, то там используется Харбор - Version: 3.1.0dev ! |
| У нас VC9. Все, что надо на данный момент (опробовано примерами) работает без проблем. В MiniGUI MDI немного похоже сыроват (неточность с проскоком строки в browse мой товарищ уже нашел. Он основной c++ в нашей команде). Но полезли еще фишки ... . MDI child окно три browse в работе проблемы: 1. VK_TAB реагирует, но НЕ переходит в фокус след. окна (в обычном режиме переключает) и т.д. 2. ON KEY ESCAPE на окно реагирует нормально, но при включении EDIT [INPLACE] (внутри browse идет переназначение ESC на контрол ввода), то при возврате в окно теряется первоначальное назначение (нет сохранения/восстановления ON KEY в edit).
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2113
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.03.12 23:26. Заголовок: SergKis пишет: Но п..
SergKis пишет: Это только Григорий вам поможет, я очень слаб пока в МиниГуи....
| |
|
SergKis
|
| постоянный участник
|
Пост N: 7
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.03.12 23:34. Заголовок: Andrey пишет: Это то..
Andrey пишет: цитата: | Это только Григорий вам поможет |
| Если Григорий учтет это в след. версия будет отлично. А т.к. нам надо срочно и быстро будем пилить что-то под себя. Спасибо, что посмотрел MDI, а то сначала думали, что сами занесли что-то при адаптации к vc.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2145
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.04.12 13:18. Заголовок: Непонятка по иконкам..
Непонятка по иконкам в диалоговых окнах.... Можно задать одну иконку на все диалоговые окна ? И где можно посмотреть пример ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 363
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.04.12 09:43. Заголовок: Andrey пишет: Почем..
Andrey пишет: Не верно, иконка на рисунке есть - просто она стандартная Andrey пишет: цитата: | где можно посмотреть пример ? |
| Рабочий пример для задания своей иконки в диалоговых окнах есть в папке samples\Basic\MsgBox (см. пункт меню 'Extend HMG MsgBox')
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2146
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.04.12 11:26. Заголовок: Спасибо. :sm36: А..
Спасибо. А можно ли (в ХР) программно поменять цвет окна на другой для некоторых окон ? Или для всей программы ? Я знаю что в темах Windows изменить цвета можно. Я просто хочу для своей программы цвет изменить !
| |
|
AndreyZh
|
| |
Пост N: 221
Зарегистрирован: 12.11.06
|
|
Отправлено: 05.04.12 14:47. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Рабочий пример для задания своей иконки в диалоговых окнах есть в папке samples\Basic\MsgBox (см. пункт меню 'Extend HMG MsgBox') |
| Весело... всё таки: 1. Иконка ICON "name.ico" при размещении не после title даёт ошибку компиляции 2. В примерах расширение для файла иконок не обязательно, но если менять другие примеры... иконки (имя) без расширения не воспринимается
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2165
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.04.12 23:17. Заголовок: Пытаюсь сделать прог..
Пытаюсь сделать программу на несколько разрешений экрана: 1) 800 на 600 2) 1024 на 768 3) и выше Как НУЖНО (правильно) сделать программу на разное разрешение экрана ??? Приведите примерный код пожалуйста !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2168
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.04.12 12:15. Заголовок: Какая функция в Мини..
Какая функция в МиниГуи возвращает разрешение экрана и размеры рабочего стола ?
| |
|
Петр
|
| постоянный участник
|
Пост N: 1090
Зарегистрирован: 09.10.06
|
|
Отправлено: 16.04.12 12:52. Заголовок: Просмотр примеров и ..
Просмотр среди примеров, поставляемых с библиотекой и поиск по форуме, ключевое слово desktop, тема "Размеры экрана" - помогут вам
| |
|
SergKis
|
| постоянный участник
|
Пост N: 17
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.04.12 13:13. Заголовок: Для Andrey. Вот прим..
Для Andrey. Вот примерная выборка функций: Скрытый текст GETACTIVEWINDOW() SETACTIVEWINDOW(hWnd) SETFOREGROUNDWINDOW(hWnd) GETFOREGROUNDWINDOW() C_CENTER(hWnd[,.T./.F.]) // if( hb_parl( 2 ) ); CenterIntoParent( hwnd ); GETFOCUS() GETDESKTOPWIDTH() GETDESKTOPHEIGHT() GETWINDOWRECT(hWnd) GETVSCROLLBARWIDTH() GETHSCROLLBARHEIGHT() GETWINDOWROW(hWnd) GETWINDOWCOL(hWnd) GETWINDOWWIDTH(hWnd) GETWINDOWHEIGHT(hWnd) GETTITLEHEIGHT() GETBORDERHEIGHT() GETBORDERWIDTH() GETMENUBARHEIGHT() Для расчета размеров колонок (browse) и др.контролов: nWidth := GETTEXTWIDTH(NIL, repl('B', 30), InitFont("Arial", 9)) nWidth := GETTEXTWIDTH(NIL, repl('B', 30), _HMG_aControlFontHandle[nIndex] )) nHeigth := GETTEXTHEIGHT(NIL, "B", InitFont("Arial", 9))
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2169
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.04.12 13:44. Заголовок: SergKis пишет: Вот ..
SergKis пишет: цитата: | Вот примерная выборка функций |
| Спасибо большое !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2170
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.04.12 13:53. Заголовок: А как насчет этого в..
А как насчет этого вопроса: Пытаюсь сделать программу на несколько разрешений экрана: 1) 800 на 600 2) 1024 на 768 3) и выше Как НУЖНО (правильно) сделать программу на разное разрешение экрана ??? Приведите примерный код пожалуйста !
| |
|
gfilatov2002
|
| moderator
|
Пост N: 368
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.04.12 10:00. Заголовок: Andrey пишет: Приве..
Andrey пишет: Внимательно посмотри изменения, внесенные в стандарный пример Алексеем Густовым (функция Def_Pubs() и использование в коде коэффициентов gu_hk и gu_vk): /* * 2009-Apr-01 (it's not joke! it's today!) * modified for "windows/controls auto-zoom" by * Alex Gustow < gustow33 @ mail.ru > * < http://gustow.narod.ru/harbour/harbour.htm > * * + little code modifications (by Gustow too) * * code reindenting made with "Indent.exe" from MiniGUI\UTILS\Code_ReIndent */ /* * MINIGUI - Harbour Win32 GUI library Demo * * Copyright 2002 Roberto Lopez <harbourminigui@gmail.com> * http://harbourminigui.googlepages.com/ * * Update 2002 Interativo Networks <xharbour@terra.com.br> * Daniel Crocciari * http://www.ihpz.net * * * Modified by Roberto Lopez <harbourminigui@gmail.com> 2007.12.02 * */ * Value property selects a record by its number (RecNo()) * Value property returns selected record number (recNo()) * Browse control does not change the active work area * Browse control does not change the record pointer in any area * (nor change selection when it changes) * You can programatically refresh it using refresh method. * Variables called <MemVar>.<WorkAreaName>.<FieldName> are created for * validation in browse editing window. You can use it in VALID array. * Using APPEND clause you can add records to table associated with WORKAREA * clause. The hotkey to add records is Alt+A. * Append Clause Can't Be Used With Fields Not Belonging To Browse WorkArea * Using DELETE clause allows to mark selected record for deletion pressing <Del> key * The leftmost column in a browse control must be left aligned. #include "minigui.ch" //------------------------- Function Main set century ON set date BRITISH set delete ON Def_Pubs() // PUBLICs definition & zoom calculating define window Form_1 ; at 0,0 ; width 550 height 535 + if(IsXPThemeActive(), 8, 0) ; title 'MiniGUI Browse Demo' ; MAIN nomaximize ; on init { || OpenTables(), Fun_1() } ; // edited by Gustow, was "OpenTables()" on release CloseTables() define main menu popup 'File' item 'New' action if( Form_1.ButtonNew.Enabled == .t., ButtonNewClick(), Nil ) item 'Delete' action if( Form_1.ButtonDelete.Enabled == .t., ButtonDeleteClick(), Nil ) separator item 'Exit' action Form_1.Release end popup popup 'Help' item 'About' action MsgInfo ( "MINIGUI - Browse Demo" + CRLF + ; "Copyright 2002 Roberto Lopez <harbourminigui@gmail.com>" + CRLF + ; "http://harbourminigui.googlepages.com/" + CRLF + CRLF + ; "Update 2002 Interativo Networks <xharbour@terra.com.br>" + CRLF + ; "Daniel Crocciari" + CRLF + ; "http://www.ihpz.net", "About" ) end popup end menu end window // center window Form_1 Gustow: move this to Fun_1() activate window Form_1 Return Nil //------------------------- Function Def_Pubs() * definitions of PUBLICs (Gustow) public gu_vk := 1, gu_hk := 1 // horizontal & vertical zoom public gu_th := GetTitleHeight(), ; gu_bw := GetBorderHeight() gu_hk := (0.8 * GetDesktopWidth() ) / (0.8 * 800) gu_vk := (0.8 * GetDesktopHeight()) / (0.8 * 600) /* MsgInfo( "Your screen resolution is: " + ; ltrim(str( GetDesktopWidth() )) + " * " + ; ltrim(str( GetDesktopHeight() )) + CRLF + CRLF + ; "Design-time screen resolution is: 800 * 600" + CRLF + CRLF + ; "Hor.zoom: gu_hk =" + str(gu_hk, 10, 2) + CRLF + ; "Ver.zoom: gu_vk =" + str(gu_vk, 10, 2) ) */ Return Nil //------------------------- Function Fun_1() * controls definitions (with autozoom) Public gu_fs := 9 * gu_hk // for fontsize Form_1.Width := int( Form_1.Width * gu_hk ) Form_1.Height := int( Form_1.Height * gu_vk ) Form_1.Center // move here from Main() @ 05 * gu_vk, 10 * gu_hk browse Browse_1 ; of Form_1 ; width 515 * gu_hk ; height 180 * gu_vk ; headers { 'Married', 'Code', 'First Name', 'Last Name', 'Birth Date' } ; widths { 40*gu_hk, 50*gu_hk, 150*gu_hk, 150*gu_hk, 90*gu_hk } ; workarea Teste ; fields { 'Teste->Married', 'Teste->Code' , 'Teste->First' , 'Teste->Last' , 'Teste->Birth'} ; value 1 ; on change { || BrowseChange() } ; on dblclick { || BrowseEdit() } ; nolines; justify { BROWSE_JTFY_LEFT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_CENTER }; image {"br_no","br_ok"} ; font "Arial" size 9 * gu_hk // line added by Gustow @ 200 * gu_vk, 010 * gu_hk label LabelCode of Form_1 ; // don't forget "OF"! value "Code" ; width 95 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 200 * gu_vk, 105 * gu_hk textbox TextBoxCode of Form_1 ; value "" ; width 100 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 230 * gu_vk, 010 * gu_hk label LabelFirst of Form_1 ; value "First Name" ; width 95 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 230 * gu_vk, 105 * gu_hk textbox TextBoxFirst of Form_1 ; value "" ; width 300 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 260 * gu_vk, 010 * gu_hk label LabelLast of Form_1 ; value "Last Name" ; width 95 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 260 * gu_vk, 105 * gu_hk textbox TextBoxLast of Form_1 ; value "" ; width 300 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 290 * gu_vk, 012 * gu_hk label LabelBirthdate of Form_1 ; value "Birth Date" ; width 85 * gu_hk height 25 * gu_vk ; // was 95, 25 (shadowed "DatePickerBirth") font "Arial" size 9 * gu_hk @ 295 * gu_vk, 105 * gu_hk ; // was 290, 105 datepicker DatePickerBirth of Form_1 ; width 100 * gu_hk ; // what about auto-zoom for HEIGHT? value date() ; font "Arial" size 9 * gu_hk // line added by Gustow @ 320 * gu_vk, 012 * gu_hk label LabelMarried of Form_1 ; value "Married" ; width 95 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 320 * gu_vk, 105 * gu_hk checkbox CheckBoxMarried of Form_1 ; caption "Yes Married" ; width 100 * gu_hk height 25 * gu_vk ; value .T. ; font "Arial" size 9 * gu_hk @ 350 * gu_vk, 012 * gu_hk label LabelBio of Form_1 ; value "Bio" ; width 95 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 350 * gu_vk, 105 * gu_hk editbox EditBoxBio of Form_1 ; width 300 * gu_hk height 130 * gu_vk ; value "" ; nohscroll ; font "Arial" size 9 * gu_hk @ 325 * gu_vk, 425 * gu_hk image ImagePhoto of Form_1 ; picture "0.bmp" ; width 100 height 125 // no auto-zoom @ 455 * gu_vk, 425 * gu_hk textbox TextBoxPhoto of Form_1 ; value "" ; width 100 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 200 * gu_vk, 425 * gu_hk button ButtonNew of Form_1 ; caption "&New" ; action ButtonNewClick() ; width 100 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 230 * gu_vk, 425 * gu_hk button ButtonSave of Form_1 ; caption "&Save" ; action ButtonSaveClick() ; width 100 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 260 * gu_vk, 425 * gu_hk button ButtonCancel of Form_1 ; caption "&Cancel" ; action ButtonCancelClick() ; width 100 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk @ 290 * gu_vk, 425 * gu_hk button ButtonDelete of Form_1 ; caption "&Delete" ; action ButtonDeleteClick() ; width 100 * gu_hk height 25 * gu_vk ; font "Arial" size 9 * gu_hk on key ESCAPE of Form_1 ; action if( Form_1.ButtonCancel.Enabled == .T., ButtonCancelClick(), Nil ) Form_1.TextBoxCode.Enabled := .F. Form_1.TextBoxFirst.Enabled := .F. Form_1.TextBoxLast.Enabled := .F. Form_1.DatePickerBirth.Enabled := .F. Form_1.CheckBoxMarried.Enabled := .F. Form_1.TextBoxPhoto.Enabled := .F. Form_1.EditBoxBio.Enabled := .F. Form_1.ButtonSave.Enabled := .F. Form_1.ButtonCancel.Enabled := .F. Form_1.Browse_1.SetFocus Return Nil //------------------------- Function OpenTables() use Test alias Teste new Return Nil //------------------------- Function CloseTables() close all Return Nil //------------------------- Function BrowseEdit() BrowseChange() Form_1.TextBoxFirst.Enabled := .T. Form_1.TextBoxLast.Enabled := .T. Form_1.DatePickerBirth.Enabled := .T. Form_1.CheckBoxMarried.Enabled := .T. Form_1.TextBoxPhoto.Enabled := .T. Form_1.EditBoxBio.Enabled := .T. Form_1.ButtonNew.Enabled := .F. Form_1.ButtonSave.Enabled := .T. Form_1.ButtonCancel.Enabled := .T. Form_1.ButtonDelete.Enabled := .F. // Form_1.Browse_1.Enabled := .F. Form_1.TextBoxFirst.SetFocus Return Nil //------------------------- Function ButtonNewClick() Form_1.TextBoxCode.Value := "" Form_1.TextBoxFirst.Value := "" Form_1.TextBoxLast.Value := "" Form_1.DatePickerBirth.Value := date() Form_1.TextBoxPhoto.Value := "0.bmp" Form_1.CheckBoxMarried.Value := .T. Form_1.EditBoxBio.Value := "" Form_1.ImagePhoto.Picture := "0.bmp" Form_1.TextBoxFirst.Enabled := .T. Form_1.TextBoxLast.Enabled := .T. Form_1.DatePickerBirth.Enabled := .T. Form_1.CheckBoxMarried.Enabled := .T. Form_1.TextBoxPhoto.Enabled := .T. Form_1.EditBoxBio.Enabled := .T. Form_1.ButtonNew.Enabled := .F. Form_1.ButtonSave.Enabled := .T. Form_1.ButtonCancel.Enabled := .T. Form_1.ButtonDelete.Enabled := .F. Form_1.Browse_1.Enabled := .F. Form_1.TextBoxFirst.SetFocus Return Nil //------------------------- Function ButtonDeleteClick() Local vRecno := Form_1.Browse_1.Value goto vRecno If MsgYesNo( ; "Delete This Record?" + CRLF + CRLF + ; "Code: " + alltrim( str( Teste->Code ) ) + CRLF + ; "First Name: " + alltrim( Teste->First ) + CRLF + ; "Last Name: " + alltrim( Teste->Last ), "Confirmation" ) delete skip -1 Form_1.Browse_1.Value := Teste->(Recno()) Form_1.Browse_1.Refresh Form_1.Browse_1.SetFocus endif Return Nil //------------------------- Function ButtonSaveClick() Local vTextBoxCode := val( Form_1.TextBoxCode.Value ), ; vTextBoxFirst := Form_1.TextBoxFirst.Value, ; vTextBoxLast := Form_1.TextBoxLast.Value, ; vDatePickerBirth := Form_1.DatePickerBirth.Value, ; vCheckBoxMarried := Form_1.CheckBoxMarried.Value, ; vTextBoxPhoto := Form_1.TextBoxPhoto.Value, ; vEditBoxBio := Form_1.EditBoxBio.Value if vTextBoxCode <= 0 goto bottom vTextBoxCode := Teste->Code + 1 append blank replace Teste->Code with vTextBoxCode endif replace Teste->First with vTextBoxFirst, ; Teste->Last with vTextBoxLast, ; Teste->Birth with vDatePickerBirth, ; Teste->Married with vCheckBoxMarried, ; Teste->Photo with vTextBoxPhoto, ; Teste->Bio with vEditBoxBio commit // Gustow: // DbCommit() is better // (COMMIT flushes data in _all_ databases, DbCommit() - in current only. // great speed decreasing in XP ! ) Form_1.TextBoxCode.Value := alltrim(str(Teste->Code)) Form_1.TextBoxFirst.Enabled := .F. Form_1.TextBoxLast.Enabled := .F. Form_1.DatePickerBirth.Enabled := .F. Form_1.CheckBoxMarried.Enabled := .F. Form_1.TextBoxPhoto.Enabled := .F. Form_1.EditBoxBio.Enabled := .F. Form_1.ButtonNew.Enabled := .T. Form_1.ButtonSave.Enabled := .F. Form_1.ButtonCancel.Enabled := .F. Form_1.ButtonDelete.Enabled := .T. Form_1.Browse_1.Enabled := .T. Form_1.ImagePhoto.Picture := alltrim(Teste->Photo) Form_1.Browse_1.Value := Teste->(Recno()) Form_1.Browse_1.Refresh Form_1.Browse_1.SetFocus Return NIL //------------------------- Function ButtonCancelClick() Form_1.TextBoxFirst.Enabled := .F. Form_1.TextBoxLast.Enabled := .F. Form_1.DatePickerBirth.Enabled := .F. Form_1.CheckBoxMarried.Enabled := .F. Form_1.TextBoxPhoto.Enabled := .F. Form_1.EditBoxBio.Enabled := .F. Form_1.ButtonNew.Enabled := .T. Form_1.ButtonSave.Enabled := .F. Form_1.ButtonCancel.Enabled := .F. Form_1.ButtonDelete.Enabled := .T. Form_1.Browse_1.Enabled := .T. BrowseChange() Form_1.Browse_1.SetFocus Return NIL //------------------------- Function BrowseChange() Local vRecno := Form_1.Browse_1.Value goto vRecno Form_1.TextBoxCode.Value := alltrim(str(Teste->Code)) Form_1.TextBoxFirst.Value := alltrim(Teste->First) Form_1.TextBoxLast.Value := alltrim(Teste->Last) Form_1.DatePickerBirth.Value := Teste->Birth Form_1.CheckBoxMarried.Value := Teste->Married Form_1.EditBoxBio.Value := Teste->Bio Form_1.TextBoxPhoto.Value := alltrim(Teste->Photo) Form_1.ImagePhoto.Picture := ; if( file( alltrim(Teste->Photo) ), alltrim(Teste->Photo), "0.bmp" ) Return NIL Возможно, это натолкнет на собственные идеи
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2172
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.04.12 10:36. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Возможно, это натолкнет на собственные идеи |
| Спасибо большое за помощь !
| |
|
Петр
|
| постоянный участник
|
Пост N: 1095
Зарегистрирован: 09.10.06
|
|
Отправлено: 22.04.12 11:13. Заголовок: SAMPLES\BASIC\IMAGE_2\DEMO.exe
GPF Скрытый текст Application Internal Error - C:\MiniGUI\SAMPLES\BASIC\IMAGE_2\DEMO.exe Terminated at: 2012.04.22 11:12:00 Info: Harbour MiniGUI Extended Edition 2.0.9 - 2012.04.04 Unrecoverable error 6005: Exception error: Exception Code:C0000005 Exception Address:7C9101B3 EAX:0002000A EBX:00150000 ECX:00000146 EDX:00070001 ESI:00020000 EDI:0001FFF8 EBP:0012F284 CS:EIP:001B:7C9101B3 SS:ESP:0023:0012F064 DS:0023 ES:0023 FS:003B GS:0000 Flags:00010216 CS:EIP: 88 47 06 8B C7 C1 E8 03 32 43 04 88 47 04 F6 45 SS:ESP: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 C stack: EIP: EBP: Frame: OldEBP, RetAddr, Params... 7C9101B3 0012F284 0012F2D0 7C80FF0F 00150000 00100008 00000146 B9011A4B 00000000 00000000 00000000 00000001 7C80FF0F 0012F2D0 0012F360 0040EE99 00000040 00000146 004DB8FA 00000000 005218B4 000065C0 004DB8A9 005218B4 0040EE99 0012F360 0012F3A0 0040EB35 004A3547 0000007B 000000A0 002B0476 00000000 00000001 00000000 005218B4 0040EB35 0012F3A0 0012F4A4 0043621C 00000007 004DE275 00000000 005218B4 0000007D FFFFFFF0 0012F648 00000000 0043621C 0012F4A4 0012F4CC 00414B60 004DB854 004D3760 0043C068 0000004B 00000000 00000000 00000000 000009DC 00414B60 0012F4CC 0012F5D0 00436199 00000003 004A354F 00000000 005218B4 FFFFFFFF 0012F544 5B263357 00330496 00436199 0012F5D0 0012F5F8 00414DA4 004DDC5E 004D3760 0043C068 00000048 00000000 00000000 00000000 00000E83 00414DA4 0012F5F8 0012F6FC 0043621C 00000004 005218B4 FFFFFFFE 00A3B764 00000002 004F2421 00000000 005218B4 0043621C 0012F6FC 0012F734 0043C3E1 004A3526 004A325C 004F24C6 00000000 004EDCE4 0043C225 005218B4 00000041 0043C3E1 0012F734 0012F838 004362D6 00000001 0050FA1A 00000000 005218B4 000000F4 00000001 00000001 773E8EBF 004362D6 0012F838 0012F860 004156D8 004F23E7 004ED8E4 0043C068 00000012 00000000 00A3FBBC 00000000 00000626 004156D8 0012F860 0012F964 00436199 00000002 00000000 00000111 0050B310 00000000 0015FAB8 00000000 00159A50 00436199 0012F964 0012F990 00418920 0050C1F4 0050B310 0043C185 008603F4 00000010 00000000 00000000 00000000 00418920 0012F990 0012F9A8 0040C266 00000004 0012FA10 0040C1E8 00000000 0040C266 0012F9A8 0012F9D4 7E368734 008603F4 00000111 00000000 00330496 0040C1E8 DCBAABCD 00000000 0012FA10 7E368734 0012F9D4 0012FA3C 7E368816 0040C1E8 008603F4 00000111 00000000 00330496 00000111 007825F8 0078260C 7E368816 0012FA3C 0012FA78 7E37927B 00000000 0040C1E8 008603F4 00000111 00000000 00330496 0078260C 00000001 7E37927B 0012FA78 0012FA98 7E3792E3 007825F8 00782578 00000000 00330496 00000000 001599E0 7E3792E3 0012FA98 0012FAB8 773E735F 008603F4 00000111 00000000 00330496 00000001 001599E0 773E735F 0012FAB8 0012FAD4 773E7441 001599E0 00000000 00100028 001599E0 00000001 Modules: 0x00400000 0x00145000 C:\MiniGUI\SAMPLES\BASIC\IMAGE_2\DEMO.exe 0x7C900000 0x000B3000 C:\WINDOWS\system32\ntdll.dll 0x7C800000 0x000F8000 C:\WINDOWS\system32\kernel32.dll 0x75A40000 0x00021000 C:\WINDOWS\system32\MSVFW32.DLL 0x7E360000 0x00091000 C:\WINDOWS\system32\USER32.dll 0x77F10000 0x00049000 C:\WINDOWS\system32\GDI32.dll 0x76B20000 0x0002E000 C:\WINDOWS\system32\WINMM.dll 0x77DC0000 0x000AC000 C:\WINDOWS\system32\ADVAPI32.dll 0x77E70000 0x00093000 C:\WINDOWS\system32\RPCRT4.dll 0x77FE0000 0x00011000 C:\WINDOWS\system32\Secur32.dll 0x7C9C0000 0x0081C000 C:\WINDOWS\system32\SHELL32.dll 0x77C00000 0x00058000 C:\WINDOWS\system32\msvcrt.dll 0x77F60000 0x00076000 C:\WINDOWS\system32\SHLWAPI.dll 0x773C0000 0x00103000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\COMCTL32.dll 0x774D0000 0x0013E000 C:\WINDOWS\system32\OLE32.DLL 0x5F2F0000 0x00017000 C:\WINDOWS\system32\OLEPRO32.DLL 0x77110000 0x0008B000 C:\WINDOWS\system32\OLEAUT32.dll 0x76360000 0x0001D000 C:\WINDOWS\system32\IMM32.DLL 0x5D270000 0x00007000 C:\WINDOWS\system32\serwvdrv.dll 0x5B590000 0x00007000 C:\WINDOWS\system32\umdmxfrm.dll 0x5B260000 0x00038000 C:\WINDOWS\system32\uxtheme.dll 0x746E0000 0x0004C000 C:\WINDOWS\system32\MSCTF.dll 0x75310000 0x0002E000 C:\WINDOWS\system32\msctfime.ime Called from C_SETPICTURE(0) Called from _SETPICTURE(2524) in h_controlmisc.prg Called from SETPROPERTY(3715) in h_controlmisc.prg Called from (b)MAIN(28) in DEMO.prg Called from _DOCONTROLEVENTPROCEDURE(1574) in h_windows.prg Called from EVENTS(1433) in h_events.prg Called from _DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1311) in h_windows.prg Called from MAIN(33) in DEMO.prg
|
| |
|
gfilatov2002
|
| moderator
|
Пост N: 370
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.04.12 10:33. Заголовок: Петр Благодарю за с..
Петр, Благодарю за сообщение об ошибке! Догадываюсь, что этот сбой получен на Win7 Можно попробовать запустить этот пример в режиме совместимости с WinXP, как вариант У меня на Win7 64bit Ultimate C:\MiniGUI\SAMPLES\BASIC\IMAGE_2\DEMO.exe при изменении картинки типа .CUR отрабатывает без ошибки, поэтому, возможно, что есть проблемы с локальной системой. В любом случае, Ваши предложения по исправлению возникшей ошибки всегда приветствуются
| |
|
Петр
|
| постоянный участник
|
Пост N: 1096
Зарегистрирован: 09.10.06
|
|
Отправлено: 23.04.12 10:57. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Догадываюсь, что этот сбой получен на Win7 |
| Нет, XP SP3. Просто, после запуска программы начните "тыкать" мышкой по всем кнопкам, слева направо или наоборот - без разницы. У меня где-то после 20 щелчков валилась. gfilatov2002 пишет: цитата: | В любом случае, Ваши предложения по исправлению возникшей ошибки всегда приветствуются |
| Уже исправил, осталось только по просьбе Андрея Верченко вывод PNG для систем поддерживающих gdiplus (XP и выше) прикрутить. Опубликую здесь или сброшу куда-то, по желанию.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2180
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.04.12 12:04. Заголовок: Петр пишет: осталос..
Петр пишет: цитата: | осталось только по просьбе Андрея Верченко поддержу вывода PNG для систем поддерживающих gdiplus (XP и выше) прикрутить. |
| Ура... Жду с нетерпением...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 372
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.04.12 12:30. Заголовок: Петр пишет: Опублик..
Петр пишет: Ждем...
| |
|
Петр
|
| постоянный участник
|
Пост N: 1097
Зарегистрирован: 09.10.06
|
|
Отправлено: 23.04.12 22:58. Заголовок: Петр пишет: Опублик..
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2183
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.04.12 23:29. Заголовок: В примере DEMOGDIP.e..
В примере DEMOGDIP.exe перестал работать показ кнопки "Set cur" И очень хотелось бы для таких подключений библиотек делать файлы проектов *.hbp Ну нет пока практики у меня (начинающего) включения разных библиотек в свои проекты. Заранее спасибо !
| |
|
Петр
|
| постоянный участник
|
Пост N: 1098
Зарегистрирован: 09.10.06
|
|
Отправлено: 24.04.12 08:00. Заголовок: Andrey пишет: В при..
Andrey пишет: цитата: | В примере DEMOGDIP.exe перестал работать показ кнопки "Set cur" |
| Спасибо за подробное тестирование c_image.obj и RTFM цитата: | И очень хотелось бы для таких подключений библиотек делать файлы проектов *.hbp |
| вообще-то, автор hbmk2 для "таких подключений библиотек" *.hbc файлы рекомендует
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2184
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.04.12 09:51. Заголовок: Петр пишет: вообще-..
Петр пишет: цитата: | вообще-то, автор hbmk2 для "таких подключений библиотек" *.hbc файлы рекомендует |
| Можно и *.hbc
| |
|
gfilatov2002
|
| moderator
|
Пост N: 373
Зарегистрирован: 11.02.10
|
|
Отправлено: 24.04.12 11:13. Заголовок: Петр пишет: Опублик..
Петр пишет: Идея понятна - надо использовать GdiPlus.Dll вместо функции LoadImage() для вывода картинок из файлов в форматах, отличных от BMP. Но в бинарной форме это можно рассматривать только в качестве примера Замечание по поводу ошибки в примере Image_2 для файлов типа CUR и ICO. Проблема при частом обновлении этих картинок возникает только под WinXP. При работе в Win7 или Win98 этой проблемы не возникает
| |
|
Петр
|
| постоянный участник
|
Пост N: 1100
Зарегистрирован: 09.10.06
|
|
Отправлено: 24.04.12 12:42. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Но в бинарной форме это можно рассматривать только в качестве примера |
| c_image.obj в стандартном режиме работы, без инициализации библиотеки gdi+, устраняет проблему разрушения памяти программы. К тому же, он позволяет вводить поддержку элементом управления Image формата PNG без перекомпиляции библиотеки, см. пример. Крайне полезная вещь для пользователей bcc55, в поставке которых нет gdiplus*.h (232 kB). Ну и напоследок, я выложу код c_image.c после окончательной пришлифовки, т.е. более точного копирования поведения loadolepicture, с этим нет проблем.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 374
Зарегистрирован: 11.02.10
|
|
Отправлено: 24.04.12 12:55. Заголовок: Петр пишет: я вылож..
Петр пишет: цитата: | я выложу код c_image.c после окончательной пришлифовка, т.е. более точного копирования поведения loadolepicture |
| Большое спасибо! Но тогда уже это будет включено в следующую сборку
| |
|
Петр
|
| постоянный участник
|
Пост N: 1101
Зарегистрирован: 09.10.06
|
|
Отправлено: 24.04.12 17:54. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Но тогда уже это будет включено в следующую сборку |
| Нет вопросов, пока же для желающих - модифицированная версия c_image.c (non-GDI+) click here
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2185
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.04.12 18:13. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Но тогда уже это будет включено в следующую сборку |
| Желательно отдельным примером и файл для сборки hbmk2 !
| |
|
gfilatov2002
|
| moderator
|
Пост N: 375
Зарегистрирован: 11.02.10
|
|
Отправлено: 25.04.12 10:22. Заголовок: Петр пишет: модифиц..
Петр пишет: цитата: | модифицированная версия c_image.c |
| Огромное спасибо за переработанный код: чувствуется рука профи! Но я немного поправил, чтобы убрать предупреждение, которое выдает компилятор MinGW (см.ниже). Скрытый текст
/*---------------------------------------------------------------------------- MINIGUI - Harbour Win32 GUI library source code Copyright 2002-2010 Roberto Lopez <harbourminigui@gmail.com> http://harbourminigui.googlepages.com/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this software; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). As a special exception, you have permission for additional uses of the text contained in this release of Harbour Minigui. The exception is that, if you link the Harbour Minigui library with other files to produce an executable, this does not by itself cause the resulting executable to be covered by the GNU General Public License. Your use of that executable is in no way restricted on account of linking the Harbour-Minigui library code into it. Parts of this project are based upon: "Harbour GUI framework for Win32" Copyright 2001 Alexander S.Kresin <alex@belacy.belgorod.su> Copyright 2001 Antonio Linares <alinares@fivetech.com> www - http://harbour-project.org "Harbour Project" Copyright 1999-2012, http://harbour-project.org/ "WHAT32" Copyright 2002 AJ Wos <andrwos@aust1.net> "HWGUI" Copyright 2001-2009 Alexander S.Kresin <alex@belacy.belgorod.su> ---------------------------------------------------------------------------*/ #ifndef CINTERFACE #define CINTERFACE #endif #define _WIN32_IE 0x0500 #ifdef __POCC__ #define _WIN32_WINNT 0x0500 #else #define _WIN32_WINNT 0x0400 #endif #include <windows.h> #include <commctrl.h> #include "olectl.h" #include "hbapi.h" #include "hbapiitm.h" #include "hbinit.h" #include "hbvm.h" HBITMAP loadolepicture ( char *filename, int width, int height, HWND handle, int scalestrech, int whitebackground, int transparent ); LRESULT APIENTRY PictSubClassFunc ( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam ); static WNDPROC LabelOldWndProc; static BOOL read_image ( char *filename, DWORD *nFileSize, HGLOBAL *hMem ); static BOOL read_image_rsrc ( HINSTANCE hInstance, HRSRC hResInfo, HGLOBAL *hMem ); static void calc_rect ( HWND handle, int width, int height, int scalestrech, LONG lWidth, LONG lHeight, RECT *rect, RECT *rect2 ); HB_FUNC( INITIMAGE ) { HWND wndhandle; HWND wndparent = ( HWND ) hb_parnl( 1 ); int Style = WS_CHILD | SS_BITMAP; if( !hb_parl( 5 ) ) Style |= WS_VISIBLE; if( hb_parl( 6 ) || hb_parl( 7 ) ) Style |= SS_NOTIFY; wndhandle = CreateWindowEx( 0, "static", NULL, Style, hb_parni( 3 ), hb_parni( 4 ), 0, 0, wndparent, ( HMENU ) hb_parni( 2 ), GetModuleHandle( NULL ), NULL ); if( hb_parl( 7 ) ) LabelOldWndProc = ( WNDPROC ) SetWindowLong( wndhandle, GWL_WNDPROC, ( LONG ) PictSubClassFunc ); hb_retnl( ( LONG ) wndhandle ); } HB_FUNC( C_SETPICTURE ) { HBITMAP hBitmap; if( hb_parclen( 2 ) == 0 ) hb_retnl( ( LONG ) NULL ); hBitmap = loadolepicture( ( char * ) hb_parc( 2 ), hb_parni( 3 ), hb_parni( 4 ), ( HWND ) hb_parnl( 1 ), hb_parni( 5 ), hb_parni( 6 ), hb_parni( 7 ) ); if( hBitmap != NULL ) SendMessage( ( HWND ) hb_parnl( 1 ), ( UINT ) STM_SETIMAGE, ( WPARAM ) IMAGE_BITMAP, ( LPARAM ) hBitmap ); hb_retnl( ( LONG ) hBitmap ); } #define _OLD_STYLE 0 LRESULT APIENTRY PictSubClassFunc ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { TRACKMOUSEEVENT tme; static PHB_SYMB pSymbol = NULL; static BOOL bMouseTracking = FALSE; long int r = 0; #if _OLD_STYLE BOOL bCallUDF = FALSE; #endif if( Msg == WM_MOUSEMOVE || Msg == WM_MOUSELEAVE ) { if( Msg == WM_MOUSEMOVE ) { if( bMouseTracking == FALSE ) { tme.cbSize = sizeof( TRACKMOUSEEVENT ); tme.dwFlags = TME_LEAVE; tme.hwndTrack = hWnd; tme.dwHoverTime = HOVER_DEFAULT; if( _TrackMouseEvent( &tme ) == TRUE ) { #if _OLD_STYLE bCallUDF = TRUE; #endif bMouseTracking = TRUE; } #if _OLD_STYLE } else { bCallUDF = FALSE; #endif } } else { #if _OLD_STYLE bCallUDF = TRUE; #endif bMouseTracking = FALSE; } #if _OLD_STYLE if( bCallUDF == TRUE ) { #endif if( !pSymbol ) pSymbol = hb_dynsymSymbol( hb_dynsymGet( "OLABELEVENTS" ) ); if( pSymbol ) { hb_vmPushSymbol( pSymbol ); hb_vmPushNil(); hb_vmPushLong( ( LONG ) hWnd ); hb_vmPushLong( Msg ); hb_vmPushLong( wParam ); hb_vmPushLong( lParam ); hb_vmDo( 4 ); r = hb_parnl( -1 ); } #if _OLD_STYLE } #endif return ( r != 0 ) ? r : CallWindowProc( LabelOldWndProc, hWnd, 0, 0, 0 ); } return CallWindowProc( LabelOldWndProc, hWnd, Msg, wParam, lParam ); } #undef _OLD_STYLE HBITMAP loadolepicture ( char *filename, int width, int height, HWND handle, int scalestrech, int whitebackground, int transparent ) { UINT fuLoad = ( transparent == 0 ) ? LR_CREATEDIBSECTION : LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT; IStream *iStream; IPicture *iPicture = NULL; HGLOBAL hMem = ( HGLOBAL ) NULL; HRSRC hResInfo; HRESULT hr; DWORD nFileSize = 0; RECT rect, rect2; BITMAP bm; HBITMAP bitmap, bitmap2; LONG lWidth, lHeight; // TODO HINSTANCE hInstance = GetModuleHandle( NULL ); /* MSDN: An application must not delete a DC whose handle was obtained * by calling the GetDC function. * Instead, it must call the ReleaseDC function to free the DC */ HDC imgDC = GetDC( handle ); HDC tmpDC; HDC tmp2DC = ( HDC ) NULL; bitmap2 = ( HBITMAP ) LoadImage( hInstance, filename, IMAGE_BITMAP, 0, 0, fuLoad ); if( bitmap2 == NULL ) bitmap2 = ( HBITMAP ) LoadImage( NULL, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | fuLoad ); if( bitmap2 == NULL ) { hResInfo = FindResource( hInstance, filename, "JPG" ); if( hResInfo == NULL ) hResInfo = FindResource( hInstance, filename, "GIF" ); if( hResInfo == NULL ) { if( read_image( filename, &nFileSize, &hMem ) == FALSE ) { ReleaseDC( handle, imgDC ); return NULL; } } else if( read_image_rsrc( hInstance, hResInfo, &hMem ) == FALSE ) { ReleaseDC( handle, imgDC ); return NULL; } hr = CreateStreamOnHGlobal( hMem, TRUE, &iStream ); if( hr != S_OK || iStream == NULL ) { GlobalFree( hMem ); ReleaseDC( handle, imgDC ); return NULL; } #if defined( __cplusplus ) hr = OleLoadPicture( iStream, nFileSize, FALSE, IID_IPicture, ( LPVOID * ) &iPicture ); iStream->Release(); #else hr = OleLoadPicture( iStream, nFileSize, FALSE, &IID_IPicture, ( LPVOID * ) &iPicture ); iStream->lpVtbl->Release( iStream ); #endif if( hr != S_OK || iPicture == NULL ) { GlobalFree( hMem ); ReleaseDC( handle, imgDC ); return NULL; } iPicture->lpVtbl->get_Width( iPicture, &lWidth ); iPicture->lpVtbl->get_Height( iPicture, &lHeight ); } else { GetObject( bitmap2, sizeof( BITMAP ), &bm ); lWidth = bm.bmWidth; lHeight = bm.bmHeight; tmp2DC = CreateCompatibleDC( imgDC ); SelectObject( tmp2DC, bitmap2 ); } calc_rect( handle, width, height, scalestrech, lWidth, lHeight, &rect, &rect2 ); tmpDC = CreateCompatibleDC( imgDC ); bitmap = CreateCompatibleBitmap( imgDC, width, height ); SelectObject( tmpDC, bitmap ); if( whitebackground == 1 ) FillRect( tmpDC, &rect2, ( HBRUSH ) GetStockObject( WHITE_BRUSH ) ); else FillRect( tmpDC, &rect2, ( HBRUSH ) GetSysColorBrush( COLOR_BTNFACE ) ); if( iPicture != NULL ) { iPicture->lpVtbl->Render( iPicture, tmpDC, rect.left, rect.top, rect.right, rect.bottom, 0, lHeight, lWidth, -lHeight, NULL ); iPicture->lpVtbl->Release( iPicture ); GlobalFree( hMem ); } else { StretchBlt( tmpDC, rect.left, rect.top, rect.right, rect.bottom, tmp2DC, 0, 0, lWidth, lHeight, SRCCOPY ); DeleteDC( tmp2DC ); DeleteObject( bitmap2 ); } ReleaseDC( handle, imgDC ); DeleteDC( tmpDC ); return bitmap; } static BOOL read_image ( char *filename, DWORD *nFileSize, HGLOBAL *hMem ) { HANDLE hFile; LPVOID lpDest; DWORD nSize, nRead; hFile = CreateFile( filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( hFile == INVALID_HANDLE_VALUE ) return FALSE; nSize = GetFileSize( hFile, NULL ); if( nSize == INVALID_FILE_SIZE || ( *hMem = GlobalAlloc( GHND, nSize ) ) == NULL ) { CloseHandle( hFile ); return FALSE; } *nFileSize = nSize; lpDest = GlobalLock( *hMem ); if( lpDest == NULL ) { GlobalFree( *hMem ); CloseHandle( hFile ); return FALSE; } if( ReadFile( hFile, lpDest, nSize, &nRead, NULL ) == FALSE ) { GlobalUnlock( *hMem ); GlobalFree( *hMem ); CloseHandle( hFile ); return FALSE; } GlobalUnlock( *hMem ); CloseHandle( hFile ); return TRUE; } static BOOL read_image_rsrc ( HINSTANCE hInstance, HRSRC hResInfo, HGLOBAL *hMem ) { HGLOBAL hRes; DWORD nSize; LPVOID lpRes, lpDest; hRes = LoadResource( hInstance, hResInfo ); if( hRes == NULL ) return FALSE; nSize = SizeofResource( hInstance, hResInfo ); lpRes = LockResource( hRes ); if( lpRes == NULL || ( *hMem = GlobalAlloc( GHND, nSize ) ) == NULL ) { FreeResource( hRes ); return FALSE; } lpDest = GlobalLock( *hMem ); if( lpDest == NULL ) { GlobalFree( *hMem ); FreeResource( hRes ); return FALSE; } CopyMemory( lpDest, lpRes, ( SIZE_T ) nSize ); GlobalUnlock( *hMem ); FreeResource( hRes ); return TRUE; } static void calc_rect ( HWND handle, int width, int height, int scalestrech, LONG lWidth, LONG lHeight, RECT *rect, RECT *rect2 ) { if( ( width == 0 ) & ( height == 0 ) ) GetClientRect( handle, rect ); else SetRect( rect, 0, 0, width, height ); SetRect( rect2, 0, 0, rect->right, rect->bottom ); if( scalestrech == 0 ) { if( ( int ) lWidth * rect->bottom / lHeight <= rect->right ) rect->right = ( int ) lWidth * rect->bottom / lHeight; else rect->bottom = ( int ) lHeight * rect->right / lWidth; } rect->left = ( int ) ( width - rect->right ) / 2; rect->top = ( int ) ( height - rect->bottom ) / 2; }
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2188
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.04.12 17:45. Заголовок: Петр пишет: Работа..
Петр пишет: цитата: | Работает, и следующий раз, пожалуйста, пишите в правильной ветке, которую, к тому же, сами и создали - примеры, ошибки и т.д. |
| Да, точно работает... Это глюк инета у меня был....
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2226
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.06.12 16:40. Заголовок: Вопрос возник такой:..
Вопрос возник такой: Есть главное окно программы Form_1, делаю: MINIMIZE WINDOW Form_1 Inkey(60) RESTORE WINDOW Form_1 Программа успешно "скидывается" на панель задач, но мышкой (если юзер захочет) поднять ее невозможно !!! Что нужно использовать вместо INKEY() или нужно по другому делать ?
| |
|
Dima
|
| |
Пост N: 2406
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.06.12 16:53. Заголовок: Andrey пишет: Что н..
Andrey пишет: цитата: | Что нужно использовать вместо INKEY() или нужно по другому делать ? |
| А какова цель вообще ? ;) Ну скинул ее на панель задач и хорошо. Мешает что ли ? На фига туда еще и задержку лепить.....:)
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2227
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.06.12 17:36. Заголовок: Dima пишет: Ну скин..
Dima пишет: цитата: | Ну скинул ее на панель задач и хорошо. Мешает что ли ? На фига туда еще и задержку лепить.....:) |
| Ну хотелось бы чтоб через минуту "поднялась" программа... Для дальнейших действий юзера. И как сделать чтоб эта программа была "под" запущенной программой - типа SW_SHOWNOACTIVATE ???
| |
|
Петр
|
| постоянный участник
|
Пост N: 1122
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.06.12 18:25. Заголовок: Я представляю шок юз..
Я представляю шок юзера, у которого сначала улетает, а потом откуда не возьмись появляется окно.. MINIMIZE WINDOW Form_1 создать событие таймера с интервалом 60 сек. в событии проверить, распахнуто или нет окно, если нет RESTORE WINDOW грохнуть таймер.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2229
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.06.12 19:59. Заголовок: Петр пишет: MINIMIZ..
Петр пишет: цитата: | MINIMIZE WINDOW Form_1 создать событие таймера с интервалом 60 сек. в событии проверить, распахнуто или нет окно, если нет RESTORE WINDOW грохнуть таймер. |
| Не знаю как "создать событие таймера" ? Петр, набросай пожалуйста примерный код, (я пока только осваиваю Минигуи) ! Или ткни в пример где это делается...
| |
|
Dima
|
| |
Пост N: 2408
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.06.12 21:19. Заголовок: Andrey Пошукай по п..
Andrey Пошукай по примерам "DEFINE TIMER"
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2232
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.06.12 13:49. Заголовок: Dima пишет: Пошукай..
Dima пишет: цитата: | Пошукай по примерам "DEFINE TIMER" |
| Спасибо БОЛЬШОЕ Дима ! Нашел !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2233
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.06.12 13:54. Заголовок: Видимость переменных..
Видимость переменных или как сделать следующее ? Имею код: FUNCTION Main() Local hWnd, nI, cTask, cButt, cMess Local aButton := {} AADD( aButton, {170, 20,170,35,'Menu 1','Task-1'} ) AADD( aButton, {220, 20,170,35,'Menu 2','Task-2'} ) AADD( aButton, {270, 20,170,35,'Menu 3','Task-3'} ) AADD( aButton, {320, 20,170,35,'Menu 4','Task-4'} ) AADD( aButton, {170,230,170,35,'Menu 5','Task-5'} ) AADD( aButton, {220,230,170,35,'Menu 6','Task-6'} ) AADD( aButton, {270,230,170,35,'Menu 7','Task-7'} ) ...................... FOR nI := 1 TO LEN(aButton) cButt := "RUN"+LTRIM(STR(nI)) cMess := 'Command: ShellExecute( , "open", "TaskTest2.exe", ..... )' cTask := aButton[nI,6] DEFINE BUTTON &cButt ROW aButton[nI,1] COL aButton[nI,2] WIDTH aButton[nI,3] HEIGHT aButton[nI,4] CAPTION aButton[nI,5] ACTION { || ExecTask(cTask,hWnd) } TOOLTIP cMess FONTNAME "MS Sans serif" FONTSIZE 14 FONTBOLD .t. LEFTTEXT .t. BACKCOLOR WHITE END BUTTON NEXT Так вот, при вызове ExecTask(cTask,hWnd) - cTask всегда возвращает последний элемент массива ... Почему ? Как нужно правильно сделать ? Полный пример здесь: http://files.mail.ru/SNQMZ9
| |
|
gfilatov2002
|
| moderator
|
Пост N: 389
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.06.12 16:06. Заголовок: Andrey пишет: при в..
Andrey пишет: цитата: | при вызове ExecTask(cTask,hWnd) - cTask всегда возвращает последний элемент массива ... Как нужно правильно сделать ? |
| Отправил исправленный рабочий вариант по почте
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2243
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.06.12 22:31. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Отправил исправленный рабочий вариант по почте |
| Спасибо большое... А как нужно правильно описывать переменные в МиниГуи ? PRIVATE можно использовать в коде программы ? Разбираюсь с чужим рабочим кодом... Вот выдержка из него: Скрытый текст kol_button := Len( arr_menu_button ) AAdd( arr_kol_button, kol_button ) ......... font_button := { "Times Roman", 12, .T., { 155, 155, 155 }, { 155, 0, 0 }, { 200, 200, 200 }, { 50, 50, 50 } } font_button := chk_font( font_button, 1 ) font_marker_button := { "Times Roman", 12, .T., { 155, 155, 155 }, { 155, 0, 0 }, { 200, 200, 200 }, { 50, 50, 50 } } font_marker_button := chk_font( font_marker_button, 1 ) FOR i_button := 1 TO kol_button nam_exe_button := "act_exe_but0" + IIF(i_page<10, Str( i_page, 1 ), Str( i_page, 2 ) ) + AllTrim( Str( i_button, 2 ) ) PRIVATE &nam_exe_button IF Len( arr_menu_button[ i_button ] ) > 9.and. ! Empty( arr_menu_button[ i_button, 10 ] ) &nam_exe_button := arr_menu_button[ i_button, 10 ] ELSE &nam_exe_button := "" ENDIF AAdd( curs_arr_size[ i_page, 3 ], &nam_exe_button ) IF i_button == 1 AAdd( curs_arr_size[ i_page, 4 ], 1 ) //i_button max_button := 1//i_button ELSE IF arr_menu_button[ i_button, 1 ] > arr_menu_button[ max_button, 1 ] + arr_menu_button[ max_button, 4 ] AAdd( curs_arr_size[ i_page, 4 ], i_button ) max_button := i_button ENDIF ENDIF image_ch1 := "CH2Image_" + AllTrim( Str( i_page, 3 ) ) + AllTrim( Str( i_button, 3 ) ) PRIVATE &image_ch1 &image_ch1 := AllTrim( Str( i_page, 3 ) ) + AllTrim( Str( i_button, 3 ) ) DEFINE BUTTONEX &( "ButtonEX_" + AllTrim( Str( i_page, 3 ) ) + AllTrim( Str( i_button, 3 ) ) ) // PICTURE arr_menu_button[i_button,7]//choice_bmp1 ICON arr_menu_button[ i_button, 7 ] //choice_bmp1 Row arr_menu_button[ i_button, 1 ] + 25 Col arr_menu_button[ i_button, 2 ] WIDTH arr_menu_button[ i_button, 4 ] HEIGHT arr_menu_button[ i_button, 3 ] BACKCOLOR BROWN //для расцветки по градиенту, иначе не работает FONTSIZE 12//&(font_button[2]) VERTICAL .T. ADJUST .F. ACTION ( Sect_Run_Tasks( &nam_exe_button ), Form_1.Setfocus, form_graph_tab() ) END BUTTONEX //MsgInfo(Conv_Profile(nam_exe_button)) Form_1. & ( "ButtonEX_" + AllTrim( Str( i_page, 3 ) ) + AllTrim( Str( i_button, 3 ) ) ) .cargo := arr_menu_button[ i_button ] // Название задачи DEFINE LABEL &( "Label_" + AllTrim( Str( i_page, 3 ) ) + AllTrim( Str( i_button, 3 ) ) ) Row arr_menu_button[ i_button, 1 ] + arr_menu_button[ i_button, 3 ] + 25 drab_y := ( arr_menu_button[ i_button, 6 ] - arr_menu_button[ i_button, 4 ] ) / 2 rab_y := arr_menu_button[ i_button, 2 ] - drab_y IF rab_y < 0 rab_y := 2 ENDIF Col rab_y WIDTH arr_menu_button[ i_button, 6 ] HEIGHT arr_menu_button[ i_button, 5 ] FONTNAME font_button[ 1 ] FONTSIZE font_button[ 2 ] FONTBOLD font_button[ 3 ] FONTCOLOR font_button[ 4 ] BACKCOLOR font_button[ 5 ] VERTICAL .T. CENTERALIGN .T. ADJUST .F. ONMOUSEHOVER { || ch_property( &image_ch1, .F. ), s_form_graph_tab() } ONMOUSELEAVE { || ch_property( &image_ch1, .T. ), s_form_graph_tab() } VALUE AtRepl( ";", arr_menu_button[ i_button, 9 ], Chr( 10 ) ) //"Кнопка " +str(i_page,3) +str(i_button,3) ACTION { || Sect_Run_Tasks( &nam_exe_button ), form_graph_tab() } END LABEL Form_1. & ( "Label_" + AllTrim( Str( i_page, 3 ) ) + AllTrim( Str( i_button, 3 ) ) ) .cargo := { font_button, font_marker_button } NEXT // FOR i_button := 1 TO kol_button
| Подскажите как нужно правильно писать код в таких случаях ?
| |
|
Vlad04
|
| постоянный участник
|
Пост N: 312
Зарегистрирован: 13.10.05
|
|
Отправлено: 15.06.12 10:07. Заголовок: Что за программа ? В..
Что за программа ? Всю выложить можешь?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 390
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.06.12 17:15. Заголовок: Andrey пишет: PRIVA..
Andrey пишет: цитата: | PRIVATE можно использовать в коде программы ? |
| Да, если они связаны с использованием макро-переменных. Andrey пишет: цитата: | Подскажите как нужно правильно писать код в таких случаях ? |
| О каких случаях идет речь
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2249
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.12 19:01. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | О каких случаях идет речь |
| Объявление переменных в цикле, т.е. на ходу ? FOR i_button := 1 TO kol_button nam_exe_button := "act_exe_but0" + IIF(i_page<10, Str( i_page, 1 ), Str( i_page, 2 ) ) + AllTrim( Str( i_button, 2 ) ) PRIVATE &nam_exe_button ...... AAdd( curs_arr_size[ i_page, 3 ], &nam_exe_button ) ........ ACTION ( Sect_Run_Tasks( &nam_exe_button ), Form_1.Setfocus, form_graph_tab() ) ................ NEXT или FOR i_button := 1 TO kol_button ........... image_ch1 := "CH2Image_" + AllTrim( Str( i_page, 3 ) ) + AllTrim( Str( i_button, 3 ) ) PRIVATE &image_ch1 &image_ch1 := AllTrim( Str( i_page, 3 ) ) + AllTrim( Str( i_button, 3 ) ) DEFINE BUTTONEX &( "ButtonEX_" + AllTrim( Str( i_page, 3 ) ) + AllTrim( Str( i_button, 3 ) ) ) // PICTURE arr_menu_button[i_button,7]//choice_bmp1 ICON arr_menu_button[ i_button, 7 ] //choice_bmp1 Row arr_menu_button[ i_button, 1 ] + 25 Col arr_menu_button[ i_button, 2 ] WIDTH arr_menu_button[ i_button, 4 ] HEIGHT arr_menu_button[ i_button, 3 ] BACKCOLOR BROWN //для расцветки по градиенту, иначе не работает FONTSIZE 12//&(font_button[2]) VERTICAL .T. ADJUST .F. ACTION ( Sect_Run_Tasks( &nam_exe_button ), Form_1.Setfocus, form_graph_tab() ) END BUTTONEX ........... NEXT Да Клипер и Харбор позволяет такое делать. А как же общие рекомендации - объявлять все переменные в начале функции. Какие последствия бывают за это ? Ну скорость может чуток падает или еще что-то есть ? Код рабочий, работает... Но по моему не читаемый. Как правильно оформить его ? Я для себя хочу понять, как правильно писать на МиниГуи... Извиняюсь за свое косноязычие....
| |
|
gfilatov2002
|
| moderator
|
Пост N: 391
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.06.12 21:08. Заголовок: Andrey пишет: Объяв..
Andrey пишет: цитата: | Объявление переменных в цикле |
| Вопрос понятен. Посмотрите, как это сделано в коде библиотеки без использования частных переменных: цитата: | FOR nJ := 1 TO nMax(aData) cName := "yVal_Name_"+Ltrim(Str(nJ)) @ nBottom + 8, nI - IF(l3D, nDeep, nDeep + 8) LABEL &cName OF &parent; VALUE aYVals[nJ] AUTOSIZE; FONTCOLOR aClrFore; BACKCOLOR IF( lPrint, WHITE, aClrBack ); FONT _HMG_DefaultFontName SIZE _HMG_DefaultFontSize-1 nI += nWideB NEXT |
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2250
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.12 23:55. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Посмотрите, как это сделано в коде библиотеки без использования частных переменных: |
| Спасибо БОЛЬШОЕ !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2264
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.07.12 21:09. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Петр пишет: цитата: я выложу код c_image.c после окончательной пришлифовка, т.е. более точного копирования поведения loadolepicture Большое спасибо! Но тогда уже это будет включено в следующую сборку |
| А где в новой версии этот пример ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 396
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.07.12 10:25. Заголовок: Andrey пишет: А где..
Andrey пишет: цитата: | А где в новой версии этот пример ? |
| Нету Увы, так и не получил от Петра обещанный отшлифованный код c_image.c
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2265
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.07.12 11:15. Заголовок: Григорий, а где можн..
Григорий, а где можно посмотреть примеры вывода иконок на окно из ресурсов или файлов ? Так как иконки не имеют фона, то их можно выводить на форму - пока вместо PNG файлов. Только как выводить иконки без кнопок ? Пример: MiniGUI\SAMPLES\BASIC\ButtonEx - не подходит.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 398
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.07.12 11:25. Заголовок: Andrey пишет: где м..
Andrey пишет: цитата: | где можно посмотреть примеры вывода иконок на окно из ресурсов или файлов ? |
| Посмотри, например, пример в папке samples\Advanced\IcoView
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2266
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.07.12 14:49. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Посмотри, например, пример в папке samples\Advanced\IcoView |
| Что-то пример какой то замороченный, в смысле - много кода который не нужен. Как просто вывести иконку на форму ?
| |
|
Vladimir
|
| |
Пост N: 10
Зарегистрирован: 27.07.10
|
|
Отправлено: 13.07.12 15:27. Заголовок: @ ... IMAGE <Con..
@ ... IMAGE <ControlName> Пример SAMPLES\BASIC\IMAGE_2 не оно?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2267
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.07.12 15:50. Заголовок: Vladimir пишет: При..
Vladimir пишет: цитата: | Пример SAMPLES\BASIC\IMAGE_2 не оно? |
| А ты туда попробуй иконку 64х64 поставить ! У меня не получилось ...
| |
|
Vladimir
|
| |
Пост N: 11
Зарегистрирован: 27.07.10
|
|
Отправлено: 13.07.12 16:53. Заголовок: Виноват. Похоже, про..
Виноват. Похоже, пропускает не все иконки. Иконка 128х128. Скачана из Интернет, но преобразована в XnView в полноцветную.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2268
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.07.12 17:05. Заголовок: А у меня ни в какую ..
А у меня ни в какую не идет ! Берет только 256 colors - а другие нет ! @ 230,270 IMAGE Image_2 PICTURE 'res\comp32x32.ico' Исходник здесь: http://files.mail.ru/P14ZZE
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2269
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.07.12 17:08. Заголовок: Vladimir пишет: Ико..
Vladimir пишет: цитата: | Иконка 128х128. Скачана из Интернет, но преобразована в XnView в полноцветную. |
| 256-colors или Windows-XP формат цвета иконки ? Выложи иконку и программу. Глянуть хочется как нужно делать. Заранее спасибо.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2281
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.07.12 21:30. Заголовок: Привет. Подскажите к..
Привет. Подскажите как можно сделать следующее.... В начале программы всегда идет объявления ОКНA: DEFINE WINDOW Form_1 AT 0, 344 WIDTH 410 HEIGHT 411 ... и т.д. Изменение параметров и расположение, чтение значений делается через Form_1 Ну например: Function ChangeVersion() Local TypeVersion := Form_1.RadioGroup_1.Value Function SetValue(cDescription,cImage,cPath) Form_1.Label_3.Value := cDescription Form_1.Icon_Big.Icon := cImage Form_1.Text_1.Value := cPath А как можно прочитать/изменить ОКНО если его задать внешне, т.е. имя ОКНА приходит из другой программы ? Макроподстановка не проходит... STATIC MyForm FUNCTION MyEditVers( cWindows ) MyForm := cWindows ...... DEFINE WINDOW &MyForm AT 0, 344 WIDTH 410 HEIGHT 411 ... и т.д. ...... Center WINDOW &MyForm ACTIVATE WINDOW &MyForm Function ChangeVersion() Local TypeVersion := &MyForm.RadioGroup_1.Value // - не работает Function SetValue(cDescription,cImage,cPath) &MyForm.Label_3.Value := cDescription // - не работает &MyForm.Icon_Big.Icon := cImage // - не работает &MyForm.Text_1.Value := cPath // - не работает Заранее спасибо за ответ ! В новой документации MiniGuiPdf.pdf - не нашел. Есть только глава 16. Test Function
| |
|
gfilatov2002
|
| moderator
|
Пост N: 407
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.07.12 10:35. Заголовок: Andrey пишет: В нов..
Andrey пишет: цитата: | В новой документации MiniGuiPdf.pdf - не нашел. |
| По-видимому, плохо искал Обрати внимание на команду DECLARE WINDOW <Form>, которая прямо предназначена для таких вещей Также в таких случаях удобнее использовать функцию SetProperty() вместо псевдо-ООП комманд: Function SetValue(cDescription,cImage,cPath) SetProperty('MyForm','Label_3','Value', cDescription) SetProperty('MyForm','Icon_Big','Icon', cImage) SetProperty('MyForm',Text_1','Value', cPath) и функцию GetProperty(): Function ChangeVersion() Local TypeVersion := GetProperty('MyForm','RadioGroup_1','Value')
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2282
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.07.12 11:11. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Согласен .... gfilatov2002 пишет: цитата: | Обрати внимание на команду DECLARE WINDOW <Form>, которая прямо предназначена для таких вещей |
| А есть пример, а то из описания плохо пока понимаю. gfilatov2002 пишет: цитата: | Также в таких случаях удобнее использовать функцию SetProperty() вместо псевдо-ООП комманд: |
| Спасибо БОЛЬШОЕ, то что надо !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2283
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.07.12 13:55. Заголовок: А как сделать form..
А как сделать form_1.refesh() для моего случая ? Напоминаю, у меня идет определение окна через статик переменную: MyForm := cWindows ...... DEFINE WINDOW &MyForm AT 0, 344 WIDTH 410 HEIGHT 411 ... и т.д. Дело в том что я цвет ОКНА меняю по ходу работы самой программы: SetProperty( MyForm, "BackColor", aNewColor )
| |
|
Dima
|
| |
Пост N: 2476
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.07.12 21:32. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А как сделать form_1.refesh() для моего случая ? |
| Ни как ;) Может все таки refresh ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2284
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.07.12 22:10. Заголовок: Dima пишет: Может в..
Dima пишет: Ошибся малость при переносе на форум.... Дело в том что такое не проходит: & MyForm.refesh() Пробовал: Domethod( MyForm, "Refresh" ) - ничего не происходит. То есть мне нужно перерисовать форму, все объекты которые на ней лежат. Как это сделать ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 408
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.08.12 12:04. Заголовок: Andrey пишет: мне н..
Andrey пишет: цитата: | мне нужно перерисовать форму, все объекты которые на ней лежат. |
| Обшей команды Refresh для всей формы не существует, но Вы можете использовать перерисовку каждого элемента формы по отдельности, как это сделано в примере Color из папки samples\Basic\Color. цитата: | ITEM 'Set Form_1 BackColor' ACTION ( Form_1.BackColor := GetColor(), ; Form_1.Label_1.BackColor := Form_1.BackColor, ; Form_1.Check_1.BackColor := Form_1.BackColor, ; Form_1.Radio_1.BackColor := Form_1.BackColor, ; Form_1.Frame_1.BackColor := Form_1.BackColor, ; Form_1.Slider_1.BackColor := Form_1.BackColor, ; Form_1.Hide, Form_1.Show ) |
| Если не хочется перечислять все элементы формы вручную, то можно использовать массив с именами всех этих элементов из примера Form Controls в папке samples\Basic\Form_Controls: цитата: | /******************************************************************************/ Function _GetArrayOfAllControlsForForm ( cFormName ) /******************************************************************************/ Local nFormHandle , i , nControlCount , aRetVal := {} , x nFormHandle := GetFormHandle ( cFormName ) nControlCount := Len ( _HMG_aControlHandles ) For i := 1 To nControlCount If _HMG_aControlParentHandles == nFormHandle If ValType( _HMG_aControlHandles ) == 'N' IF ! Empty( _HMG_aControlNames ) If Ascan( aRetVal, _HMG_aControlNames ) == 0 Aadd( aRetVal, _HMG_aControlNames ) EndIf ENDIF ElseIf ValType( _HMG_aControlHandles ) == 'A' For x := 1 To Len ( _HMG_aControlHandles ) IF !Empty( _HMG_aControlNames ) If Ascan( aRetVal, _HMG_aControlNames ) == 0 Aadd( aRetVal, _HMG_aControlNames ) EndIf ENDIF Next x EndIf EndIf Next i Return Asort( aRetVal ) |
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2285
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.08.12 14:16. Заголовок: Спасибо БОЛЬШОЕ ! :..
Спасибо БОЛЬШОЕ !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2294
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.08.12 01:01. Заголовок: Можно ли с помощью М..
Можно ли с помощью МиниГуи сделать следующее: 1) PNG файл 128х128 загрузить в память и преобразовать в 128х128 ICO и сохранить файл ? 2) PNG файл любого размера "нарезать" на заданные размеры (для примера 128х128) ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2297
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.08.12 15:50. Заголовок: Сделал обучающий при..
Сделал обучающий пример по иконкам. Не могу заставить компилироваться 2 примера из одного файла: build.bat call hbmk2.bat %* demo1.hbp call hbmk2.bat %* demo2.hbp Пишет ошибку: building... S:\SAMPLES\IconsToForm\build.log Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. Harbour 3.2.0dev (Rev. 17966) Как побороть это ? Содержание: demo1.hbp Скрытый текст
# Incremental-режим компиляции -inc # папка где будут все *.obj -workdir=OBJ1 # Имя EXE-модуля -odemo1.exe # включить путь к MiniGui и своим *.ch и *.fmg -incpath=Z:\MiniGUI\Include # перечисляем все *.prg demo.prg # Ресурсы demo.rc # Пути к основным и добавочным *.lib -lminigui -LZ:\MiniGUI\LIB\
| Содержание: demo2.hbp Скрытый текст
# Incremental-режим компиляции -inc # папка где будут все *.obj -workdir=OBJ2 # Имя EXE-модуля -odemo2.exe # включить путь к MiniGui и своим *.ch и *.fmg -incpath=Z:\MiniGUI\Include # перечисляем все *.prg demo.prg # Ресурсы demo.rc # Пути к основным и добавочным *.lib -lminigui -LZ:\MiniGUI\LIB\
|
| |
|
AlexMyr
|
| |
Пост N: 569
Зарегистрирован: 11.06.10
|
|
Отправлено: 20.08.12 16:01. Заголовок: Посмотрел hbp файлы,..
Посмотрел hbp файлы, вопрос: demo.prg это один файл или он разный и лежит в разных папках? где содержимое hbmk2.bat? Так пробовал? call hbmk2.bat %* demo*.hbp
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2298
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.08.12 16:35. Заголовок: AlexMyr пишет: вопр..
AlexMyr пишет: цитата: | вопрос: demo.prg это один файл или он разный и лежит в разных папках? |
| Это один и тот же файл. AlexMyr пишет: цитата: | Так пробовал? call hbmk2.bat %* demo*.hbp |
| Попробовал ! Получилось !!! Спасибо БОЛЬШОЕ !!!
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2302
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.08.12 12:21. Заголовок: Всем привет ! Подск..
Всем привет ! Подскажите пожалуйста, как задавать цвет STATUSBAR-а ? И изменять цвет STATUSBAR по надобности ? Типа: DoMethod( MyForm,"Statusbar","Refresh") ??? а есть ли такой метод ??? Заранее спасибо.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2328
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.09.12 14:57. Заголовок: МиниГуи - пример SAM..
МиниГуи - пример SAMPLES\BASIC\DirectoryRecurse Если в папки записать файлы без расширений, то ничего НЕ ПОКАЗЫВАЕТ ! Почему ? Папка для пробы здесь http://files.mail.ru/QJS1VX
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2407
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.11.12 20:11. Заголовок: Можно ли узнать како..
Можно ли узнать какой тип картинки записан в ресурсе EXE-ника ? Т.е. у меня в rc файле лежат два разных файла: DEMO1 BITMAP "res\LOGO_DEMO.BMP" DEMO2 JPG "res\harbour-logo.jpg" А в программе я хочу определить какой тип файла, чтобы вычислить размер рисунка: // если тип файла "BMP" IF ???? ______aSize := BmpSize( cFile ) ELSE ______aSize := JpgSize( cFile ) ENDIF nWidth := aSize[1] nHeight := aSize[2] И почему в ХЕЛПЕРе нет описание функции JpgSize( cFile ) и hb_GetImageSize() ? Нашел только в примере \MiniGUI\SAMPLES\Advanced\JpgViewer, да и то с переназначением(вызовом) функции hb_GetImageSize() ? Да и то эта функция выдает размер файла на диске, а не в ресурсе !!! Облом... Что нельзя было сделать общую функцию определения размера картинки независимо от типа файла и типа размещения (т.е. файл на диске или файл в ресурсе) ??? Может уже есть такая функция, а я не нашел...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2487
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.12.12 21:34. Заголовок: Всем привет. Как реа..
Всем привет. Как реализовать следующее: Имею объект ГРИД: DEFINE GRID Grid_Report ............... HEADERS {'№','Наименование отчета', 'Файл' } WIDTHS { 30,430, 120 } ITEMS LoadReport() VALUE 1 HEADERIMAGES aImages BACKCOLOR { 159, 191, 236 } TOOLTIP 'Выбор отчета/F4-Редактирование отчета' ONDBLCLICK LoadViewFr3() END GRID ....... ///////////////// FUNCTION LoadViewFr3() ??? Как узнать выбранный элемент массива и название файла ? Как можно назначить клавишу (допустим F4) - чтобы вызывалась отдельная функция ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2489
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.12.12 12:52. Заголовок: Разобрался я с элеме..
Разобрался я с элементами меню ГРИДА... И как назначить горячую клавишу на форме.. вот результат, если кому интересно... http://files.mail.ru/RNWL47
| |
|
gfilatov2002
|
| moderator
|
Пост N: 431
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.12.12 14:50. Заголовок: Andrey пишет: Разоб..
Andrey пишет: цитата: | Разобрался я с элементами меню ГРИДА... И как назначить горячую клавишу на форме |
| Супер! Но вместо дополнительной функции GetColValue( xObj, xForm, nCol ) можно использовать стандарный объект Cell (row, col) Например, так: цитата: | FUNCTION LoadViewFr3() LOCAL cMsg := Form_1.Grid_Report.Cell( this.value, 3 ) LOCAL cMsg2 := Form_1.Grid_Report.Cell( this.value, 2 ) MsgInfo( cMsg ) MsgInfo( cMsg2 ) //MsgInfo( GetColValue( "Grid_Report", "Form_1", 3 ) ) //MsgInfo( GetColValue( "Grid_Report", "Form_1", 2 ) ) RETURN NIL |
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2490
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.12.12 15:50. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Спасибо БОЛЬШОЕ ! Как насчет моего письма ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2493
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.12.12 09:34. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | можно использовать стандарный объект Cell (row, col) |
| Для мышки и ENTER это работает ! А по горячей клавише F4 - вылетает с ошибкой.... Как можно исправить ? Исходник здесь. http://files.mail.ru/42OT6H
| |
|
gfilatov2002
|
| moderator
|
Пост N: 432
Зарегистрирован: 11.02.10
|
|
Отправлено: 20.12.12 11:31. Заголовок: Andrey пишет: А по ..
Andrey пишет: цитата: | А по горячей клавише F4 - вылетает с ошибкой |
| А если попробовать так: Скрытый текст
#include "minigui.ch" #define PROGRAM 'Тест-Grid' #define COPYRIGHT MiniGUIVersion()+","+Version()+","+hb_compiler() REQUEST HB_CODEPAGE_RU1251 Function MAIN() Local cResPicture, nWidth, nHeight LOCAL fColor := { | Val, CellRowIndex | IF ( CellRowIndex / 2 == Int( CellRowIndex / 2 ) , RGB( 0, 0, 255 ) , RGB( 0, 255, 0 ) ) } LOCAL fColor2 := { | Val, CellRowIndex | IF ( CellRowIndex / 2 == Int( CellRowIndex / 2 ) , RGB( 159, 191, 236 ) , RGB( 159, 191, 236 ) ) } SET LANGUAGE TO RUSSIAN SET CODEPAGE TO RUSSIAN SET DATE TO GERMAN DEFINE WINDOW Form_1; AT 0,0 ; WIDTH 650 HEIGHT 500 ; ICON "ICO_AAA" ; TITLE PROGRAM ; NOMAXIMIZE NOSIZE ; MAIN @ 0,10 LABEL Label_9 WIDTH 500 HEIGHT 40 ; VALUE 'MiniGUI ТЕСТ объекта GRID !' TRANSPARENT FONT "ARIAL" ; SIZE 18 BOLD FONTCOLOR BLACK BACKCOLOR YELLOW CENTERALIG DEFINE GRID Grid_Report Row 110 Col 15 WIDTH 590 HEIGHT 250 HEADERS {'№','Наименование отчета', 'Файл' } WIDTHS { 30,430, 120 } ITEMS LoadReport() VALUE 1 HEADERIMAGES {} BACKCOLOR { 159, 191, 236 } FONTSIZE 16 FONTBOLD .T. FONTCOLOR { 255, 0, 255 } DYNAMICFORECOLOR { fColor , fColor, fColor } DYNAMICBACKCOLOR { fColor2, fColor2, fColor2 } TOOLTIP 'Выбор отчета/F4-Редактирование отчета' ONHEADCLICK { {|| MsgInfo('Header 1 Clicked !')} , { || MsgInfo('Header 2 Clicked !')} } ONDBLCLICK LoadViewFr3(1) END GRID DEFINE STATUSBAR FONT "MS Sans serif" SIZE 10 BOLD STATUSITEM COPYRIGHT DATE CLOCK END STATUSBAR ON KEY F4 ACTION LoadViewFr3(2) END WINDOW SetProperty( "Form_1", "BackColor" , { 159, 191, 236 } ) CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return Nil ///////////////////////////////////////////////////////////// FUNCTION LoadViewFr3(nK) //MsgInfo( GetColValue( "Grid_Report", "Form_1", 3 ),"GetColValue ->" ) //MsgInfo( GetColValue( "Grid_Report", "Form_1", 2 ),"GetColValue ->" ) IF nK == 1 MsgInfo( Form_1.Grid_Report.Cell( this.value, 3 ) ,"this.value, 3 ->") MsgInfo( Form_1.Grid_Report.Cell( this.value, 2 ),"this.value, 2 ->" ) ELSE MsgInfo( Form_1.Grid_Report.Cell( GetProperty("Form_1", "Grid_Report", "value"), 3 ) ,"value, 3 ->") MsgInfo( Form_1.Grid_Report.Cell( GetProperty("Form_1", "Grid_Report", "value"), 2 ),"value, 2 ->" ) ENDIF RETURN NIL //////////////////////////////////////////////////////////// FUNCTION LoadReport() LOCAL aRows := { } AAdd( aRows, {"1.", "Свод по поступлению из банка", "prixod.fr3" } ) AAdd( aRows, {"2.", "Свод по начислению из банка" , "nachis.fr3" } ) AAdd( aRows, {"3.", " резерв..............3 ", "*3.fr3" } ) AAdd( aRows, {"4.", " резерв..............4 ", "*4.fr3" } ) RETURN aRows *--------------------------------------------------------------* Function GetColValue( xObj, xForm, nCol ) *--------------------------------------------------------------* Local nPos:= GetProperty(xForm, xObj, 'Value') Local aRet:= GetProperty(xForm, xObj, 'Item', nPos) Return aRet[nCol]
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2495
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.12.12 23:31. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Спасибо ! Я понял как делать...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2496
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.12.12 23:42. Заголовок: Есть красивый пример..
Есть красивый пример \MiniGUI\SAMPLES\Advanced\Tsb_filter\demo.prg Пробовал его переделать под себя и не получилось: 1) Как запретить вывод(показ) всех полей базы (т.е. поля NOT1, NOT2, NOT3 - не показывать в TsBrowse) ? 2) Как разрешить редактировать ВСЕ поля в TsBrowse ? 3) Как разрешить редактировать ТОЛЬКО выборочные поля (KVIEWUK, KOD_EIRC, EIRC) в TsBrowse ? Заранее спасибо за ответ. Пример и база здесь. http://files.mail.ru/AEKHPY
| |
|
gfilatov2002
|
| moderator
|
Пост N: 433
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.12.12 13:33. Заголовок: Andrey пишет: 1) Ка..
Andrey пишет: цитата: | 1) Как запретить вывод(показ) всех полей базы (т.е. поля NOT1, NOT2, NOT3 - не показывать в TsBrowse) ? |
| Можно просто скрыть их (как сделано в примере ниже) или не загружать вовсе (с помошью функции LoadFields()). Andrey пишет: цитата: | 2) Как разрешить редактировать ВСЕ поля в TsBrowse ? |
| Вызвать метод oBrw:LoadFields( .T. ) c параметром .T. - и все поля редактируемые Andrey пишет: цитата: | 3) Как разрешить редактировать ТОЛЬКО выборочные поля (KVIEWUK, KOD_EIRC, EIRC) в TsBrowse ? |
| Для этого надо разрешить перемещение по полям внутри строки данных и установить флажок редактирования для требуемых полей. Рабочий пример см. ниже (все изменения сделаны в FUNCTION CreateBrowse): Скрытый текст
#include "minigui.ch" #include "tsbrowse.ch" REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 STATIC aFont := {} MEMVAR oBrw_1 FUNCTION Main() LOCAL cIndex, cFilter LOCAL cDbf := GetStartupFolder() + '\test_2.dbf' LOCAL cFileIndex := GetStartupFolder() + '\test_200.cdx' REQUEST DBFCDX , DBFFPT SET LANGUAGE TO RUSSIAN // язык SET CODEPAGE TO RUSSIAN // кодовая страница RDDSETDEFAULT('DBFCDX') SET CENTURY ON SET DELETED ON DEFINE FONT Font_1 FONTNAME "Times New Roman" SIZE 12 DEFINE FONT Font_2 FONTNAME "Times New Roman" SIZE 11 DEFINE FONT Font_3 FONTNAME "Times New Roman" SIZE 10 BOLD AAdd( aFont, GetFontHandle( "Font_1" ) ) AAdd( aFont, GetFontHandle( "Font_2" ) ) AAdd( aFont, GetFontHandle( "Font_3" ) ) DEFINE WINDOW Form_0 ; At 0, 0 ; WIDTH 790 ; HEIGHT 450 ; TITLE 'TsBrowse sample: Incremental search' ; ICON 'lupa.ico' ; MAIN ; NOMAXIMIZE ; NOSIZE DEFINE LABEL Message ROW 7 COL 10 WIDTH 80 HEIGHT 16 VALUE 'Поиск:' FONTBOLD .T. END LABEL DEFINE TEXTBOX Text_1 ROW 5 COL 90 WIDTH 345 HEIGHT 21 ON CHANGE {|| RefreshBrowse()} END TEXTBOX ON KEY ESCAPE ACTION ThisWindow.Release END WINDOW DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 600 ; HEIGHT 40 ; CHILD ; NOSYSMENU ; NOCAPTION DEFINE LABEL Label_1 ROW iif( IsVista().or.IsSeven(), 5, 10 ) COL 10 WIDTH 580 HEIGHT 24 VALUE '' CENTERALIGN .T. END LABEL END WINDOW //ScanSoft( cDbf ) USE (cDbf) ALIAS 'B1' SHARED NEW CODEPAGE("RU866") cIndex := "UPPER(FIELD->Name_UK)" cFilter := "FIELD->Kod_UK > 0 .AND. DELETED()==.F." INDEX ON &cIndex TAG KODVIEW TO (cFileIndex) ; FOR &cFilter ADDITIVE ORDLISTADD( cFileIndex ) DBSETORDER(1) GOTO TOP CreateBrowse( "oBrw_1", 'Form_0', 30, 2, Form_0.Width-10, Form_0.Height-60, 'B1' ) oBrw_1:aColumns[1]:cHeading := "Код" + CRLF + "Упр.Комп." oBrw_1:SetColSize(1, 60) oBrw_1:aColumns[1]:nAlign := DT_CENTER oBrw_1:aColumns[2]:cHeading := "Наименование Упр.Комп." oBrw_1:SetColSize(2, 350) oBrw_1:aColumns[2]:nAlign := DT_LEFT oBrw_1:aColumns[3]:cHeading := "Код" + CRLF + "показа" oBrw_1:SetColSize(3, 60) oBrw_1:aColumns[3]:nAlign := DT_CENTER oBrw_1:aColumns[4]:cHeading := "Код" + CRLF + "ЕИРЦ" oBrw_1:SetColSize(4, 60) oBrw_1:aColumns[4]:nAlign := DT_RIGHT oBrw_1:aColumns[5]:cHeading := "Наименование ЕИРЦ г.Москвы" oBrw_1:SetColSize(5, 250) oBrw_1:aColumns[5]:nAlign := DT_LEFT Form_0.Text_1.Setfocus CENTER WINDOW Form_0 ACTIVATE WINDOW ALL RETURN Nil FUNCTION CreateBrowse( cBrw, cParent, nRow, nCol, nWidth, nHeight, cAlias ) LOCAL i PUBLIC &cBrw DEFINE TBROWSE &cBrw ; AT nRow, nCol ; ALIAS cAlias ; OF &cParent ; WIDTH nWidth ; HEIGHT nHeight ; COLORS { CLR_BLACK, CLR_BLUE } ; FONT "MS Sans Serif" ; SIZE 8 ; SELECTOR .T. END TBROWSE &cBrw:LoadFields( .F. ) // &cBrw:LoadFields( .T. ) - все поля редактируемые &cBrw:HideColumns( {6,7,8}, .T.) &cBrw:lNoHScroll := .T. &cBrw:lCellBrw := .T. &cBrw:aColumns[3]:lEdit := .T. &cBrw:aColumns[4]:lEdit := .t. &cBrw:aColumns[5]:lEdit := .T. &cBrw:nSelWidth := 16 &cBrw:ChangeFont( aFont[ 1 ], , 1 ) &cBrw:ChangeFont( aFont[ 3 ], 1 , 1 ) &cBrw:ChangeFont( aFont[ 3 ], , 2 ) &cBrw:nHeightCell += 6 &cBrw:nHeightHead += 14 &cBrw:nWheelLines := 1 &cBrw:SetColor( { 16 }, { Rgb( 43, 149, 168 )}) // Цвет фона в суперхидере &cBrw:SetColor( { 3 }, { Rgb( 255, 255, 255 )}) // шрифт в шапке &cBrw:SetColor( { 4 }, { { || { Rgb( 43, 149, 168 ), Rgb( 0, 54, 94 )}}}) // Шапка &cBrw:SetColor( { 17 }, { Rgb( 255, 255, 255 )}) // Цвет шрифта в суперхидере &cBrw:SetColor( { 6 }, { { || { Rgb( 255, 255, 74 ), Rgb( 240, 240, 0 )}}}) // фон курсора &cBrw:SetColor( { 12 }, { { || { Rgb( 128, 128, 128 ), Rgb( 250, 250, 250 )}}}) // фон курсора неактивного &cBrw:SetColor( { 2 }, { { || Rgb( 230, 240, 255 )}}) // фон не в курсоре &cBrw:SetColor( { 1 }, { { || Rgb( 0, 0, 0 )}}) // текст в ячейках &cBrw:SetColor( { 5 }, { { || Rgb( 0, 0, 255 )}}) // текст в ячейках с фокусом &cBrw:SetColor( { 11 }, { { || Rgb( 0, 0, 0 )}}) // цвет текста в курсоре неактивном &cBrw:nClrLine := COLOR_GRID &cBrw:SetAppendMode( .F. ) &cBrw:SetDeleteMode( .F. ) &cBrw:ResetVScroll() RETURN Nil STATIC FUNCTION RefreshBrowse() LOCAL cSeek := Alltrim( Form_0.Text_1.Value ) LOCAL cExp := "'" + UPPER(cSeek) + "' $ UPPER(B1->Name_Uk)" IF !Empty(cSeek) B1->( DbSetFilter( &("{||" + cExp + "}"), cExp ) ) ELSE B1->( DbClearFilter() ) END oBrw_1:Reset() RETURN Nil
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2502
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.12.12 14:00. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Спасибо БОЛЬШОЕ !!! Чувствуется рука мастера !!! А еще вопрос по этому примеру: зачем нужно в этом примере следующая конструкция ? Скрытый текст DEFINE LABEL Label_1 ROW iif( IsVista().or.IsSeven(), 5, 10 ) COL 10 WIDTH 580 HEIGHT 24 VALUE '' CENTERALIGN .T. END LABEL
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2507
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.12.12 12:37. Заголовок: Добавил этот пример ..
Добавил этот пример к своему проекту. ОДИН раз работает, при повторном вызове - вылетает с ошибкой: 53 строка: DEFINE FONT Font_1 FONTNAME "Times New Roman" SIZE 12 DEFINE FONT Font_2 FONTNAME "Times New Roman" SIZE 11 DEFINE FONT Font_3 FONTNAME "Times New Roman" SIZE 10 BOLD Я так понимаю, что шрифт повторно переопределяется ? Я нашел что нужно делать RELEASE FONT <cName>. В примере для выхода есть: ON KEY ESCAPE ACTION ThisWindow.Release Вместо неё (ThisWindow.Release) нужно написать свою функцию и там УДАЛИТЬ фонты ? Или можно как то по другому сделать ?
| |
|
subbota
|
| |
Пост N: 19
Зарегистрирован: 16.12.09
|
|
Отправлено: 23.12.12 16:11. Заголовок: Можно ли загружать ..
У меня вопрос простой. Можно ли в MiniGui запускать ide сразу с проектом по щелчку мышки на файле проекта *.hpj или *.hbp ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 54
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.12.12 12:15. Заголовок: Andrey пишет:Или мож..
Andrey пишет: цитата: | Или можно как то по другому сделать ? |
| Можно: ON RELEASE ( <свои действия> ) ... ON KEY ESCAPE ACTION ThisWindow.Release // не менять Применяя команды препроцессора (как в Clipper std.ch ), надо смотреть, что внутри - сильно помогает в понимании MiniGui, которая устроена довольно стройно: I_<Контрл>.CH - команды препроцессора H_<Контрл>.PRG - функции создания контрола и работы с ним C_<Контрл>.C - HB_FUN для работы с контролом Примеры: DEFINE FONT ... из i_font.ch вызывает _DefineFont(...) из h_font.prg , @ <row>,<col> LABEL ... из i_Label.ch вызывает _DefineLabel(...) из h_Label.prg , @ <row>,<col> GRID ... из i_grid.ch вызывает _DefineGrid(...) из h_Grid.prg и так далее. Посмотрев на функцию _Define...(...) можно увидеть, что назначено по умолчанию, а самое главное, как используются переменные _HMG_... ( полный список в I_VAR.CH). В примере с GRID была использована доп. функция GetColValue( xObj, xForm, nCol ), а можно было использовать готовую функцию из h_grid.prg _GetGridCellValue ( ControlName , ParentForm , Row , Col ) и для замены _SetGridCellValue ( ControlName , ParentForm , Row , Col , CellValue ).
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2510
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.12.12 14:32. Заголовок: SergKis спасибо БОЛЬ..
SergKis спасибо БОЛЬШОЕ !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2511
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.12.12 14:45. Заголовок: В примере MiniGUI ..
В примере MiniGUI\SAMPLES\Advanced\CHECKMAILBOX используется функция для пароля CHARXOR(): PUBLIC cCryptKey := REPL( "#$@%&", 2 ) ........... cPass := CHARXOR( GetIni( NTRIM(nI)+"/16", "Password", "", cIniFile ), cCryptKey ) Я её к себе в программу поставил и обнаружил фигню.... Если пароль из цифр ставить, то все.... ! Перестает работать пароль. С чем связано, не знаю, наверно из ини-файла эту строку Харбор считать не может. Я с таким еще на Клипере сталкивался. Чем можно заменить эту функцию, чтобы можно было считывать/записывать любой пароль в ини-файл ? Пример здесь. http://files.mail.ru/VAPIMT
| |
|
a_sidorov
|
| |
Пост N: 24
Зарегистрирован: 07.06.08
|
|
Отправлено: 26.12.12 08:06. Заголовок: Вы пишете в текстово..
Вы пишете в текстовой ини файл бинарный код. Для некоторых символов Вы получаете в ини файле коды 10, 13 и т.д. которые при считывании GetPrivateProfileString воспринимаются как конец строки и пароль обрезается. Нужно писать не коды символов, а их представление, например \u0013 -код 13
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2514
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.12.12 09:14. Заголовок: Я понял это еще в кл..
Я понял это еще в клипере. Просто думал что есть готовая функция в Харборе для таких целей... А так получается, что строку нужно писать в кодах ascii или еще как нибудь. Наверно достаточно будет воспользоваться функциями HB_StrToHEX() и HB_HexToStr() !
| |
|
SergKis
|
| постоянный участник
|
Пост N: 63
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.12.12 09:31. Заголовок: Andrey пишет: Наверн..
Andrey пишет: цитата: | Наверно достаточно будет воспользоваться функциями HB_StrToHEX() и HB_HexToStr() |
| Никогда не скрывал пароли разными способами, запоминал как есть. Рано или поздно всегда, кто нибудь забудет и тогда просто глянул и проблема снята !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2515
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.12.12 09:56. Заголовок: SergKis пишет: Рано..
SergKis пишет: цитата: | Рано или поздно всегда, кто нибудь забудет и тогда просто глянул |
| Для этого есть пароль Админа в программе (для изменения и просмотра).
| |
|
SergKis
|
| постоянный участник
|
Пост N: 65
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.12.12 10:58. Заголовок: Andrey пишет:Для это..
Andrey пишет: цитата: | Для этого есть пароль Админа в программе (для изменения и просмотра) |
| Это когда ты один, а если Админами являются люди "внедренцы" со своими паролями Админ (я не знаю эти пароли) и когда они не доступны, по разным причинам, обращаются ко мне и достаточно по удаленке просто глянуть ини и ВСЕ ... , а не разбираться что и где надо запустить с паролем Админ. Но все это субъективно и дело привычки.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2534
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.01.13 13:27. Заголовок: Подскажите пожалуйст..
Подскажите пожалуйста пример (или функции), где можно запомнить координаты своей задачи на рабочем столе (в файл ini), а затем восстановить окно в этих координатах.
| |
|
Avf
|
| |
Пост N: 18
Зарегистрирован: 19.10.05
|
|
Отправлено: 08.01.13 17:24. Заголовок: ResizeIt из Samples&..
ResizeIt из Samples\Advanced
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2535
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.01.13 09:48. Заголовок: Avf пишет: ResizeIt..
Avf пишет: цитата: | ResizeIt из Samples\Advanced |
| Спасибо БОЛЬШОЕ !!!
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2536
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.01.13 09:52. Заголовок: Подскажите, как можн..
Подскажите, как можно проверить ввод 2-х паролей и если они не одинаковы, то вернуться назад ? Имею такую конструкцию: Local cPwd, cPwd2 ...... @ 173,155 TEXTBOX Text_Pass1 HEIGHT 24 WIDTH 190 VALUE cPwd PASSWORD ; ON LOSTFOCUS {|| cPwd := Form_1.Text_Pass1.Value } ; ON ENTER Form_1.Text_Pass2.SetFocus @ 214,30 LABEL Label_Pass2 VALUE "Повтор:" WIDTH 120 HEIGHT 24 ; @ 211,155 TEXTBOX Text_Pass2 HEIGHT 24 WIDTH 190 VALUE cPwd2 PASSWORD ; ON LOSTFOCUS {|| cPwd2 := Form_1.Text_Pass2.Value } ; ON ENTER {|| IF( cPwd2#cPwd,MsgInfo("Пароли не одинаковы ! Повторите ввод заново !") , SaveConfig(cUsr,cPwd) ) }
| |
|
Avf
|
| |
Пост N: 19
Зарегистрирован: 19.10.05
|
|
Отправлено: 09.01.13 11:36. Заголовок: Можно, например, так..
Можно, например, так while .t. ввод если пароли совпадают выйти иначе сбросить контролы end
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2537
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.01.13 12:32. Заголовок: Avf пишет: Можно, н..
Avf пишет: цитата: | Можно, например, так while .t. |
| Нельзя так. Это на форме редактируется.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 67
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.01.13 14:35. Заголовок: Andrey пишет:Подскаж..
Andrey пишет: цитата: | Подскажите, как можно проверить ввод 2-х паролей |
| Примерно так: Скрытый текст SET NAVIGATION EXTENDED // вкл.навигацию по Enter дополнительно к кл. TAB ... DEFINE WINDOW MyWnd ... // описание окна и контролов окна ... ON INIT ( ... ) // выполняется когда Show окна выполнен в ACTIVATE WINDOW ON RELEASE ( ... ) // выполняется перед разрушением окна ... @ 173,155 TEXTBOX Text_Pass1 HEIGHT 24 WIDTH 190 VALUE cPwd PASSWORD @ 214, 30 LABEL Label_Pass2 VALUE "Повтор:" WIDTH 120 HEIGHT 24 @ 211,155 TEXTBOX Text_Pass2 HEIGHT 24 WIDTH 190 VALUE cPwd2 PASSWORD ... DEFINE BUTTON OK ... ACTION PressOk() // действия по окончании ввода DEFINE BUTTON Cancel ... ACTION ThisWindow.Release // действия по завершению работы с окном ... END WINDOW // конец описания. ОТОБРАЖЕНИЯ ЕЩЕ НЕТ ! ... ACTIVATE WINDOW MyWnd // здесь выполняется Show(). ОТОБРАЖЕНИЕ окна появилось и // включается цикл обработки сообщений из очереди. // Обработчик - функция Event(hWnd, nMsg, wParam, lParam) // см. h_events.prg // если попали сюда окна уже нет, ThisWindow.Release уже отработал RETURN FUNCTION PressOk() Local cUsr, cPwd, cPwd2 cUsr := GetProperty("MyWnd", "Text_User" , "Value") cPwd := GetProperty("MyWnd", "Text_Pass1", "Value") cPwd2 := GetProperty("MyWnd", "Text_Pass2", "Value") IF cPwd == cPwd2 SaveConfig(cUsr, cPwd) ELSE MsgInfo("Пароли не одинаковы ! Повторите ввод заново !") DoMethod("MyWnd", "Text_Pass1", "SetFocus") ENDIF RETURN
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2538
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.01.13 20:36. Заголовок: SergKis пишет: Прим..
SergKis пишет: Спасибо БОЛЬШОЕ ! Очень подробно и с разъяснениями !!! Просто супер !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2539
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.01.13 10:48. Заголовок: Не нравиться порядок..
Не нравиться порядок написания программ в МиниГуи... уж очень растянуто получается... Подскажите можно ли как то уменьшить или изменить это ? Вот например: Скрытый текст DEFINE WINDOW Form_1 ; ON INIT MyInitColor() DEFINE TAB Tab_1 ; ON CHANGE (ChangeColor(), Form_1.Button_Save.Visible := (Form_1.Tab_1.Value < 4), ; Form_1.Button_Exit.Visible := (Form_1.Tab_1.Value < 4), ; Form_1.Button_Exit.Visible := (Form_1.Tab_1.Value < 4) ) PAGE ' Сайт ' @ 34, 20 LABEL Label_1 VALUE "Filling color:" WIDTH 370 HEIGHT 26 TRANSPARENT @ 66,20 FRAME Frame_1a CAPTION "Адрес сайта" ; BACKCOLOR aBackColors ; WIDTH 470 HEIGHT 52 OPAQUE @ 88,30 TEXTBOX Text_Adres ; WIDTH 450 ; VALUE cHttp ; TOOLTIP "Адрес сайта куда отправлять данные."; FONT "Courier New" Size 12 ; MAXLENGTH 60 LOWERCASE ; ON LOSTFOCUS {|| Form_1.Button_Save.Enabled := .T. } ON ENTER Form_1.Spinner_2.SetFocus @ 166,20 FRAME Frame_1s CAPTION "Пересчет и отправка на сайт" ; BACKCOLOR aBackColors ; WIDTH 470 HEIGHT 52 OPAQUE @ 188,30 LABEL Label_Time VALUE "Время пересчета" ; FONT "Courier New" Size 12 ; WIDTH 180 HEIGHT 24 @ 185,195 SPINNER Spinner_2 RANGE 5,900 VALUE nInterval ; FONT "Courier New" Size 12 ; WIDTH 58 HEIGHT 24 INCREMENT 5 ON LOSTFOCUS {|| Form_1.Button_Save.Enabled := .T. } ON ENTER Form_1.Button_Save.SetFocus @ 188,255 LABEL Label_Sec VALUE "секунд" ; FONT "Courier New" Size 12 ; WIDTH 75 HEIGHT 24 END PAGE PAGE ' Пути ' @ 34, 20 LABEL Label_2 VALUE "Filling color:" WIDTH 370 HEIGHT 26 TRANSPARENT @ 66, 20 LABEL Label_2Za VALUE "Путь к БД-Заявка:" WIDTH 370 HEIGHT 26 TRANSPARENT BOLD @ 88, 20 TEXTBOX Text_PathZa WIDTH 440 VALUE "C:\TEMP\" TOOLTIP "Путь к БД-Заявка." ; FONT "Courier New" Size 12 BOLD ; MAXLENGTH 60 LOWERCASE READONLY @ 88, 465 BUTTONEX Button_PathZa WIDTH 28 HEIGHT 28 ; ICON "OPEN24" ACTION Button_Path() @ 126, 20 LABEL Label_2Spr VALUE "Путь к БД-справочникам:" WIDTH 370 HEIGHT 26 TRANSPARENT BOLD @ 148, 20 TEXTBOX Text_PathSpr WIDTH 440 VALUE "C:\TEMP\" TOOLTIP "Путь к БД-справочникам." ; FONT "Courier New" Size 12 BOLD ; MAXLENGTH 60 LOWERCASE READONLY @ 148, 465 BUTTONEX Button_PathSpr WIDTH 28 HEIGHT 28 ; ICON "OPEN24" ACTION Button_Path() @ 186, 20 LABEL Label_2TD VALUE "Путь к БД-статистики заявок за текущий день:" WIDTH 430 HEIGHT 26 TRANSPARENT BOLD @ 208, 20 TEXTBOX Text_PathTD WIDTH 440 VALUE "C:\TEMP\" TOOLTIP "Путь к БД-статистики заявок за текущий день." ; FONT "Courier New" Size 12 BOLD ; MAXLENGTH 60 LOWERCASE READONLY @ 208, 465 BUTTONEX Button_PathTD WIDTH 28 HEIGHT 28 ; ICON "OPEN24" ACTION Button_Path() @ 246, 20 LABEL Label_2TY VALUE "Путь к БД-статистики заявок за год:" WIDTH 430 HEIGHT 26 TRANSPARENT BOLD @ 268, 20 TEXTBOX Text_PathTY WIDTH 440 VALUE "C:\TEMP\" TOOLTIP "Путь к БД-статистики заявок за год." ; FONT "Courier New" Size 12 BOLD ; MAXLENGTH 60 LOWERCASE READONLY @ 268, 465 BUTTONEX Button_PathTY WIDTH 28 HEIGHT 28 ; ICON "OPEN24" ACTION Button_Path() END PAGE PAGE ' Пароли ' @ 34, 20 LABEL Label_3 VALUE "Filling color:" WIDTH 370 HEIGHT 26 TRANSPARENT @ 66, 20 LABEL Label_4Pass VALUE "Путь к БД-паролей:" WIDTH 370 HEIGHT 26 TRANSPARENT BOLD @ 88, 20 TEXTBOX Text_4Pass WIDTH 440 VALUE "C:\TEMP\" TOOLTIP "Путь и БД-паролей (password.dbf)" ; FONT "Courier New" Size 12 BOLD ; MAXLENGTH 60 LOWERCASE READONLY @ 88, 465 BUTTONEX Button_4Pass WIDTH 28 HEIGHT 28 ; ICON "OPEN24" ACTION Button_Path() @ 126,20 FRAME Frame_Direct CAPTION "Руководитель фирмы" ; BACKCOLOR aBackColors ; WIDTH 470 HEIGHT 185 OPAQUE @ 160, 45 BUTTONEX Button_User WIDTH 68 HEIGHT 68 ; ICON "USER64" @ 170,90 LABEL Label_DirLog VALUE "Логин:" ; WIDTH 150 HEIGHT 24 RIGHTALIGN ; FONT "Courier New" Size 12 @ 170,245 TEXTBOX Text_Direct ; WIDTH 190 ; VALUE "User" ; FONT "Courier New" Size 12 ; MAXLENGTH 40 ; ON LOSTFOCUS {|| Form_1.Button_Save.Enabled := .T. } ON ENTER Form_1.Spinner_Firma.SetFocus @ 210,90 LABEL Label_DirPass1 VALUE "Пароль:" WIDTH 150 HEIGHT 24 ; FONT "Courier New" SIZE 12 RIGHTALIGN @ 210,245 TEXTBOX Text_DirPass1 HEIGHT 24 WIDTH 190 VALUE cPwd PASSWORD ; ON LOSTFOCUS {|| cPwd := Form_1.Text_DirPass1.Value } ; ON ENTER Form_1.Text_DirPass2.SetFocus @ 250,90 LABEL Label_DirPass2 VALUE "Повтор пароля:" WIDTH 150 HEIGHT 24 ; FONT "Courier New" SIZE 12 RIGHTALIGN @ 250,245 TEXTBOX Text_DirPass2 HEIGHT 24 WIDTH 190 VALUE cPwd2 PASSWORD ; ON LOSTFOCUS {|| cPwd2 := Form_1.Text_DirPass2.Value } ; ON ENTER {|| IF( cPwd2#cPwd,MsgInfo("Пароли не одинаковы ! Повторите ввод заново !") , SaveConfig() ) } END PAGE END TAB @ 10,480 ANIMATEBOX Avi_1 ; WIDTH 32 ; HEIGHT 32 ; FILE 'LOGO' AUTOPLAY @ 420, 284 BUTTONEX Button_Save ; CAPTION 'Запись' ; ACTION SaveConfig() ; WIDTH 90 ; HEIGHT 34 ; FONT 'Tahoma' ; SIZE 12 @ 420, 416 BUTTONEX Button_Exit ; CAPTION 'Выход' ; ACTION ReleaseAllWindows() ; WIDTH 90 ; HEIGHT 34 ; FONT 'Tahoma' ; SIZE 12 END WINDOW
| На более читаемую версию: Скрытый текст DEFINE WINDOW Form_1 ; ON INIT MyInitColor() DEFINE TAB Tab_1 ; ON CHANGE (ChangeColor(), Form_1.Button_Save.Visible := (Form_1.Tab_1.Value < 4), ; Form_1.Button_Exit.Visible := (Form_1.Tab_1.Value < 4), ; Form_1.Button_Exit.Visible := (Form_1.Tab_1.Value < 4) ) PAGE ' Сайт ' MyPage_Site() END PAGE PAGE ' Пути ' MyPage_Path() END PAGE PAGE ' Пароли ' MyPage_Pass() END PAGE END TAB MyKnopki() END WINDOW Return /////////////////////////////////////// Function MyPage_Site() @ 34, 20 LABEL Label_1 VALUE "Filling color:" WIDTH 370 HEIGHT 26 TRANSPARENT @ 66,20 FRAME Frame_1a CAPTION "Адрес сайта" ; BACKCOLOR aBackColors ; WIDTH 470 HEIGHT 52 OPAQUE @ 88,30 TEXTBOX Text_Adres ; WIDTH 450 ; VALUE cHttp ; TOOLTIP "Адрес сайта куда отправлять данные."; FONT "Courier New" Size 12 ; MAXLENGTH 60 LOWERCASE ; ON LOSTFOCUS {|| Form_1.Button_Save.Enabled := .T. } ON ENTER Form_1.Spinner_2.SetFocus @ 166,20 FRAME Frame_1s CAPTION "Пересчет и отправка на сайт" ; BACKCOLOR aBackColors ; WIDTH 470 HEIGHT 52 OPAQUE @ 188,30 LABEL Label_Time VALUE "Время пересчета" ; FONT "Courier New" Size 12 ; WIDTH 180 HEIGHT 24 @ 185,195 SPINNER Spinner_2 RANGE 5,900 VALUE nInterval ; FONT "Courier New" Size 12 ; WIDTH 58 HEIGHT 24 INCREMENT 5 ON LOSTFOCUS {|| Form_1.Button_Save.Enabled := .T. } ON ENTER Form_1.Button_Save.SetFocus @ 188,255 LABEL Label_Sec VALUE "секунд" ; FONT "Courier New" Size 12 ; WIDTH 75 HEIGHT 24 Return Nil //////////////////////////////////////// Functiom MyPage_Path() @ 34, 20 LABEL Label_2 VALUE "Filling color:" WIDTH 370 HEIGHT 26 TRANSPARENT @ 66, 20 LABEL Label_2Za VALUE "Путь к БД-Заявка:" WIDTH 370 HEIGHT 26 TRANSPARENT BOLD @ 88, 20 TEXTBOX Text_PathZa WIDTH 440 VALUE "C:\TEMP\" TOOLTIP "Путь к БД-Заявка." ; FONT "Courier New" Size 12 BOLD ; MAXLENGTH 60 LOWERCASE READONLY @ 88, 465 BUTTONEX Button_PathZa WIDTH 28 HEIGHT 28 ; ICON "OPEN24" ACTION Button_Path() @ 126, 20 LABEL Label_2Spr VALUE "Путь к БД-справочникам:" WIDTH 370 HEIGHT 26 TRANSPARENT BOLD @ 148, 20 TEXTBOX Text_PathSpr WIDTH 440 VALUE "C:\TEMP\" TOOLTIP "Путь к БД-справочникам." ; FONT "Courier New" Size 12 BOLD ; MAXLENGTH 60 LOWERCASE READONLY @ 148, 465 BUTTONEX Button_PathSpr WIDTH 28 HEIGHT 28 ; ICON "OPEN24" ACTION Button_Path() @ 186, 20 LABEL Label_2TD VALUE "Путь к БД-статистики заявок за текущий день:" WIDTH 430 HEIGHT 26 TRANSPARENT BOLD @ 208, 20 TEXTBOX Text_PathTD WIDTH 440 VALUE "C:\TEMP\" TOOLTIP "Путь к БД-статистики заявок за текущий день." ; FONT "Courier New" Size 12 BOLD ; MAXLENGTH 60 LOWERCASE READONLY @ 208, 465 BUTTONEX Button_PathTD WIDTH 28 HEIGHT 28 ; ICON "OPEN24" ACTION Button_Path() @ 246, 20 LABEL Label_2TY VALUE "Путь к БД-статистики заявок за год:" WIDTH 430 HEIGHT 26 TRANSPARENT BOLD @ 268, 20 TEXTBOX Text_PathTY WIDTH 440 VALUE "C:\TEMP\" TOOLTIP "Путь к БД-статистики заявок за год." ; FONT "Courier New" Size 12 BOLD ; MAXLENGTH 60 LOWERCASE READONLY @ 268, 465 BUTTONEX Button_PathTY WIDTH 28 HEIGHT 28 ; ICON "OPEN24" ACTION Button_Path() Return Nil /////////////////////////////// и т.д.
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2540
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.01.13 13:38. Заголовок: И еще вопрос вдогонк..
И еще вопрос вдогонку к предыдущему сообщению. Видимость объектов на форме какая (допустим Label_1 )? Это Public переменная или другая ? В любом месте только одного модуля PRG можно обращаться к Form_1.Label_1.Value или в других модулях PRG тоже можно обращаться к объектам объявленных ранее ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2545
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.01.13 01:26. Заголовок: Подскажите пожалуйст..
Подскажите пожалуйста, как в GRID'e можно сделать заголовки в 2-3 строчки ? HEADERS { '№;№','1-строка;2-строка'..... } знак ";" как в TBROWSE() для Харбора не прокатывает... Пробовал { '№'+CHR(13)+CHR(10)+'№', '1-строка'+CHR(13)+CHR(10)+'2-строка' ... } тоже не работает....
| |
|
SergKis
|
| постоянный участник
|
Пост N: 68
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.01.13 20:53. Заголовок: Andrey пишет:Видимос..
Andrey пишет: Пока существует окно (не разрушено), существуют и контролы его и они всегда доступны. Хранятся данные в переменных _HMG_... (см. i_var.ch). Скрытый текст
Как заполняются данные на окно в переменных _HMG_aForm... см. h_windows.prg: _DefineWindow(...) ... _HMG_aFormNames [k] := FormName _HMG_aFormHandles [k] := FormHandle ... _HMG_aFormMiscData1 [k] := { cTx } ... там же см. другие полезные функции. Пример: IF _IsWindowDefined ( FormName ) // окно есть - можно работать ENDIF Пока существуют контролы окна они всегда доступны. Как заполняются данные контрола в переменных _HMG_aControl... см. в h_<Контрол>.prg функцию _Define<Контрол>(...) (где то я это уже писал). Пример: h_grid.prg: _DefineGrid(...) ... _HMG_aControlType [k] := if ( multiselect , "MULTIGRID" , "GRID" ) _HMG_aControlNames [k] := ControlName _HMG_aControlHandles [k] := ControlHandle _HMG_aControlParenthandles [k] := ParentFormHandle ... _HMG_aControlMiscData2 [k] := '' ... Как работать с переменными_HMG_aControl... смотри h_controlmisc.prg : _GetValue( ControlName, ParentForm , Index ) _SetValue( ControlName, ParentForm, Value , index ) GetProperty(...) SetProperty(...) DoMethod (...) и т.д. . Пример: IF _IsControlDefined ( ControlName, FormName ) // контрол есть - можно работать ENDIF Пример функции подключаемой в контролах по On LostFocus: Function MyLostFocus() Local i, n, h, cFormName, nFormHandle, cControlName, cControlType, nControlHandle h := GetFocus() // handle контрола в фокусе i := ascan(_HMG_aControlHandles, h) // ищем в массиве всех контролов MiniGui IF i == 0; Return // не нашли - фокус где то ... ENDIF cControlType := _HMG_aControlType cControlName := _HMG_aControlNames cControlHandle := _HMG_aControlHandles n := ascan(_HMG_aFormHandles, _HMG_aControlHandles ) nFormHandle := _HMG_aFormHandles [n] cFormName := _HMG_aFormNames [n] ... Return
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2547
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.01.13 22:53. Заголовок: SergKis пишет: Пока..
SergKis пишет: цитата: | Пока существует окно (не разрушено), существуют и контролы его и они всегда доступны. |
| Т.е. доступны в любых PRG файлах данной программы, как Public переменные ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 70
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.01.13 14:59. Заголовок: Andrey пишет:как Pub..
Andrey пишет: Да как Public переменные. См. h_init.prg: Procedure Init ... Public _HMG_SYSDATA [ _HMG_SYSDATA_SIZE ] ... Повторю пример функции (вчера пропустил пропажу [ i ] и ошибку): Скрытый текст
Function MyLostFocus() Local k, n, h, cFormName, nFormHandle, cControlName, cControlType, nControlHandle h := GetFocus() // handle контрола в фокусе i := ascan(_HMG_aControlHandles, h) // ищем в массиве всех контролов MiniGui IF i == 0; Return // не нашли - фокус где то ... ENDIF cControlType := _HMG_aControlType [ i ] cControlName := _HMG_aControlNames [ i ] nControlHandle := _HMG_aControlHandles [ i ] nFormHandle := _HMG_aControlParenthandles [ i ] n := ascan(_HMG_aFormHandles, _HMG_aControlParenthandles [ i ]) nFormHandle := _HMG_aFormHandles [n] cFormName := _HMG_aFormNames [n] ... Return
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2550
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.01.13 23:42. Заголовок: Подскажите, как можн..
Подскажите, как можно на форме сделать мигающую надпись типа "Выбор здесь !" ? MiniGUI\SAMPLES\BASIC\BLINK - не совсем красивый... цветами бы разными перерисовывался... Или периодически всплывающее окошко с интервалом 5-10 сек. ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 72
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.01.13 13:34. Заголовок: Andrey пишет: как мо..
Andrey пишет: цитата: | как можно на форме сделать мигающую надпись |
| Примерно так: Скрытый текст
DEFINE WINDOW MyWnd ... @ 10, 100 LABEL MyLabel VALUE "Hello !" ... DEFINE TIMER MyWndTimer INTERVAL 2000 ACTION MyWndTimer() ... END WINDOW ... Function MyWndTimer() Local cTx,aFc Static lRu := .T., aFo, aBo IF aFo == NIL aFo := GetProperty("MyWnd", "MyLabel", "FontColor") aBo := GetProperty("MyWnd", "MyLabel", "BackColor") ENDIF IF lRu cTx := "Привет !" aFc := aFo ELSE cTx := "Hello !" aFc := {255, 0, 0} aBc := {255, 0, 0} ENDIF lRu := ! lRu SetProperty("MyWnd", "MyLabel", cTx) SetProperty("MyWnd", "MyLabel", "FontColor", aFc) // SetProperty("MyWnd", "MyLabel", "BackColor", aBc) Return
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2552
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.01.13 16:33. Заголовок: SergKis пишет: Прим..
SergKis пишет: Спасибо БОЛЬШОЕ !!! Что-то медленно мигает, да и 2 цвета всего... и нет цикличности... Скрытый текст #include "minigui.ch" Function MAIN() DEFINE WINDOW MyWnd AT 0,0 ; WIDTH 320 ; HEIGHT 300 - IF(_HMG_IsXP .And. IsXPThemeActive(), 0, 7) ; TITLE 'Blink Color Label' ; MAIN ; NOMAXIMIZE @ 50, 50 LABEL MyLabel VALUE "Hello !" WIDTH 180 HEIGHT 32 ; FONT "Courier New" Size 24 @ 100, 30 LABEL Label_1 VALUE 'Blink Label !' WIDTH 260 HEIGHT 32 Blink ; FONT "Courier New" Size 24 DEFINE TIMER MyWndTimer INTERVAL 2000 ACTION MyWndTimer() END WINDOW CENTER WINDOW MyWnd ACTIVATE WINDOW MyWnd Return nil Function MyWndTimer() Local cTx,aFc Static lRu := .T., aFo, aBo IF aFo == NIL aFo := GetProperty("MyWnd", "MyLabel", "FontColor") aBo := GetProperty("MyWnd", "MyLabel", "BackColor") ENDIF IF lRu cTx := "Привет !" aFc := aFo ELSE cTx := "Hello !" aFc := {255, 0, 0} aBc := {255, 0, 0} ENDIF lRu := ! lRu SetProperty("MyWnd", "MyLabel", cTx) SetProperty("MyWnd", "MyLabel", "FontColor", aFc) //SetProperty("MyWnd", "MyLabel", "BackColor", aBc) Return nil
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 73
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.01.13 17:41. Заголовок: Andrey пишет:Что-то ..
Andrey пишет: Так INTERVAL 2000 - это две секунды (1000 * 2), надо задать как надо. Можно сделать: aColor : {{255,0,0}, {...}, ...} // цифры цвета взять с MS Paint режим Edit colors, поля {Red,Green,Blue} Добавить: Static nPos := 0 nPos += 1 IF nPos > len(aColor); nPos := 1 ENDIF aFc := aColor [ nPos ] ... Можно текст не менять, а менять цвет букв, бегая по циклу текста и массиву цветов, можно переставлять Label: SetProperty(cWndName, cControlName, "Row", 70) // MyWnd.MyLabel.Row := 100 SetProperty(cWndName, cControlName, "Col", 10) // MyWnd.MyLabelCol := 10 или придумать что то еще.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2553
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.01.13 19:25. Заголовок: SergKis пишет: цифр..
SergKis пишет: цитата: | цифры цвета взять с MS Paint режим Edit colors, поля {Red,Green,Blue} |
| Я по вашим ранним рекомендациям поступил, взял цвета с i_color.ch Вот готовый результат : Скрытый текст #include "minigui.ch" Static nPos := 0 Function MAIN() DEFINE WINDOW MyWnd AT 0,0 ; WIDTH 320 ; HEIGHT 300 - IF(_HMG_IsXP .And. IsXPThemeActive(), 0, 7) ; TITLE 'Blink Color Label' ; MAIN ; NOMAXIMIZE @ 50, 40 LABEL MyLabel VALUE "Color Label !" WIDTH 180 HEIGHT 32 ; FONT "Tahona" BOLD Size 22 @ 100, 40 LABEL Label_1 VALUE 'Blink Label !' WIDTH 260 HEIGHT 32 Blink ; FONT "Tahona" BOLD Size 22 DEFINE TIMER MyWndTimer INTERVAL 500 ACTION MyWndTimer() END WINDOW CENTER WINDOW MyWnd ACTIVATE WINDOW MyWnd Return nil Function MyWndTimer() Local aColor // colors look i_color.ch aColor := {YELLOW,PINK,RED,FUCHSIA,BROWN,ORANGE,GREEN,PURPLE,BLACK,WHITE,GRAY,BLUE,SILVER,MAROON,OLIVE,LGREEN,AQUA,NAVY,TEAL} nPos += 1 IF nPos > len(aColor) nPos := 1 ENDIF SetProperty("MyWnd", "MyLabel", "FontColor", aColor[ nPos ]) Return nil
| Спасибо БОЛЬШОЕ за подсказку !!!
| |
|
SergKis
|
| постоянный участник
|
Пост N: 74
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.01.13 20:17. Заголовок: Andrey пишет:взял цв..
Andrey пишет: ОТЛИЧНО !!! А цвета взять с MS Paint - это дополнение к i_color.ch (если нужны разнообразные оттенки). Используя TIMER, надо приостанавливать его выполнение в вызовах своих функций для блокирования повторного выполнения TIMER (это особенно важно при дисковых операциях). Пример: Function MyWndTimer() SetProperty("MyWnd", "MyWndTimer", "Enabled", .F.) ... SetProperty("MyWnd", "MyWndTimer", "Enabled", .T.) Return
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2554
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.01.13 20:20. Заголовок: SergKis пишет: Испо..
SergKis пишет: цитата: | Используя TIMER, надо приостанавливать его выполнение в вызовах своих функций для блокирования повторного выполнения TIMER (это особенно важно при дисковых операциях) |
| Спасибо большое ! Я бы не додумался ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2555
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.01.13 20:26. Заголовок: А как реализовать во..
А как реализовать вот такую трехцветную форму ? Это еще при том что на ней будут кнопки, списки, лабел и т.д. Нашел вот только это: SAMPLES\BASIC\WindowBackground DEFINE BKGBRUSH <brush> SOLID IN [ WINDOW ] <form> - similar to window Backcolor property DEFINE BKGBRUSH <brush> HATCHED IN [ WINDOW ] <form> DEFINE BKGBRUSH <brush> PATTERN IN [ WINDOW ] <form> Я так понимаю, нужно залить одним цветом, а потов в OnInit() докрасить ? Типа: LOCAL aColor1 := {251, 250, 174} ; aYX1 := {0,0,210,Координата-Ширины-Окна-как-Узнать?} LOCAL aColor2 := {255, 0, 255} LOCAL aColor3 := {178, 227, 137} ; aYX3 := {300,0,Координата-Высоты-Окна-как-Узнать?,Координата-Ширины-Окна-как-Узнать?} DEFINE WINDOW Form_7 ; ...... ; BACKCOLOR aColor2 ; ..... ; ON INIT MyFormCOLOR(aColor1,aYX1, aColor3, aYX2) .................... FUNCTION MyFormCOLOR(aColor1,aYX1, aColor3, aYX2) // Координата-Высоты-Окна-как-Узнать? - Форма же не инициализирована, т.е. её еще нет !!! // Координата-Ширины-Окна-как-Узнать?}
| |
|
SergKis
|
| постоянный участник
|
Пост N: 75
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.01.13 13:11. Заголовок: Andrey пишет:А как р..
Andrey пишет: цитата: | А как реализовать вот такую трехцветную форму |
| Как-то так: #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; MAIN hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h END WINDOW ACTIVATE WINDOW &cWnd Return /* C функции, если их нет HB_FUNC( GETCLIENTWIDTH ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.right - rect.left ); } HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } */
| |
|
SergKis
|
| постоянный участник
|
Пост N: 76
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.01.13 16:01. Заголовок: Andrey пишет:Я бы не..
Andrey пишет: В MiniGUI.chm есть раздел Timer (Controls Command) и в конце описания (и так практически везде) есть: PROPERTIES (свойства): // GetProperty(...) или SetProperty(...) используем ... EVENTS (события): // вызываются сами в определенных местах ... METHODS (методы): // DoMethod(...) используем ... Здесь смотрим, что есть в компонентах и пляшем отсюда ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2556
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.01.13 16:18. Заголовок: SergKis пишет: /* C..
Спасибо БОЛЬШОЕ ! Программа заработала.. А как бы сделать динамически эту заливку ? А то когда форму раздвигаешь, то белый цвет появляется ....
| |
|
SergKis
|
| постоянный участник
|
Пост N: 77
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.01.13 17:52. Заголовок: Andrey пишет:когда ф..
Andrey пишет: цитата: | когда форму раздвигаешь ... |
| Вопрос Resize довольно сложный ... Мы решаем в основном за счет изменения размеров Browse, оставляя остальные части неизменными или как в данном примере - за счет нижней части: #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) Return
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2557
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.01.13 18:05. Заголовок: SergKis пишет: Вопр..
SergKis пишет: цитата: | Вопрос Resize довольно сложный ... |
| Спасибо БОЛЬШОЕ ! То что надо !!! Очень многое Вы мне прояснили.... Очень жалко что нет таких примеров в поставке Минигуи !
| |
|
SergKis
|
| постоянный участник
|
Пост N: 78
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.01.13 18:15. Заголовок: Andrey пишет:Очень м..
Andrey пишет: цитата: | Очень многое Вы мне прояснили.... |
| Рад был помочь. Сами недавно сталкивались с такими вопросами. Помогла работа на VO. Andrey пишет: цитата: | Очень жалко что нет таких примеров в поставке Минигуи ! |
| Оформите и отдайте Григорию, если он сочтет полезным - включит.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 440
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.01.13 18:37. Заголовок: Andrey пишет: Очень..
Andrey пишет: цитата: | Очень жалко что нет таких примеров в поставке Минигуи |
| Ну, почему же нет ? Подобный пример использования события ON RESIZE есть в папке samples\Basic\GetClientSize
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2558
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.01.13 18:56. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Подобный пример использования события ON RESIZE есть в папке samples\Basic\GetClientSize |
| Ой, не нашел... Спасибо Григорий !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2559
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.01.13 19:41. Заголовок: Видоизменил 1-ый при..
Видоизменил 1-ый пример (без RESIZE), положил на форму 3 кнопки. Не работают эти новые кнопки !!! Что не так делаю ? Скрытый текст #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; NOMAXIMIZE NOSIZE ; MAIN hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h BACKCOLOR aLblC1 @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h BACKCOLOR aLblC2 @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h BACKCOLOR aLblC3 @ 20 , 160 BUTTON Button_1 CAPTION 'BORDER ON' ; ACTION { || SetProperty(cWnd, cLblN3, "BORDER" , .T.), SetProperty(cWnd, "Label_2", "Value" , "ON" ) } @ 60 , 160 BUTTON Button_2 CAPTION 'BORDER OFF' ; ACTION { || SetProperty(cWnd, cLblN3, "BORDER" , .F.), SetProperty(cWnd, "Label_2", "Value" , "OFF" ) } @ nCliH - 60 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release @ 40,300 LABEL Label_1 ; VALUE 'BORDER:'AUTOSIZE BACKCOLOR aLblC1 @ 40,410 LABEL Label_2 ; VALUE '' BACKCOLOR aLblC1 END WINDOW ACTIVATE WINDOW &cWnd Return #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" // C функции, если их нет HB_FUNC( GETCLIENTWIDTH ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.right - rect.left ); } HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 79
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.01.13 21:21. Заголовок: Andrey пишет:Не рабо..
Andrey пишет: цитата: | Не работают эти новые кнопки !!! |
| Работает пример: #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn1_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "LINE"), ; SetProperty(cWnd, "Label_2", "Value", "ON" ) ) @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn2_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "BORDER"), ; SetProperty(cWnd, "Label_2", "Value", "OFF" ) ) @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn3_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( MsgInfo("Press button "+j) ) @ 40, 110 LABEL Label_1 VALUE 'BORDER:' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 @ 70, 110 LABEL Label_2 VALUE 'OFF' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) Return Andrey пишет: цитата: | ACTION { || SetProperty(cWnd, cLblN3, "BORDER" , .T.), SetProperty(cWnd, "Label_2", "Value" , "ON" ) } |
| Что такое SetProperty(cWnd, cLblN3, "BORDER" , .T.) ? Мы AUTOSIZE не используем в нашей версии он глючит при отображении ...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 80
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.01.13 21:27. Заголовок: Andrey пишет:Не нрав..
Andrey пишет: цитата: | Не нравиться порядок написания программ в МиниГуи... уж очень растянуто получается... Подскажите можно ли как то уменьшить или изменить это ? |
| Можно пойти по такому пути: Скрытый текст
В реальной программе, я думаю, имена переменных контролов НЕ НАДО писать cWnd+'_Frame_Text2' и т.д. Можно писать смысловое название переменной без названия окна, сгруппировав по темам. Расмотрим поля базы клиентов: Текст для Label : FieldName : Label переменная : GetBox переменная ------------------------------------------------------------------- Код организации INN Klient_Lbl_INN Klient_Get_INN Наименование NAME Klient_Lbl_NAME Klient_Get_NAME ... Можно написать функции на эти контролы: Function Klient_Lbl_INN( y, x, Value, ... ) Local w := 100, h := 24, cElm, cWnd, nW, nH Default Value To "Код организации" cWnd := _HMG_ThisFormName cElm := 'Klient_Lbl_INN' @ y, x LABEL &cElm VALUE Value WIDTH w HEIGHT h nW := GetProperty(cWnd, cElm, "Width") nH := GetProperty(cWnd, cElm, "Height") Return { nW, nH } Function Klient_Get_INN( y, x, cFld, ... ) Local w := 100, h := 24, cElm, cWnd, nW, nH cWnd := _HMG_ThisFormName cElm := 'Klient_Get_INN' cFld := 'KLI->INN' @ y, x GETBOX &cElm HEIGHT h WIDTH w ; FIELD cFld ; VALID ( ... ) ; VALIDMESSAGE "Error INN" ; ... nW := GetProperty(cWnd, cElm, "Width") nH := GetProperty(cWnd, cElm, "Height") Return { nW, nH } и т.д. Тогда на разных окнах можно использовать эти функции. Окна: - Справочник cWnd := Klient_Spr - Документы: cWnd := Dokum_Prixod, cWnd := Dokum_Raxod ... Пример: Local nGapsW := 10 // промежуток между контролами Widtn Local nGapsH := 10 // промежуток между контролами Height ... @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) y := _HMG_aControlRow [ i ] + nGapsW x := _HMG_aControlCol [ i ] + nGapsW j := Klient_Lbl_INN( y, x ); x += j[1] + nGapsW j := Klient_Get_INN( y, x ) y += j[2] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW j := Klient_Lbl_Name( y, x ); x += j[1] + nGapsW j := Klient_Get_Name( y, x ) y += j[2] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW ...
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2560
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.01.13 05:43. Заголовок: SergKis пишет: Что ..
SergKis пишет: цитата: | Что такое SetProperty(cWnd, cLblN3, "BORDER" , .T.) ? |
| Да я хотел на кнопку повесить включение/отключение бордюра ..... BORDER CLIENTEDGE как в примере MiniGUI\SAMPLES\BASIC\BLINK Только по доку потом увидел что нет такого свойства у LABEL .... А жалко...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 81
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.01.13 11:42. Заголовок: Andrey пишет:А жалко..
Andrey пишет: Вы хотите типа такое: #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH,nGapsW,nGapsH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" nGapsW := 14 nGapsH := 14 DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) y := 0 x := int(nGapsH / 2) w := GetClientWidth (_HMG_aControlHandles [ i ]) - int(nGapsW / 2) h := GetClientHeight(_HMG_aControlHandles [ i ]) @ y, x FRAME &( cWnd + '_Frame_Frm1' ) CAPTION "" ; WIDTH w HEIGHT h ; OPAQUE j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn1_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "LINE"), ; SetProperty(cWnd, "Label_2", "Value", "ON" ) ) @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn2_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "BORDER"), ; SetProperty(cWnd, "Label_2", "Value", "OFF" ) ) @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn3_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, cWnd + '_Frame_Frm1', "Visible", ; ! GetProperty(cWnd, cWnd + '_Frame_Frm1', "Visible")) ) // ACTION ( MsgInfo("Press button "+j) ) @ 40, 110 LABEL Label_1 VALUE 'BORDER:' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 @ 70, 110 LABEL Label_2 VALUE 'OFF' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) Return Можно смотреть в сторону команд (i_graph.ch): DRAW LINE IN WINDOW ... DRAW RECTANGLE IN WINDOW ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2561
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.01.13 14:09. Заголовок: А как тогда сделать ..
А как тогда сделать перерисовку всего лабела ? Типа: IF nFlagBorder == 1 @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 ELSEIF nFlagBorder == 2 @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER ELSEIF nFlagBorder == 3 @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE ENDIF
| |
|
SergKis
|
| постоянный участник
|
Пост N: 82
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.01.13 16:01. Заголовок: Andrey пишет:А как т..
Andrey пишет: цитата: | А как тогда сделать перерисовку всего лабела ? |
| Пример: #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH,nGapsW,nGapsH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" nGapsW := 14 nGapsH := 14 DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; NOMINIMIZE ; NOMAXIMIZE ; NOSIZE // ON SIZE ReSize() ; // ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &( cLblN1 + "1") VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE SetProperty(cWnd, cLblN1 + "1", "Visible", .F.) @ nLblY1, nLblX1 LABEL &( cLblN1 + "0") VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 // BORDER CLIENTEDGE i := GetControlIndex(cLblN1 + "0", cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn1_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "LINE"), ; SetProperty(cWnd, "Label_2", "Value", "ON" ) ) @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn2_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, "Label_1", "Value", "BORDER"), ; SetProperty(cWnd, "Label_2", "Value", "OFF" ) ) @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + nGapsH x := _HMG_aControlCol [ i ] + nGapsW w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h x += 10 + GetProperty(cWnd, j, "Width") j := cWnd + '_Frame_Btn3_Ok' @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, cLblN1 + "0", "Visible", ! GetProperty(cWnd, cLblN1 + "0", "Visible")), ; SetProperty(cWnd, cLblN1 + '1', "Visible", ! GetProperty(cWnd, cLblN1 + "1", "Visible")), ; Lbl1Refr() ) @ 40, 110 LABEL Label_1 VALUE 'BORDER:' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 @ 70, 110 LABEL Label_2 VALUE 'OFF' ; WIDTH w HEIGHT h ; BACKCOLOR aLblC1 END WINDOW ACTIVATE WINDOW &cWnd Return Function Lbl1Refr() Local cWnd := _HMG_ThisFormName DoMethod(cWnd, cWnd + '_Frame_Text1', "Refresh") SetProperty(cWnd, cWnd + '_Frame_Btn1_Ok', "Enabled", .T.) Return
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2562
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.01.13 18:00. Заголовок: Нет, не перерисовыва..
Нет, не перерисовывается ! Кнопка закрыта и все ! Вот даже если взять предыдущий пример, кнопка Cancel - не работает ! А почему ? Скрытый текст #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; MINWIDTH 480 MINHEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nCliH - 40 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) // сдвиг кнопки Button_3 SetProperty(cWnd, "Button_3", "Row", nCliH - 40 ) SetProperty(cWnd, "Button_3", "Col" , nCliW - 120 ) Return #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" HB_FUNC( GETCLIENTWIDTH ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.right - rect.left ); } HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 83
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.01.13 22:40. Заголовок: Andrey пишет:не рабо..
Andrey пишет: Собрал примеры Сборка hb20, msvc, miniGui 2.07 сборка своя. В Label след.изменения: Function OLABELEVENTS( hWnd, nMsg, wParam, lParam ) *-----------------------------------------------------------------------------* Local i := ascan ( _HMG_aControlHandles, hWnd ) HB_SYMBOL_UNUSED( wParam ) HB_SYMBOL_UNUSED( lParam ) if i > 0 If nMsg == WM_MOUSEMOVE _DoControlEventProcedure ( _HMG_aControlGotFocusProcedure , i ) ElseIf nMsg == WM_MOUSELEAVE _DoControlEventProcedure ( _HMG_aControlLostFocusProcedure , i ) ElseIf nMsg == WM_HMG_NOTIFY_LBL // BAA IF ValType( _HMG_aControlMiscData1 [4] )=='B' _DoControlEventProcedure( _HMG_aControlMiscData1[4], i ) ELSE MoveWindow( _HMG_aControlHandles, ; // hWnd _HMG_aControlCol, ; // X _HMG_aControlRow, ; // Y _HMG_aControlWidth, ; // W _HMG_aControlHeight, .T. ) // W SetWindowText( _HMG_aControlHandles, ; // hWnd _HMG_aControlCaption ) // Text ENDIF EndIf endif Return 0
| |
|
SergKis
|
| постоянный участник
|
Пост N: 84
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.01.13 23:00. Заголовок: В догонку. Еще измен..
В догонку. Еще изменен h_label.prg: Function _DefineLabel (...) ... _HMG_aControlMiscData1 [k] := ; { 0, ; blink, ; // 2. .T. - нужно моргать .T., ; // 3. .T./.F. - при моргании состояние Вкл./Выкл. NIL } // 4. Блок или NIL - выполнить перепоказ имея в виду что возможно изменились x,y,w,h текст // 4. Блок или NIL - выполнить ... в данных примерах не использовалось.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 85
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.01.13 08:43. Заголовок: И еще вдогонку: #def..
И еще вдогонку: #define WM_APP 0x8000 // Это WinAPI #define WM_HMG_NOTIFY (WM_APP+100) #define WM_HMG_NOTIFY_LBL (WM_HMG_NOTIFY+1) // Перепоказ для Label
| |
|
SergKis
|
| постоянный участник
|
Пост N: 86
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.01.13 09:23. Заголовок: Andrey пишет:не рабо..
Andrey пишет: Каюсь. Совсем забыл об изменениях, сделанных в своей сборке, но это было май-июнь прошлого года. Если Григорий почитает это полезным, то: // 4. Блок или NIL - выполнить перепоказ ... - это блок кода, вызываемый при изменении (например текста) в котором можно обновить данные других контролов, связанных с измененным Label. Например при смене кода карточки запустить перепоказ остальных данных по ней.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2563
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.01.13 12:37. Заголовок: SergKis пишет: Каюс..
SergKis пишет: цитата: | Каюсь. Совсем забыл об изменениях, сделанных в своей сборке, но это было май-июнь прошлого года. |
| А я уж думал совсем заработался... У вас работает , а у меня нет... Ну уж я не совсем криворукий... Так что же делать ? SergKis пишет: цитата: | Если Григорий почитает это полезным |
| Присоединяюсь ! Большая просьба внести это изменение !!!
| |
|
SergKis
|
| постоянный участник
|
Пост N: 87
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.01.13 13:54. Заголовок: Andrey в сборке прим..
Andrey в сборке примеров, как ведет себя demo.exe (demo.prg) - нормально работает или нет (рамка на первом Label меняется по нижней кнопке Ok) ? Если да, то у Вас тоже сборка должна работать ( нет ReSize() ). Попробуйте.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 88
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.01.13 14:04. Заголовок: SergKis пишет:это бл..
SergKis пишет: цитата: | это блок кода, вызываемый при изменении ... |
| Я поговорил со своим товарищем - это были мысль неправильная, по знаниям на май прошлого года, нигде не примененная. Короче, эту отсебятину надо игнорировать. А нормальный ON CHANGE не помешал бы.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 89
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.01.13 18:11. Заголовок: SergKis пишет:В Labe..
SergKis пишет: цитата: | В Label след.изменения: Function OLABELEVENTS(...) ... MoveWindow( _HMG_aControlHandles [ i ], ; // hWnd _HMG_aControlCol [ i ], ; // X _HMG_aControlRow [ i ], ; // Y _HMG_aControlWidth [ i ], ; // W _HMG_aControlHeight [ i ], .T. ) // W SetWindowText( _HMG_aControlHandles [ i ], ; // hWnd _HMG_aControlCaption [ i ] ) // Text |
| Сам в ночи запутался и других путаю. Сейчас спокойно посмотрел - эти изменения никакого отношения к resze не имеют. Это ускоренный вариант вместо SetProperty(cForm, cControl, "Value", "Text label") (длинная цепочка команд). На форме много Label, Browse с OnChage заменяет данные в Label-ах по стандартному SetProperty(...) очень медленно. На медленных PC еле ползает. Поэтому мы применяем такой ускоренный вариант в OnChange замены текста в Label: i := GetControlIndex(cLabelName, cFormName) _HMG_aControlCaption [ i ] := "New text label" h := PostMessage( _HMG_aControlHandles [ i ], WM_HMG_NOTIFY_LBL, 0, 0 ) и выполняется в OLABELEVENTS(...) ElseIf nMsg == WM_HMG_NOTIFY_LBL. Эти команды не на виду (лежат в libe) и поэтому куда-то меня вчера унесло. Извиняте товарищи ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2564
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.01.13 21:03. Заголовок: SergKis пишет: как ..
SergKis пишет: цитата: | как ведет себя demo.exe (demo.prg) - нормально работает или нет (рамка на первом Label меняется по нижней кнопке Ok) |
| Да, нормально работает ! Только собранная на стандартном MiniGUI Extended Edition 2.1.8 - 2012.12.12 НЕ РАБОТАЕТ ! А что делать с моим примером ? Почему не работает положенная на Label кнопка Cancel или Message ? Скрытый текст #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; MINWIDTH 480 MINHEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE @ 40 , 120 BUTTON Button_1 CAPTION 'Message' ; ACTION MsgInfo("ACTION - Message Button_1 !") i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nCliH - 40 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) // сдвиг кнопки Button_3 SetProperty(cWnd, "Button_3", "Row", nCliH - 40 ) SetProperty(cWnd, "Button_3", "Col" , nCliW - 120 ) Return #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" HB_FUNC( GETCLIENTWIDTH ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.right - rect.left ); } HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP
| Как сделать чтоб кнопки заработали в стандартном MiniGUI Extended Edition 2.1.8 - 2012.12.12 ???
| |
|
SergKis
|
| постоянный участник
|
Пост N: 90
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.01.13 23:53. Заголовок: Andrey пишет:А что д..
Andrey пишет: цитата: | А что делать с моим примером ? |
| В моей сборке это DemoA.exe (prg не положил в архив). Думаю он работает. Почему не работает demo.prg на сборке 2.1.8. не знаю. Одна панель Visible := .F. (с окантовкой), вторая Visible := .T. (без окантовки) по кнопке меняем Visible := ! Visible у обоих панелей. Возможно Visible не вызывает Refresh ? Попробуйте: @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, cLblN1 + "0", "Visible", ! GetProperty(cWnd, cLblN1 + "0", "Visible")), ; SetProperty(cWnd, cLblN1 + '1', "Visible", ! GetProperty(cWnd, cLblN1 + "1", "Visible")), ; DoMethod(cWnd, cLblN1 + iif(GetProperty(cWnd, cLblN1+"1", "Visible"), "1", "0"), "Refresh"), ; Lbl1Refr() )
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2565
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.01.13 09:12. Заголовок: SergKis пишет: В мо..
SergKis пишет: цитата: | В моей сборке это DemoA.exe (prg не положил в архив). Думаю он работает. |
| Да он у меня тоже работает. А можете PRG выложить ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 91
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.01.13 10:00. Заголовок: Andrey пишет:А может..
Andrey пишет: #include "minigui.ch" Function Main() Local i,j,y,x,w,h,t Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1,aLblC1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2,aLblC2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3,aLblC3 cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; MINWIDTH 480 MINHEIGHT 410 ; TITLE 'Test Label box' ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW nLblH1 := int(nCliH * 0.4) nLblY1 := 0 nLblX1 := 0 aLblC1 := {251, 250, 174} cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW nLblH2 := int(nCliH * 0.2) nLblY2 := nLblY1 + nLblH1 nLblX2 := nLblX1 aLblC2 := {255, 0, 255} cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - (nLblH1 + nLblH2) nLblY3 := nLblY2 + nLblH2 nLblX3 := nLblX1 aLblC3 := {178, 227, 137} @ nLblY1, nLblX1 LABEL &cLblN1 VALUE "" OF &cWnd ; WIDTH nLblW1 HEIGHT nLblH1 ; BACKCOLOR aLblC1 BORDER CLIENTEDGE i := GetControlIndex(cLblN1, cWnd) j := cWnd + '_Frame_Text1' t := "Hello Frame 1" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY2, nLblX2 LABEL &cLblN2 VALUE "" OF &cWnd ; WIDTH nLblW2 HEIGHT nLblH2 ; BACKCOLOR aLblC2 BORDER CLIENTEDGE i := GetControlIndex(cLblN2, cWnd) j := cWnd + '_Frame_Text2' t := "Hello Frame 2" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nLblY3, nLblX3 LABEL &cLblN3 VALUE "" OF &cWnd ; WIDTH nLblW3 HEIGHT nLblH3 ; BACKCOLOR aLblC3 BORDER CLIENTEDGE i := GetControlIndex(cLblN3, cWnd) j := cWnd + '_Frame_Text3' t := "Hello Frame 3" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( j ) VALUE t WIDTH w HEIGHT h @ nCliH - 40 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release END WINDOW ACTIVATE WINDOW &cWnd Return Function ReSize() Local cWnd,hWnd,nCliW,nCliH Local cLblN1,nLblW1,nLblH1,nLblY1,nLblX1 Local cLblN2,nLblW2,nLblH2,nLblY2,nLblX2 Local cLblN3,nLblW3,nLblH3,nLblY3,nLblX3 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) cLblN1 := cWnd + '_Frame_Lbl1' nLblW1 := nCliW cLblN2 := cWnd + '_Frame_Lbl2' nLblW2 := nCliW cLblN3 := cWnd + '_Frame_Lbl3' nLblW3 := nCliW nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + ; GetProperty(cWnd, cLblN2, "Height") ) SetProperty(cWnd, cLblN1, "Width" , nLblW1) SetProperty(cWnd, cLblN2, "Width" , nLblW2) SetProperty(cWnd, cLblN3, "Width" , nLblW3) SetProperty(cWnd, cLblN3, "Height", nLblH3) // сдвиг кнопки Button_3 SetProperty(cWnd, "Button_3", "Row", nCliH - 40 ) SetProperty(cWnd, "Button_3", "Col" , nCliW - 120 ) Return /* #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" HB_FUNC( GETCLIENTWIDTH ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.right - rect.left ); } HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP */ он взят из Вашего поста где-то выше. Andrey попробуйте у себя в demo.prg заменить текст кнопки третьей на текст: @ y, x BUTTON &( j ) CAPTION "OK" WIDTH w HEIGHT h ; ACTION ( SetProperty(cWnd, cLblN1 + "0", "Visible", ! GetProperty(cWnd, cLblN1 + "0", "Visible")), ; SetProperty(cWnd, cLblN1 + '1', "Visible", ! GetProperty(cWnd, cLblN1 + "1", "Visible")), ; DoMethod(cWnd, cLblN1 + iif(GetProperty(cWnd, cLblN1+"1", "Visible"), "1", "0"), "Refresh"), ; // new line Lbl1Refr() )
| |
|
SergKis
|
| постоянный участник
|
Пост N: 92
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.01.13 10:04. Заголовок: SergKis пишет:в demo..
SergKis пишет: цитата: | в demo.prg заменить текст |
| demo.prg из архива моей сборки.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2566
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.01.13 10:14. Заголовок: SergKis пишет: он в..
SergKis пишет: цитата: | он взят из Вашего поста где-то выше. |
| Да это я помню. Я его собрал заново на сборке 2.1.8. - НЕ РАБОТАЕТ !!! Т.е. вы внесли изменения в свою сборку и теперь в стандартных сборках кнопки положенные на LABEL не работают, а у вас работает. Правильно или нет ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 93
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.01.13 11:11. Заголовок: Andrey пишет:Правиль..
Andrey пишет: Я взял Ваш текст prg из поста, закоментировал hb_fun GetClient...() (они в lib у меня), собрал demoA.exe и все.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 94
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.01.13 12:14. Заголовок: Andrey попробуйте со..
| |
|
a_sidorov
|
| |
Пост N: 30
Зарегистрирован: 07.06.08
|
|
Отправлено: 18.01.13 13:18. Заголовок: Это известная пробле..
Это известная проблема - Мышка в minigui работает на объекте, который положил раньше, то есть нижнем. Попробуй сделать nLblY1 := 50 , чтобы половина кнопки была не на label, тогда мышка будет работать на половине кнопки (верхней)
| |
|
a_sidorov
|
| |
Пост N: 31
Зарегистрирован: 07.06.08
|
|
Отправлено: 18.01.13 13:49. Заголовок: Поставь самым первым..
Поставь самым первым объектом кнопку - тогда будет работать. То есть объект, на который должна срабатывать кнопка нужно класть на форму раньше. Мышка срабатывает не по видимости на экране, а по порядку выкладки на форму. Это неправильно, но это так.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2567
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.01.13 14:28. Заголовок: a_sidorov пишет: Мы..
a_sidorov пишет: цитата: | Мышка срабатывает не по видимости на экране, а по порядку выкладки на форму. Это неправильно, но это так. |
| Спасибо БОЛЬШОЕ !!!
| |
|
SergKis
|
| постоянный участник
|
Пост N: 95
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.01.13 14:54. Заголовок: Andrey попробуйте со..
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2568
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.01.13 15:31. Заголовок: Собрал. Вот он http:..
| |
|
SergKis
|
| постоянный участник
|
Пост N: 96
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.01.13 18:22. Заголовок: Andrey пишет:Собрал...
Andrey пишет: Спасибо, не мог понять, что не работает. Думаю это к Григорию надо обращаться. У нас ComboBox и GetBox (его мы правили) на таком Label работают.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2570
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.01.13 18:51. Заголовок: a_sidorov пишет: М..
a_sidorov пишет: цитата: | Мышка срабатывает не по видимости на экране, а по порядку выкладки на форму. Это неправильно, но это так. |
| SergKis пишет: цитата: | Думаю это к Григорию надо обращаться. |
| Григорий, подскажите что делать ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 441
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.01.13 19:33. Заголовок: Andrey пишет: Григо..
Andrey пишет: цитата: | Григорий, подскажите что делать ? |
| Хе-хе... Я так понимаю, что SergKis удалось решить эту проблему в своей сборке Так что ждем от него описание выполненных модификаций по поводу Andrey пишет: цитата: | в стандартных сборках кнопки положенные на LABEL не работают |
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 97
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.01.13 00:18. Заголовок: gfilatof2002 пишет:Х..
gfilatof2002 пишет: Я уже сам понял - надо у себя рыть и вспоминать, что меняли (воз и маленькую тележку) ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2573
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.01.13 01:41. Заголовок: Конечно если пользов..
Конечно если пользоваться MiniGUI\SAMPLES\Advanced\BosTaurus то там есть хорошие и понятные функции: BT_DrawLine (hDC, 0, 0, Height, Width, ORANGE, 5) BT_DrawEllipse (hDC, 140, 200, 400, 230, WHITE, 5) BT_DrawFillRectangle (hDC, 20, 250, 300, 100, ORANGE, RED, 3) BT_DrawFillRoundRect (hDC, 400, 250, 300, 100, 10, 10, ORANGE, RED, 3) и т.д. Но для простых примеров хочется использовать обычные функции МиниГуи....
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2574
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.01.13 02:43. Заголовок: Имею такой код: DEF..
Имею такой код: DEFINE WINDOW Form_7 ; AT 0,0 ; WIDTH 525 ; HEIGHT IF(IsXPThemeActive(), 562, 562-4); ...... Как дальше определить MAXHEIGHT и MAXWIDTH окна ? Вверху по примерам можно пользоваться для этого ВНЕШНИМИ функциями: hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) Но я где то по примерам встречал более простое написание... Типа такого: x := _HMG_MouseCol y := _HMG_MouseRow
| |
|
SergKis
|
| постоянный участник
|
Пост N: 98
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.01.13 11:55. Заголовок: Andrey пишет:Как дал..
Andrey пишет: цитата: | Как дальше определить MAXHEIGHT и MAXWIDTH |
| Как я понимаю - это размеры, меньше которых, окно не может быть. Т.е. из default размеров контролов считаете эти значения, а пользователь может менять размеры окна и могут меняться размеры контролов со всеми последствиями. Функции: GetClientWidth (hWnd), GetClientHeight(hWnd) дают внутренние (клиентская область) размеры окна, контрола - в зависимости от переданного handle. Функции: GetWindowWidth (hWnd), GetWindowHeight(hWnd) дают внешние размеры окна, контрола - в зависимости от переданного handle и при их использовании для попадания в клиентскую область надо производить вычисления, используя GetBorderWidth(), GetBorderHeight(), GetTitleHeight(), ... Используя GetWindowWidth (hWnd) для окна, получим Width клиентской области, для Label получим Width клиентской области контрола, ... и можно строить относительные координаты, для используемых контролов, в определенной плоскости и при необходимости изменения дизайна окна - достаточно переставлять плоскости, а не контролы.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 99
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.01.13 22:36. Заголовок: gfilatov2002 пишет:Т..
gfilatov2002 пишет: цитата: | Так что ждем от него описание выполненных модификаций ... |
| Вот они: HB_FUNC( INITLABEL ) { HWND hwnd; HWND hbutton; int Style = WS_CHILD; // | SS_NOTIFY убрали ... if( hb_parl(10) ) Style = Style | SS_NOTIFY; // добавили LabelOldWndProc = ( WNDPROC ) SetWindowLong( ( HWND ) hbutton, GWL_WNDPROC, ( LONG ) LabelSubClassFunc ); ... }
| |
|
gfilatov2002
|
| moderator
|
Пост N: 442
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.01.13 11:58. Заголовок: SergKis пишет: int ..
SergKis пишет: цитата: | int Style = WS_CHILD; // | SS_NOTIFY убрали |
| Благодарю за подсказку! Поправил для новой сборки, которая выйдет завтра
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2580
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.01.13 12:12. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Поправил для новой сборки, которая выйдет завтра |
| Ура ! Наконец то... А то уже вторую неделю бьюсь с этим... Вот экран задачи сразу после запуска: А вот экран после сброса на панель задач:
| |
|
SergKis
|
| постоянный участник
|
Пост N: 101
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.01.13 17:40. Заголовок: gfilatov2002 пишет:П..
gfilatov2002 пишет: цитата: | Поправил для новой сборки, которая выйдет завтра |
| Григорий, есть еще такое в GetBox: Function OGETEVENTS(...) ... CASE nMsg == WM_COMMAND // Вариант нажата одна из кнопок в oGet ... n := AScan ( aHandle, HwndBtn ) IF n==GBB1 ; _DoControlEventProcedure ( _HMG_aControlProcedures, i) ELSEIF n==GBB2 ; _DoControlEventProcedure ( _HMG_aControlDblClick, i) ENDIF SendMessage ( HwndBtn , BM_SETSTYLE , LOWORD ( BS_PUSHBUTTON ) , 1 ) SetFocus( aHandle[1] ) ... У нас это место так: n := AScan ( aHandle, HwndBtn ) SetFocus( aHandle[1] ) // фокус на GetBox (иначе в процедурах GetFocus() на нажатую кнопку) oGet:lSaveFocusEdit := .T. // new переменная для определения, что делать с фокусом после процедуры IF n==GBB1 ; _DoControlEventProcedure ( _HMG_aControlProcedures, i) ELSEIF n==GBB2 ; _DoControlEventProcedure ( _HMG_aControlDblClick, i) ENDIF SendMessage ( HwndBtn , BM_SETSTYLE , LOWORD ( BS_PUSHBUTTON ) , 1 ) IF oGet:lSaveFocusEdit ; SetFocus( aHandle[1] ) // если в процедуре окно ChildMdi, то SetFocus( aHandle[1] ) делать не надо, т.е. ENDIF // в процедуре ChildMdi делаем: oGet:lSaveFocusEdit := .F.
| |
|
gustow
|
| постоянный участник
|
Пост N: 346
Зарегистрирован: 06.02.07
|
|
Отправлено: 23.01.13 10:46. Заголовок: SergKis, хммм... опя..
SergKis, хммм... опять употребилось где-то "[ i ]", написанное БЕЗ пробелов (похоже, в конце IF после первого CASE). Извиняйте за "граммарнацизм" ;) просто иногда трудновато понять, "что сказать-то этим хотел?.." :)
| |
|
SergKis
|
| постоянный участник
|
Пост N: 102
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.01.13 12:38. Заголовок: gustow пишет:иногда ..
gustow пишет: Согласен, недосмотрел, брал с исходника как есть, а там цитата: | "[ i ]", написанное БЕЗ пробелов |
| и это строчки: IF n==GBB1 ; _DoControlEventProcedure ( _HMG_aControlProcedures [ i ], i) ELSEIF n==GBB2 ; _DoControlEventProcedure ( _HMG_aControlDblClick [ i ], i) ENDIF но дело не в них (текст в версиях 2.1.8, 2.1.9 несколько другой, смысл такой же) см. h_getbox.prg. Сказать этим хотел: 1.если в GetBox назначены Action [ и Action2], а так же кл. (например) F5 как Action, то происходит: - нажатие кнопок Action [ или Action2] в процедуре получим ( i := ascan(_HMG_aContolHandles, getfocus()) ) == 0, т.к. действительно фокус находится на нажатой кнопке (дополнение к GetBox), но работаем мы с GetBox - логичнее иметь и фокус на нем, криминала нет по _HMG_ThisFormName, _HMG_ThisControlName получим индекс ... - нажатие кнопки F5 (фокус на том же GetBox) - получим _HMG_ThisFormName, _HMG_ThisControlName и т.д. на HOTKEY, достаем контрол, с которым работаем ( i := ascan(_HMG_aContolHandles, getfocus()) ) > 0 т.е. из-за мелочи имеем два алгоритма обработки. 2.установка фокуса на GetBox после процедур, должна быть управляемая, а не безусловная: oGet:lSaveFocusEdit := .T. // new переменная для определения, что делать с фокусом после процедуры ...... IF oGet:lSaveFocusEdit ; SetFocus( aHandle[1] ) // если в процедуре окно ChildMdi, то SetFocus( aHandle[1] ) делать не надо, т.е. ENDIF // в процедуре ChildMdi делаем: oGet:lSaveFocusEdit := .F. т.е. если в процедуре окно MDICHILD (вызов и работа со справочником на документах), после активации Child окна (фокус устанавливаем на какой-то контрол этого окна) процедура заканчивается (activate window в Mdi MAIN) и срабатывает SetFocus( aHandle[1] ), устанавливая фокус на GetBox, убирая с окна MDICHILD, т.е. получаем проблему. Мы ее решили так, как я изложил. Будет ли решаться в базовой MiniGUI - дело Григория.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 103
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.01.13 18:51. Заголовок: Andrey пишет:Да я хо..
Andrey пишет: цитата: | Да я хотел на кнопку повесить включение/отключение бордюра ..... BORDER CLIENTEDGE как в примере MiniGUI\SAMPLES\BASIC\BLINK Только по доку потом увидел что нет такого свойства у LABEL .... А жалко... |
| Свойства есть, надо использовать: - менять стиль SetWindowStyle(h, WS_BORDER, .T./.F.) - .T. устанавливать, .F. снимать - менять Ext стиль ChangeStyle(h, WS_EX_CLIENTEDGE, 0, .T.) - устанавливать или ChangeStyle(h, 0, WS_EX_CLIENTEDGE, .T.) - снимать У меня получалось менять или Ext стиль или стиль ( одновременно менять - срабатывал только стиль ). Примеры: Скрытый текст
Пример 1: ... @ y, x BUTTON ... ACTION ( MyBorder(cWnd, cLbl) ) ... Function MyBorder( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lB := ! IsWindowStyle(h, WS_BORDER) SetWindowStyle(h, WS_BORDER, lB) DoMethod(cWnd, cLbl, "Refresh") Return Пример 2: STATIC lEdge := .T. ... @ y, x BUTTON ... ACTION ( MyEdge(cWnd, cLbl) ) ... Function MyEdge( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lEdge := ! lEdge If lEdge ChangeStyle(h, WS_EX_CLIENTEDGE, 0, .T.) Else ChangeStyle(h, 0, WS_EX_CLIENTEDGE, .T.) EndIf DoMethod(cWnd, cLbl, "Refresh") Return
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2589
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.01.13 21:59. Заголовок: SergKis пишет: Свой..
SergKis пишет: цитата: | Свойства есть, надо использовать: |
| Супер ! Спасибо БОЛЬШОЕ !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2590
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.13 13:42. Заголовок: SergKis опять у меня..
SergKis опять у меня проблема с инициализацией до создания окна... Я сделал пример (еще не отладил), подправьте его пожалуйста. Скрытый текст #include "minigui.ch" #define PROGRAM '3-color form and resize the window' #define VERSION ' version 1.0' STATIC lEdge := .T. Function Main() Local aColors1 := {178, 227, 137}, aColors2 := {255, 0, 255}, aColors3 := {251, 250, 174} LOCAL aLabel1, aLabel2, aLabel3, nH1 Local cWnd,hWnd,nCliW,nCliH cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; MINWIDTH 480 MINHEIGHT 410 ; TITLE PROGRAM ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() ; ON INIT ReSize() hWnd := GetFormHandle(cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 aLabel1 := { 0,0,nCliW,nH1 , "LabelColor_1", cWnd+"_Frame_Text1" } aLabel2 := { nH1,0,nCliW,nH1*2 , "LabelColor_2", cWnd+"_Frame_Text2" } aLabel3 := { nH1*2,0,nCliW,nCliH, "LabelColor_3", cWnd+"_Frame_Text3" } MySayColorLabel(aLabel1,aColors1) MySayColorLabel(aLabel2,aColors2) MySayColorLabel(aLabel3,aColors3) @ 40 , nCliW - 120 BUTTON Button_1 CAPTION 'Message_1' ; ACTION MsgInfo("ACTION - Message Button_1 !") @ 180 , nCliW - 120 BUTTON Button_2 CAPTION 'Message_2' ; ACTION MsgInfo("ACTION - Message Button_2 !") @ nCliH - 40 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release // ьхэ Є№ ёЄшы№/change style @ 20, 70 BUTTON Button_Style CAPTION 'Label Style' ; ACTION {|| MyBorder(cWnd, aLabel1[5]), MyBorder(cWnd, aLabel2[5]), MyBorder(cWnd, aLabel3[5]) } @ 40, 70 BUTTON Button_Edge CAPTION 'Label Edge' ; ACTION {|| MyEdge(cWnd, aLabel1[5]), MyEdge(cWnd, aLabel2[5]), MyEdge(cWnd, aLabel3[5]) } END WINDOW ACTIVATE WINDOW &cWnd Return Function MySayColorLabel(cWnd,aLabel,aColor) LOCAL cLabelName := aLabel[5] LOCAL cLabelTitle := aLabel[6] LOCAL i,j,y,x,w,h,t @ aLabel[1], aLabel[2] LABEL &cLabelName VALUE "" OF &cWnd ; WIDTH aLabel[3] HEIGHT aLabel[4] ; BACKCOLOR aColor BORDER CLIENTEDGE i := GetControlIndex(cLabelName, cWnd) j := cWnd + cLabelTitle t := "Hello - " + cLabelName + " { "+STR(aColor[1],3)+"," t := t + STR(aColor[2],3)+","+STR(aColor[3],3)+" }" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &( cLabelTitle ) VALUE t WIDTH w HEIGHT h BACKCOLOR aColor RETURN NIL Function ReSize() Local cWnd,hWnd,nCliW,nCliH LOCAL aLabel1, aLabel2, aLabel3, nH1 cWnd := _HMG_ThisFormName hWnd := _HMG_aFormHandles [ _HMG_ThisFormIndex ] nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 aLabel1 := { 0,0,nCliW,nH1 , "LabelColor_1", cWnd+"_Frame_Text1" } aLabel2 := { nH1,0,nCliW,nH1*2 , "LabelColor_2", cWnd+"_Frame_Text2" } aLabel3 := { nH1*2,0,nCliW,nCliH, "LabelColor_3", cWnd+"_Frame_Text3" } // change the position of the Label-Color SetProperty(cWnd, aLabel1[5], "Width" , aLabel1[3]) SetProperty(cWnd, aLabel1[5], "Height", aLabel1[4]) SetProperty(cWnd, aLabel2[5], "Width" , aLabel2[3]) SetProperty(cWnd, aLabel2[5], "Height", aLabel2[4]) SetProperty(cWnd, aLabel3[5], "Width" , aLabel3[3]) SetProperty(cWnd, aLabel3[5], "Height", aLabel3[4]) // change the position of the buttons SetProperty(cWnd, "Button_1", "Row" , 40 ) SetProperty(cWnd, "Button_1", "Col" , nCliW - 120 ) SetProperty(cWnd, "Button_2", "Row" , 180 ) SetProperty(cWnd, "Button_2", "Col" , nCliW - 120 ) SetProperty(cWnd, "Button_3", "Row" , nCliH - 40 ) SetProperty(cWnd, "Button_3", "Col" , nCliW - 120 ) SETFOCUS Button_3 OF &cWnd Return Function MyBorder( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lB := ! IsWindowStyle(h, WS_BORDER) SetWindowStyle(h, WS_BORDER, lB) DoMethod(cWnd, cLbl, "Refresh") Return Nil Function MyEdge( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lEdge := ! lEdge If lEdge ChangeStyle(h, WS_EX_CLIENTEDGE, 0, .T.) Else ChangeStyle(h, 0, WS_EX_CLIENTEDGE, .T.) EndIf DoMethod(cWnd, cLbl, "Refresh") Return Nil #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" HB_FUNC( GETCLIENTWIDTH ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.right - rect.left ); } HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP
| И хотелось бы избавиться от двойного дублирования массивов: nH1 := nCliH/3 aLabel1 := { 0,0,nCliW,nH1 , "LabelColor_1", cWnd+"_Frame_Text1" } aLabel2 := { nH1,0,nCliW,nH1*2 , "LabelColor_2", cWnd+"_Frame_Text2" } aLabel3 := { nH1*2,0,nCliW,nCliH, "LabelColor_3", cWnd+"_Frame_Text3" } в функциях Main() и ReSize(), если это возможно....
| |
|
SergKis
|
| постоянный участник
|
Пост N: 104
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.01.13 21:14. Заголовок: Andrey пишет:опять у..
Andrey пишет: цитата: | опять у меня проблема с инициализацией до создания окна... |
| Ошибочное утверждение. Всего навсего : MySayColorLabel(aLabel1,aColors1) вызов, а Function MySayColorLabel(cWnd,aLabel,aColor) - параметров 3 однако. цитата: | И хотелось бы избавиться от двойного дублирования массивов: |
| Делаем как и раньше в Clipper STATIC переменные. Скрытый текст #include "minigui.ch" #include "i_winuser.ch" #define PROGRAM '3-color form and resize the window' #define VERSION ' version 1.0' #define _Y 1 #define _X 2 #define _W 3 #define _H 4 #define _N 5 #define _T 6 STATIC lEdge := .T. STATIC aLbl STATIC aClr Function Main() Local hWnd,nCliW,nCliH,nH1, cWnd := "MyWnd" DEFINE WINDOW &cWnd ; AT 40, 50 ; WIDTH 480 ; HEIGHT 410 ; MINWIDTH 480 MINHEIGHT 410 ; TITLE PROGRAM ; MAIN ; ON SIZE ReSize() ; ON MAXIMIZE ReSize() ; ON INIT ReSize() Test_This(cWnd) aLblClrInit() aEval(aLbl, {|a,n| MySayColorLabel( n, n ) }) hWnd := GetFormHandle (cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) @ 40 , nCliW - 120 BUTTON Button_1 CAPTION 'Message_1' ; ACTION MsgInfo("ACTION - Message Button_1 !") @ 180 , nCliW - 120 BUTTON Button_2 CAPTION 'Message_2' ; ACTION MsgInfo("ACTION - Message Button_2 !") @ nCliH - 40 , nCliW - 120 BUTTON Button_3 CAPTION 'Cancel' ; ACTION ThisWindow.Release // мен ть стиль/change style @ 20, 70 BUTTON Button_Style CAPTION 'Label Style' ; ACTION ( MyBorder(cWnd, aLbl[1][ _N ]), ; MyBorder(cWnd, aLbl[2][ _N ]), ; MyBorder(cWnd, aLbl[3][ _N ]) ) @ 40, 70 BUTTON Button_Edge CAPTION 'Label Edge' ; ACTION ( MyEdge(cWnd, aLbl[1][ _N ]), ; MyEdge(cWnd, aLbl[2][ _N ]), ; MyEdge(cWnd, aLbl[3][ _N ]) ) END WINDOW ACTIVATE WINDOW &cWnd Return Static Function aLblClrInit() Local cWnd,hWnd,nCliW,nCliH,nH1 cWnd := _HMG_ThisFormName hWnd := GetFormHandle (cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 If aLbl == NIL aLbl := {} aAdd( aLbl, { 0 , 0, nCliW, nH1 , "LabelColor_1", cWnd+"_Frame_Text1" } ) aAdd( aLbl, { nH1 , 0, nCliW, nH1*2, "LabelColor_2", cWnd+"_Frame_Text2" } ) aAdd( aLbl, { nH1*2, 0, nCliW, nCliH, "LabelColor_3", cWnd+"_Frame_Text3" } ) Else aLbl[ 1] [ _W ] := nCliW; aLbl[ 1] [ _H ] := nH1 aLbl[ 2] [ _W ] := nCliW; aLbl[ 2] [ _H ] := nH1 * 2 aLbl[ 3] [ _W ] := nCliW; aLbl[ 3] [ _H ] := nCliH Endif If aClr == NIL aClr := {} aAdd( aClr, {178, 227, 137} ) aAdd( aClr, {255, 0, 255} ) aAdd( aClr, {251, 250, 174} ) Endif Return Function Test_This( cWnd ) If empty(_HMG_ThisFormName) _HMG_ThisFormName := cWnd _HMG_ThisFormIndex := GetFormIndex(cWnd) ElseIf _HMG_ThisFormName != cWnd _HMG_ThisFormName := cWnd _HMG_ThisFormIndex := GetFormIndex(cWnd) Endif Return Function MySayColorLabel( nLabel, nColor ) LOCAL cLabelName, cLabelTitle, aColor LOCAL cWnd,i,j,y,x,w,h,t Default nColor To nLabel cWnd := _HMG_ThisFormName aColor := aClr[ nColor ] cLabelName := aLbl[ nLabel ][ _N ] cLabelTitle := aLbl[ nLabel ][ _T ] @ aLbl[ nLabel ][ _Y ], aLbl[ nLabel ][ _X ] LABEL &cLabelName VALUE "" OF &cWnd ; WIDTH aLbl[ nLabel ][ _W ] HEIGHT aLbl[ nLabel ][ _H ] ; BACKCOLOR aColor BORDER CLIENTEDGE i := GetControlIndex(cLabelName, cWnd) j := cWnd + cLabelTitle t := "Hello - " + cLabelName + " { "+STR(aColor[ 1 ], 3)+"," t += STR(aColor[ 2 ], 3) + "," + STR(aColor[ 3 ], 3)+" }" y := _HMG_aControlRow [ i ] + 10 x := _HMG_aControlCol [ i ] + 10 w := 100 h := 24 @ y, x LABEL &cLabelTitle VALUE t WIDTH w HEIGHT h BACKCOLOR aColor RETURN NIL Function ReSize() Local i,j,k Local cWnd,hWnd,nCliW,nCliH ,nH1 cWnd := _HMG_ThisFormName hWnd := GetFormHandle (cWnd) nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 aLblClrInit() // change the position of the Label-Color k := len(aLbl) For i := 1 To k SetProperty(cWnd, aLbl[ i ][ _N ], "Width" , aLbl[ i ][ _W ]) SetProperty(cWnd, aLbl[ i ][ _N ], "Height", aLbl[ i ][ _H ]) Next // change the position of the buttons SetProperty(cWnd, "Button_1", "Row" , 40 ) SetProperty(cWnd, "Button_1", "Col" , nCliW - 120 ) SetProperty(cWnd, "Button_2", "Row" , 180 ) SetProperty(cWnd, "Button_2", "Col" , nCliW - 120 ) SetProperty(cWnd, "Button_3", "Row" , nCliH - 40 ) SetProperty(cWnd, "Button_3", "Col" , nCliW - 120 ) SETFOCUS Button_3 OF &cWnd Return Function MyBorder( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lB := ! IsWindowStyle(h, WS_BORDER) SetWindowStyle(h, WS_BORDER, lB) DoMethod(cWnd, cLbl, "Refresh") Return Nil Function MyEdge( cWnd, cLbl ) Local lB,h := GetControlHandle(cLbl, cWnd) lEdge := ! lEdge If lEdge ChangeStyle(h, WS_EX_CLIENTEDGE, 0, .T.) Else ChangeStyle(h, 0, WS_EX_CLIENTEDGE, .T.) EndIf DoMethod(cWnd, cLbl, "Refresh") Return Nil #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" HB_FUNC( GETCLIENTWIDTH ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.right - rect.left ); } HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; GetClientRect( ( HWND ) hb_parnl(1), &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2592
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.01.13 12:40. Заголовок: SergKis пишет: Ошиб..
SergKis пишет: цитата: | Ошибочное утверждение. Всего навсего : MySayColorLabel(aLabel1,aColors1) вызов, а Function MySayColorLabel(cWnd,aLabel,aColor) - параметров 3 однако. |
| Спасибо, БОЛЬШОЕ ! Как обычно, простые , заработался однако... С примером понятно. А почему форма не делится на 3-цвета одинаково ? Я же задаю: nCliW := GetClientWidth (hWnd) nCliH := GetClientHeight(hWnd) nH1 := nCliH/3 If aLbl == NIL ......................... Else aLbl[ 1] [ _W ] := nCliW; aLbl[ 1] [ _H ] := nH1 aLbl[ 2] [ _W ] := nCliW; aLbl[ 2] [ _H ] := nH1 * 2 aLbl[ 3] [ _W ] := nCliW; aLbl[ 3] [ _H ] := nCliH Endif
| |
|
SergKis
|
| постоянный участник
|
Пост N: 105
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.01.13 13:52. Заголовок: Andrey пишет:А почем..
Andrey пишет: цитата: | А почему форма не делится на 3-цвета одинаково ? |
| Делая: aLbl[ 1] [ _H ] := nH1; aLbl[ 1] [ _H ] := nH1*2; aLbl[ 1] [ _H ] := nCliH мы должны задать высоту конкретного Label, а здесь ... ? В DemoA.prg было: nLblH3 := nCliH - ( GetProperty(cWnd, cLblN1, "Height") + GetProperty(cWnd, cLblN2, "Height") ) . Здесь надо как то так: nH1 := int(nCliH/3) nH2 := nH1 nH3 := nCliH - ( nH1 + nH2 ) и aLbl[ 1] [ _H ] := nH1; aLbl[ 1] [ _H ] := nH2; aLbl[ 1] [ _H ] := nH3
| |
|
SergKis
|
| постоянный участник
|
Пост N: 106
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.01.13 13:57. Заголовок: SergKis пишет:aLbl ..
SergKis пишет: цитата: | aLbl[ 1] [ _H ] := nH1; aLbl[ 1] [ _H ] := nH2; aLbl[ 1] [ _H ] := nH3 |
| Скопровал, а исправить забыл. Надо: aLbl[ 1] [ _H ] := nH1; aLbl[ 2] [ _H ] := nH2; aLbl[ 3] [ _H ] := nH3
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2593
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.01.13 16:41. Заголовок: Понял. все получилос..
Понял. все получилось. Еще добавил исправление координат по ROW. Только не полностью работают: @ 40, 70 BUTTON Button_Style CAPTION 'Label Style' ; ACTION ( MyBorder(cWnd, aLbl[1][ _N ]), ; MyBorder(cWnd, aLbl[2][ _N ]), ; MyBorder(cWnd, aLbl[3][ _N ]) ) @ 80, 70 BUTTON Button_Edge CAPTION 'Label Edge' ; ACTION ( MyEdge(cWnd, aLbl[1][ _N ]), ; MyEdge(cWnd, aLbl[2][ _N ]), ; MyEdge(cWnd, aLbl[3][ _N ]) ) Скорее всего там тоже надо ставить сразу изменение 3-х объектов ? Правильно ? И еще, подправьте пожалуйста 11 строчку ! Почти готовый пример .... http://files.mail.ru/5F3EA2EABBE647E38CF1718BEA943D3C
| |
|
SergKis
|
| постоянный участник
|
Пост N: 107
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.01.13 20:16. Заголовок: Andrey пишет:Скорее ..
Andrey пишет: цитата: | Скорее всего там тоже надо ставить сразу изменение 3-х объектов ? Правильно ? |
| Да. Но все не так просто. Что бы менять resize во всех трех Label одновременно, надо придумать алгоритм расчета размеров (по % например): - Left, Top, Right, Bottom - отступы от краев Label до контролов - nGapsWidth, nGapsHeight - расстояния по горизонтали, вертикали между контролами - nBtnWidth, nBtnHeight - размеры Button - nGetWidth, nGetHeight - размеры GetBox - и т.д. - размеры фонтов учитывать или нет после получения размеров контролов, можно располагать их в своем Label и ... все равно всего не учтешь, 5 GetBox или Button как не располагай, а во весь экран смотреться не будут. Словом, как бы весь пар в свисток не вышел. цитата: | И еще, подправьте пожалуйста 11 строчку ! |
| Это я не понял - в какой функции ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2595
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.01.13 22:53. Заголовок: SergKis пишет: Да. ..
SergKis пишет: цитата: | Да. Но все не так просто. Что бы менять resize во всех трех Label одновременно, надо придумать алгоритм расчета размеров (по % например): - Left, Top, Right, Bottom - отступы от краев Label до контролов |
| Давайте пока без отступов ! Просто: nCliH := GetClientHeight(hWnd) nH1 := int(nCliH/3) nH2 := nH1*2 nH3 := nCliH If aLbl == NIL aLbl := {} aAdd( aLbl, { 0, 0, nCliW, nH1, "LabelColor_1", cWnd+"_Frame_Text1" } ) aAdd( aLbl, { nH1, 0, nCliW, nH2, "LabelColor_2", cWnd+"_Frame_Text2" } ) aAdd( aLbl, { nH2, 0, nCliW, nH3, "LabelColor_3", cWnd+"_Frame_Text3" } ) И еще, подправьте пожалуйста 11 строчку ! Это просто 11 строка в файле, с самого начала PRG !!!
| |
|
SergKis
|
| постоянный участник
|
Пост N: 109
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.01.13 09:32. Заголовок: Andrey пишет:Это про..
Andrey пишет: цитата: | Это просто 11 строка в файле, с самого начала PRG !!! |
| Я совсем туплю - как она хоть выглядит ? В это комментарий. В предыдущем скрытом тексте это #define ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2596
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.01.13 12:32. Заголовок: SergKis пишет: Я со..
SergKis пишет: цитата: | Я совсем туплю - как она хоть выглядит ? |
| * Copyright ..... SergKis <????????> Ваши данные нужны.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 110
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.01.13 19:11. Заголовок: Andrey пишет:Ваши да..
Andrey пишет: Смело удаляйте эту строку !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2600
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.01.13 22:56. Заголовок: Andrey пишет: Почт..
Почти готовый пример .... http://files.mail.ru/FD03497F32DC4A309C7F85866BD39FDF SergKis, я переделал пример, но БОРДЮР работает через один цвет. Я пробовал несколько вариантов, ничего не получается. Посмотрите пожалуйста. SergKis, а зачем функция Test_This( cWnd ) в примере ? И еще вопрос, кто знает: cWnd := _HMG_ThisFormName nWidth := ? nHeight := ? А в МиниГуи есть переменные типа _HMG_ThisFormName.MaxWidth и _HMG_ThisFormName.MaxHeight ? Я нашел в \Include\i_var.ch #xtranslate _HMG_LoadWindowRow => _HMG_SYSDATA\[427\] #xtranslate _HMG_LoadWindowCol => _HMG_SYSDATA\[428\] #xtranslate _HMG_LoadWindowWidth => _HMG_SYSDATA\[429\] #xtranslate _HMG_LoadWindowHeight => _HMG_SYSDATA\[430\] а для чего эти переменные ?
| |
|
Dima
|
| |
Пост N: 2611
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.01.13 23:15. Заголовок: Andrey пишет: А зач..
Andrey пишет: цитата: | А зачем функция Test_This( cWnd ) в примере ? |
| Это ты сам себя спросил ? ;)
| |
|
SergKis
|
| постоянный участник
|
Пост N: 111
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.01.13 12:53. Заголовок: Andrey пишет:а для ч..
Andrey пишет: цитата: | а для чего эти переменные ? |
| Это базовые переменные, используемые в MiniGUI для хранения информации - это регистрация окон, контролов, HotKey, ... в массивах MiniGUI (не путать с регистацией в windows). См. h_windows.prg, h_<control>.prg, ... . цитата: | есть переменные типа _HMG_ThisFormName.MaxWidth и _HMG_ThisFormName.MaxHeight ? |
| Препроцессор преобразует команды This... (см. i_this.ch) в вызов функций с использованием переменных _HMG_This... ThisWindow.Width ==> GetProperty ( _HMG_THISFORMNAME , "Width") и т.д. В событиях (OnInit, OnGotFocus, Action, ...) перед выполнением блока кода, устанавливаются переменные _HMG_This..., см. функции: _DoWindowEventProcedure(...), _DoControlEventProcedure(...). цитата: | А зачем функция Test_This( cWnd ) в примере ? |
| Это моя приблуда (для своей lib), но после нее, я уверен в _HMG_ThisFormName.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 112
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.01.13 14:04. Заголовок: Andrey пишет:... Пос..
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2604
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.01.13 15:45. Заголовок: SergKis пишет: Это ..
SergKis пишет: цитата: | Это моя приблуда (для своей lib), но после нее, я уверен в _HMG_ThisFormName. |
| В этом (моем) примере можно её (Test_This( cWnd )) убрать ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2605
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.01.13 16:03. Заголовок: SergKis пишет: Подп..
SergKis пишет: Не понял.... А почему через один цвет бордюр не меняется ? Я хочу чтобы, если меняем "Label Style" то было бы так:
| |
|
SergKis
|
| постоянный участник
|
Пост N: 113
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.01.13 18:14. Заголовок: Andrey пишет:Не поня..
Andrey пишет: цитата: | Не понял.... А почему через один цвет бордюр не меняется ? |
| Border ставится\снимается нормально, из-за ClientEdge визуальный обман получается для 2-го Label. SergKis писал: цитата: | Свойства есть, надо использовать: - менять стиль SetWindowStyle(h, WS_BORDER, .T./.F.) - .T. устанавливать, .F. снимать - менять Ext стиль ChangeStyle(h, WS_EX_CLIENTEDGE, 0, .T.) - устанавливать или ChangeStyle(h, 0, WS_EX_CLIENTEDGE, .T.) - снимать У меня получалось менять или Ext стиль или стиль ( одновременно менять - срабатывал только стиль ). |
| В примере, я полагал, для каждого Label, одной кнопкой снимаем\ставим Border, другой - CLIENTEDGE. Для решения Вашей задачи надо иметь в aLbl Label-ы таких же размеров со свойством Visible:=.F. (скрытый) и по кнопке переводить в Visible:=.T. (свойство добавить 9-м элементом), а Label-ы с BORDER и CLIENTEDGE в Visible:=.F. цитата: | В этом (моем) примере можно её (Test_This( cWnd )) убрать ? |
| Да. Я его оставлял как пример манипулирования This... переменными.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2616
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.02.13 16:01. Заголовок: Как сделать украинск..
Как сделать украинский язык (UA866) для программ на МиниГуи ? Для русского делаю так: FUNCTION Main() ......... SET LANGUAGE TO RUSSIAN // язык/lang SET CODEPAGE TO RUSSIAN // кодовая страница/codepage
| |
|
AlexMyr
|
| |
Пост N: 707
Зарегистрирован: 11.06.10
|
|
Отправлено: 01.02.13 17:16. Заголовок: Andrey пишет: Как с..
Andrey пишет: цитата: | Как сделать украинский язык (UA866) для программ на МиниГуи ? |
|
Вот что говорит дока, к-ю наверное никто не читает Select language for interface messages. SYNTAX SET LANGUAGE TO SPANISH | ENGLISH | FRENCH | PORTUGUESE | GERMAN | RUSSIAN | ITALIAN | FINNISH | CROATIAN | BASQUE | POLISH | DUTCH | SLOVENIAN | GREEK | CZECH | UKRAINIAN | BULGARIAN И снова таки, причем тут minigui?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2620
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.02.13 18:35. Заголовок: AlexMyr пишет: И сн..
AlexMyr пишет: цитата: | И снова таки, причем тут minigui? |
| А там несколько вариантов было включения русского языка. Вот и спросил как включить украинский язык (UA866) ? Хотя тут МиниГуи не причем, это точно... AlexMyr пишет: цитата: | Вот что говорит дока, к-ю наверное никто не читает |
| Это в точку !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2637
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.02.13 08:01. Заголовок: Последний вариант 3х..
| |
|
SergKis
|
| постоянный участник
|
Пост N: 115
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.13 13:42. Заголовок: Andrey пишет:Последн..
Andrey пишет: цитата: | Последний вариант 3х цветной формы и изменения размера формы. |
| Примеры работают не корректно - при увеличении окна вниз - контролы и label-color наезжают друг на друга. Исправить можно так: Скрытый текст
FUNCTION ReSize() ... // change the position of the Label-Color FOR i := 1 TO Len( aLbl ) SetProperty( cWnd, aLbl[ i ][ _T ], "Visible", .F. ) // label-text hide SetProperty( cWnd, aLbl[ i ][ _N ], "Visible", .F. ) // label-color hide SetProperty( cWnd, aLbl[ i ][ _N ], "Row" , aLbl[ i ][ _Y ] ) SetProperty( cWnd, aLbl[ i ][ _N ], "Width" , aLbl[ i ][ _W ] ) SetProperty( cWnd, aLbl[ i ][ _N ], "Height", aLbl[ i ][ _H ] ) SetProperty( cWnd, aLbl[ i ][ _N ], "Visible", .T. ) // label-color show // change the position of the Label-Text SetProperty( cWnd, aLbl[ i ][ _T ], "Row" , aLbl[ i ][ _Y ] + 10 ) SetProperty( cWnd, aLbl[ i ][ _T ], "Visible", .T. ) // label-text show NEXT /* // change the position of the Label-Text FOR i := 1 TO Len( aLbl ) SetProperty( cWnd, aLbl[ i ][ _T ], "Row" , aLbl[ i ][ _Y ] + 10 ) NEXT */
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2644
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.02.13 14:01. Заголовок: SergKis пишет: Испр..
SergKis пишет: Спасибо БОЛЬШОЕ ! Кстати функцию Test_This( cWnd ) убрать нельзя ! Пример перестает работать....
| |
|
SergKis
|
| постоянный участник
|
Пост N: 116
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.13 15:06. Заголовок: Andrey пишет:Пример ..
Andrey пишет: цитата: | Пример перестает работать.... |
| Все правильно. Переменные _HMG_This... формируются в вызываемых процедурах (events) окна, контролов: Скрытый текст pre2] Procedure _ProcessInitProcedure(i) ... _HMG_ThisEventType := 'WINDOW_INIT' _HMG_ThisFormIndex := iIndex _HMG_ThisType := 'W' _HMG_ThisIndex := iIndex _HMG_ThisFormName := _HMG_aFormNames [ iIndex ] _HMG_ThisControlName := "" Eval( bInit ) ... Function _DoWindowEventProcedure ( bBlock , i , cEventType ) ... _HMG_ThisFormIndex := i _HMG_ThisEventType := cEventType _HMG_ThisType := 'W' _HMG_ThisIndex := i _HMG_ThisFormName := _HMG_aFormNames [ _HMG_ThisFormIndex ] _HMG_ThisControlName := "" lRetVal := Eval( bBlock ) ... Function _DoControlEventProcedure ( bBlock , i , cEventType , nParam ) ... _HMG_ThisFormIndex := ascan ( _HMG_aFormHandles , _HMG_aControlParentHandles ) _HMG_ThisType := 'C' _HMG_ThisIndex := i _HMG_ThisFormName := _HMG_aFormNames [ _HMG_ThisFormIndex ] _HMG_ThisControlName := _HMG_aControlNames [ _HMG_ThisIndex ] If _HMG_BeginWindowActive == .F. .or. !( cEventType == 'CONTROL_ONCHANGE' ) .or. _HMG_MainClientMDIHandle != 0 Eval( bBlock, nParam ) EndIf ...
|
` Мы после DEFINE WINDOW &cWnd ; вызывали: aLblClrInit() AEval( aLbl, { | a, n | MySayColorLabel( n, n ) } ) и чтобы одинаково работать в своих вызовах и events процедурах Test_This(cWnd) устанавливает _HMG_ThisFormName, _HMG_ThisFormIndex. Если бы мы все проделывали только в events процедурах, то Test_This(cWnd) не нужна.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2754
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.03.13 13:19. Заголовок: Вот столкнулся с тем..
Вот столкнулся с тем что не могу поменять цвет в RADIOGROUP Вроде по доке там 2 параметра по цвету, а у меня только черным выводит.... Вот код: Скрытый текст DEFINE RADIOGROUP RadioGroup_CodeEIRC ........................... OPTIONS {' ячейка (1:А)',' ячейка (2:А)'} READONLY { .F. , .F. } FONTNAME 'Arial Black' FONTSIZE 14 SPACING 10 FONTCOLOR ORANGE BACKCOLOR aFonColor[ 2 ] HORIZONTAL .T. END RADIOGROUP
| Как поменять цвет в RADIOGROUP ? И как увеличить размер "кружка" ? P.S. Если не ставить первый пробел в OPTIONS {' ячейка (1:А)',' ячейка (2:А)'}, то труба, текст не появится ! НЕ ЛЮБИТ МИНИГУИ маленькую букву "я" !!! Час убил на выяснения этого ФЕНОМЕНА !!! Надо бы сообщить разработчикам... Григорий сообщи им пожалуйста !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2763
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.03.13 22:37. Заголовок: Разобрался я с цвето..
Разобрался я с цветом в RADIOGROUP ! В Win8 не меняется цвет, а в Win2003 и Win2008 все работает нормально !!! До ХР пока не дошел...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 176
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.03.13 08:36. Заголовок: Andrey пишет:Разобра..
Andrey пишет: цитата: | Разобрался я с цветом в RADIOGROUP ! В Win8 не меняется цвет, а в Win2003 и Win2008 все работает нормально !!! До ХР пока не дошел... |
| Когда подстрагивали под себя MiniGui, обратили внимание, что в некоторых контролах управление цветами, фонтами заложено, но не до конца - т.е. для развития. Можно потратить кучу времени и без результата, если очень надо с цветами, то использовать альтернативные решения - Label, Image, Combobox,Browse или Grid (без линий и header, но с Image), и т.д. ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2765
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.03.13 11:47. Заголовок: SergKis пишет: Можн..
SergKis пишет: цитата: | Можно потратить кучу времени и без результата, если очень надо с цветами |
| Да не надо. Спасибо за разъяснения. Просто начал делать и не получается, думал что я что-то не так делаю...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2792
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.04.13 00:58. Заголовок: Есть ли ПРИМЕР копир..
Есть ли ПРИМЕР копирования файла с бегунком (PROGRESSBAR) ? Можно конечно и самому написать, но хочется посмотреть правильный код....
| |
|
Dima
|
| |
Пост N: 3018
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.04.13 09:45. Заголовок: Andrey пишет: Есть ..
Andrey пишет: цитата: | Есть ли ПРИМЕР копирования файла с бегунком (PROGRESSBAR) |
| Где то выкладывали уже и тоже по твоей просьбе.
| |
|
Softlog86
|
| |
Пост N: 87
Зарегистрирован: 03.12.08
|
|
Отправлено: 13.04.13 16:34. Заголовок: А меня интересует ре..
А меня интересует регулировка прозрачности элемента управления "Slider" :) Хочу его запрятать за картинку
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2793
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.04.13 18:13. Заголовок: Dima пишет: Где то ..
Dima пишет: цитата: | Где то выкладывали уже и тоже по твоей просьбе. |
| Да я просмотрел все свои программки на МиниГуи, так и не нашел. Индексация есть, а вот копирования файла нет. Пришлось псевдокопирование сделать - бегунок в цикле до 50%, потом копирование, потом остаток бегунка.
| |
|
Haz
|
| |
Пост N: 69
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.04.13 22:02. Заголовок: не втех примерах иск..
не втех примерах искал MiniGUI\SAMPLES\BASIC\Filecopy\
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2796
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.04.13 00:58. Заголовок: Haz пишет: не втех ..
Haz пишет: цитата: | не втех примерах искал MiniGUI\SAMPLES\BASIC\Filecopy\ |
| Это точно не в тех... Спасибо большое !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2804
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.04.13 22:09. Заголовок: Как сделать, чтобы п..
Как сделать, чтобы при аварийном сваливании программы на МиниГуи, она не оставалась в памяти ? А то потом правишь ехе-ник, а он не собирается, пока из памяти свалившуюся прогу не снимешь...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2843
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.06.13 13:03. Заголовок: Как можно получить р..
Как можно получить размеры AVI-файла, показываемый на форме из ресурсов EXE ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2862
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.06.13 12:00. Заголовок: Как узнать запущена ..
Как узнать запущена ли чужая программа или нет ? Нужно узнать по названию EXE файла. Функция IsExeRunning() не работает ! Проверял на MiniGUI\SAMPLES\Advanced\IsExeRunning\demo.prg модифицированный немного: cRun := "WINWORD.EXE" l1 := IsExeRunning( cRun ) l2 := IsExeRunning( cFileNoPath( HB_ArgV( 0 ) ) ) cR3 := "demo2.exe" l3 := IsExeRunning( cR3 ) MsgDebug(cRun, l1,cFileNoPath( HB_ArgV( 0 ) ), l2, cR3, l3 ) (запускал WINWORD и demo2.exe )
| |
|
Dima
|
| |
Пост N: 3236
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.06.13 12:17. Заголовок: Andrey пишет: Как у..
Andrey пишет: цитата: | Как узнать запущена ли чужая программа или нет ? |
| Запущенные процессы надо анализировать
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2869
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.06.13 16:14. Заголовок: Можно ли вывести в ф..
Можно ли вывести в функциях BrowseForFolder() или GetFolder() ТОЛЬКО подключенные флешки к компьютеру ? Или нужно писать самому такую функцию ? Может у кого есть уже такая функция ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2874
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.06.13 18:44. Заголовок: Haz пишет: не втех ..
Haz пишет: цитата: | не втех примерах искал MiniGUI\SAMPLES\BASIC\Filecopy\ |
| Посмотрел этот пример и не понял, ошибка или в новой версии БЕГУНОК не работает ? Собирал с помощью MiniGUI 2.2.3 - 2013.06.12 Кто подскажет как исправить ошибку ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 489
Зарегистрирован: 11.02.10
|
|
Отправлено: 24.06.13 21:05. Заголовок: Andrey пишет: Кто п..
Andrey пишет: цитата: | Кто подскажет как исправить ошибку ? |
| Надо заменить вызов команды DO EVENTS на вызов функции inkey(.1) или InkeyGUI() в этом месте ************************************ Function SHOW_IT(nDl) ************************************ Local nPos := int(nDl*100) if nPos % _SHOW_PERCENT == 0 Form_1.Label_3.Value := ltrim(str(nPos))+" % complete" Form_1.ProgressBar_1.Value := nPos // DO EVENTS inkey(.1) endif return NIL
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2876
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.06.13 21:22. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Надо заменить вызов команды DO EVENTS на вызов функции inkey(.1) или InkeyGUI() в этом мест |
| Спасибо БОЛЬШОЕ !!!
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2881
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.06.13 18:48. Заголовок: Пример MiniGUI\S..
Пример MiniGUI\SAMPLES\BASIC\Filecopy\ - заработал... Для теста пробую копировать файл размером 160 Мб на флешку... Идет копирование медленно даже при #define _LARGE_BLOCK 16384*10 (при 20 прога вешается...) Если еще при этом сделать копирование другого файла на эту же флешку, то труба... Программа "подвисает" вот с таким сообщением: Стандартная харборовская функция FILECOPY( cSource, cDestination ) - работает в разы лучше... Вопрос: как увеличить скорость записи и убрать подвисание программы ?
| |
|
Dima
|
| |
Пост N: 3253
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.06.13 20:54. Заголовок: Andrey пишет: Станд..
Andrey пишет: цитата: | Стандартная харборовская функция FILECOPY( cSource, cDestination ) - работает в разы лучше... Вопрос: как увеличить скорость записи и убрать подвисание программы ? |
| Переработать этот пример на Filecopy , Hb_fcopy ....и тд и тп А вообще если шибко надо можно и свою функцию по копированию сваять.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2900
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.07.13 02:58. Заголовок: На форме использую о..
На форме использую объект ANIMATEBOX: @ 10,80 ANIMATEBOX Avi_1 ; WIDTH 340 HEIGHT 60 ; FILE 'AVI1' AUTOPLAY TRANSPARENT NOBORDER Работает отлично. Закончилась одна обработка, перехожу к другой обработке. Как сменить AVI1 на другой, допустим AVI2 ? В примерах и доке не нашел ничего.... Все AVI-файлы уже загружены в ресурсы программы....
| |
|
a_sidorov
|
| |
Пост N: 41
Зарегистрирован: 07.06.08
|
|
Отправлено: 08.07.13 11:08. Заголовок: Попробуй так: Fo..
Попробуй так: Form_Main.Avi_1.Stop() Form_Main.Avi_1.Open('Avi2') Form_Main.Avi_1.Play()
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2901
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.07.13 12:30. Заголовок: Спасибо, получилось ..
Спасибо, получилось !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2907
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.07.13 18:48. Заголовок: Как изменить цвета б..
Как изменить цвета букв после вывода на форму ? Т.е. я не хочу выводить слово побуквенно, а вывести надпись целиком, а потом изменить цвет у некоторых букв. Например: @ 10,120 LABEL Label_1 VALUE "Test color label" ; WIDTH 500 HEIGHT 60 FONT "Times Roman" SIZE 24 BOLD и выборочно изменить цвет нескольких букв "e" и "o".
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2915
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.07.13 22:59. Заголовок: Работаю с базой, чер..
Работаю с базой, через объект GRID. После обновления базы обновляю GRID, так: aList := LoadLogZaiv() // загрузка базы (маленькая) в массив Form_9.Grid_Log.DeleteAllItems Form_9.Grid_Log.DisableUpdate FOR nI := 1 to LEN(aList) Form_9.Grid_Log.AddItem( aList[nI] ) NEXT Form_9.Grid_Log.EnableUpdate Вопрос: а как сделать чтобы в окне GRID отображались самые нижние записи ? Может метод какой то есть ? Заранее спасибо за ответ !
| |
|
Haz
|
| |
Пост N: 80
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.07.13 23:16. Заголовок: это то что надо ?
Andrey пишет: цитата: | а как сделать чтобы в окне GRID отображались самые нижние записи ? |
| Это так ? Form_9.Grid_log.Value := Len(aList)
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2916
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.07.13 12:30. Заголовок: Haz пишет: Form_9.G..
Haz пишет: цитата: | Form_9.Grid_log.Value := Len(aList) |
| Спасибо БОЛЬШОЕ !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2927
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.08.13 22:44. Заголовок: Всем доброй ночи... ..
Всем доброй ночи... Подскажите как проконтролировать ввод названия папки: M->cPubDirFlaska := "TEST\" ...... @ 128, 20 + 60 TEXTBOX Text_2 ; WIDTH 500 ; VALUE M->cPubDirFlaska ; FONT "Courier New" Size 12 BOLD ; ON LOSTFOCUS {|| M->cPubDirFlaska := AllTrim(Form_5.Text_2.Value) } Т.е. если юзер забыл в конце добавить знак "\", то нужно его добавить автоматом... Заранее спасибо за помощь !
| |
|
Dima
|
| |
Пост N: 3401
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 22:55. Заголовок: Andrey пишет: Т.е. ..
Andrey пишет: цитата: | Т.е. если юзер забыл в конце добавить знак "\", то нужно его добавить автоматом... |
| Тупо проверить символ справа например или устроить разбор строки.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2928
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.08.13 10:19. Заголовок: Dima пишет: Тупо пр..
Dima пишет: цитата: | Тупо проверить символ справа например или устроить разбор строки. |
| А как ? Я не могу понять как это реализовать в МиниГуи ? Где ставить вызов обрабатываемой функции ? Сама функция есть: Function MyFixDir(cDir) cDir := AllTrim(cDir) IF SubStr(cDir,Len(cDir),1) # "\" cDir := cDir + "\" ENDIF RETURN cDir
| |
|
PSP
|
| постоянный участник
|
Пост N: 902
Зарегистрирован: 27.01.07
|
|
Отправлено: 17.08.13 10:28. Заголовок: Andrey пишет: Я не ..
Andrey пишет: цитата: | Я не могу понять как это реализовать в МиниГуи ? Где ставить вызов обрабатываемой функции ? |
| У тебя ж есть блок кода в ON LOSTFOCUS. Туда и вставь.
| |
|
Dima
|
| |
Пост N: 3403
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.08.13 10:29. Заголовок: Andrey пишет: А как..
Andrey пишет: Andrey пишет: цитата: | M->cPubDirFlaska := "TEST\" |
| Вот так наверное M->cPubDirFlaska :=Твоя функция
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2929
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.08.13 12:30. Заголовок: PSP пишет: У тебя ж..
PSP пишет: цитата: | У тебя ж есть блок кода в ON LOSTFOCUS. Туда и вставь. |
| Dima пишет: цитата: | Вот так наверное M->cPubDirFlaska :=Твоя функция |
| Не пашет !!! Только потом сообразил, что нужно перепоказать значение в TEXTBOX Text_2 .... Вот так работает: @ 128, 20 + 60 TEXTBOX Text_2 ; WIDTH 500 ; VALUE M->cPubDirFlaska ; ON LOSTFOCUS {|| M->cPubDirFlaska := MyFixDir(Form_5.Text_2.Value) } Сама функция: Function MyFixDir(cDir) cDir := AllTrim(cDir) IF SubStr(cDir,Len(cDir),1) # "\" cDir := cDir + "\" ENDIF Form_5.Text_2.Value := cDir RETURN cDir Спасибо за подсказку !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2930
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.08.13 18:36. Заголовок: Возможно ли выведенн..
Возможно ли выведенный объект на форме поменять цвет ? Допустим есть объект @ 275,20 PROGRESSBAR Progress_1 ; RANGE 0,100 ; VALUE 0; WIDTH 530 HEIGHT 25 После завершения пробега бегунка, я хочу закрасить его другим цветом. Как это сделать ? Может пример есть ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2932
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.08.13 12:50. Заголовок: В Клипере и Харборе ..
В Клипере и Харборе есть отличная функция: ColorWin() Replaces a color attribute in a screen region Есть ли аналог такой функции в МиниГуи ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2937
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.08.13 18:19. Заголовок: Помогите понять ошиб..
Помогите понять ошибку. Прога сваливается с непонятной периодичностью... Ошибка вот такая: Time from start: 0 days 0 hours 5 mins 0 secs Error: Non Modal Window Win_Zaiv can't be activated when a Modal window is active. Called from _ACTIVATEWINDOW(1303) Called from DOMETHOD(4654) Called from CHANGE_ZAIVKI(343) Программа "сидит" в трее и функцию CHANGE_ZAIVKI(343) вызываю по таймеру через каждые 5 минут. Как долго работает прога, не знаю... Может свалиться и через 5 минут или через час... Непонятки сплошные...
| |
|
Dima
|
| |
Пост N: 3446
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.08.13 18:22. Заголовок: Andrey пишет: Non M..
Andrey пишет: цитата: | Non Modal Window Win_Zaiv can't be activated when a Modal window is active. |
| Не модальное окно Win_Zaiv не может быть активировано когда модальное окно активно. PS Прошу прощения за мой плохой англо русский перевод
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2938
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.08.13 18:25. Заголовок: Dima пишет: Не мода..
Dima пишет: цитата: | Не модальное окно Win_Zaiv не может быть активировано когда модальное окно активно. |
| Как такое может быть ? Работает прога нормально, посылает на сайт данные... а потом бац: Non Modal Window Win_Zaiv can't be activated when a Modal window is active.
| |
|
Haz
|
| |
Пост N: 85
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.08.13 18:26. Заголовок: с окнами разберись
Андрей , а что за окно Win_Zaiv? судя по ошибке ты пытаешься его активировать при активном модальном окне Проверь все окна
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2939
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.08.13 20:26. Заголовок: Andrey пишет: Прогр..
Andrey пишет: цитата: | Программа "сидит" в трее и функцию CHANGE_ZAIVKI(343) вызываю по таймеру через каждые 5 минут. |
| Не правильно написал. Скрытый текст Основной модуль: DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 0 HEIGHT 0 ; TITLE PROGRAM ; MAIN NOSHOW ; NOTIFYICON '1MAIN_ICON' ; ..... DEFINE TIMER Timer_1 ; INTERVAL (M->TimeUpdate * 60) * 1000 ; ACTION AutoCheckZaiv() END WINDOW ..... Procedure AutoCheckZaiv() If !lActive lActive := .T. lInet := IsConnected() // см. InetState.prg IF lInet // Проверка доступности интернета ZaivkaSite_NoWin() // Выбираю и копирую из базы записи на сайт ....................... lActive := .F. Endif Return /////////////////////// Другой файл: FUNCTION ZaivkaSite_NoWin() LOCAL cDbfZaivIzm,cDbfZaivZip cDbfZaivIzm := "test_site.dbf" // создание БД измененных записей cDbfZaivZip := CHANGE_ZAIVKI(cDbfZaivIzm,M->cPubPathTemp,M->dPubZaivChancg,"NoWin") IF LEN(cDbfZaivZip) > 0 SaveToSiteZaivka2(cDbfZaivZip,M->cPubPathTemp,"NoWin") // отправка архива на сайт ENDIF RETURN NIL ............... FUNCTION CHANGE_ZAIVKI(cDbfZaivIzm,cPathDbf,dZaivka,cTypeWin) LOCAL cTitle := "Подготовка измененных записей" LOCAL cDbfZip := "" DEFAULT cTypeWin TO "" DEFINE WINDOW Win_Zaiv ; ROW 0 COL 0 ; WIDTH 480 ; HEIGHT 240 ; TITLE cTitle ; ICON "ICON2SITE" ; CHILD ; NOSIZE NOMAXIMIZE NOMINIMIZE; FONT 'Tahoma' SIZE 10 ; ON INIT { || cDbfZip := InitChangeZaivki(cDbfZaivIzm,cPathDbf,dZaivka,cTypeWin) } ............. END WINDOW Win_Zaiv.Center Win_Zaiv.Activate RETURN cDbfZip //////////////////////////////////////////////////////////// // Инициализация формы FUNCTION InitChangeZaivki(cDbfZaivIzm,cPathDbf,dZaivka,cTypeWin) ........... // открытие общей базы cFileDbf := M->cPubPathZaiv + "dbase.dbf" bErrHandler := ErrorBlock( { | VAR | BREAK( VAR ) } ) BEGIN SEQUENCE USE ( cFileDbf ) Alias BASEMAIN CODEPAGE "RU866" NEW SHARED RECOVER cMsg := "Ошибка ! НЕ могу открыть базу !" + CRLF + CRLF + cFileDbf MsgStop( cMsg , MSGTITLE ) Win_Zaiv.Release() RETURN "" END SEQUENCE ErrorBlock( bErrHandler ) // IF MyOpenSprav(@cErr) //открытие справочников ELSE cMsg := "Ошибка ! НЕ смог открыть СПРАВОЧНИКИ !" + CRLF + CRLF + cErr MsgStop( cMsg , MSGTITLE ) Win_Zaiv.Release() RETURN "" ENDIF ....... и т.д.
| Вроде всегда при ошибках делаю закрытие окна Win_Zaiv.Release() ! Вот прога уже три часа нормально в трее сидит, не ломается. Или нужно еще что-то делать, для обработок ошибок ?
| |
|
Haz
|
| |
Пост N: 86
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.08.13 21:16. Заголовок: самое простое - сде..
самое простое - сделать Win_Zaiv модальным окном а не CHILD
| |
|
SergKis
|
| постоянный участник
|
Пост N: 227
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.08.13 22:19. Заголовок: Andrey пишет:Или нуж..
Andrey пишет: цитата: | Или нужно еще что-то делать |
| В AutoCheckZaiv() надо отключать timer на время выполнения работ и включать timer по завершению снова, где-то на эту тему мы уже общались
| |
|
sashaBG
|
| постоянный участник
|
Пост N: 125
Зарегистрирован: 15.09.05
|
|
Отправлено: 22.08.13 22:29. Заголовок: надо отключать timer на время выполнения работ
Я тоже так думаю
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2941
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.08.13 10:10. Заголовок: SergKis пишет: В Au..
Haz пишет: цитата: | самое простое - сделать Win_Zaiv модальным окном а не CHILD |
| Не ставиться ! Если меняю на: DEFINE WINDOW Win_Zaiv ; ........... TITLE cTitle ; MODAL; NOSIZE NOMAXIMIZE NOMINIMIZE; ........ То при сборке выдает кучу ошибок: Source\Zaiv_to_Site.prg(310) Error E0030 Syntax error "syntax error at 'WINDOW'" Source\Zaiv_to_Site.prg(341) Error E0030 Syntax error "syntax error at '.'" Source\Zaiv_to_Site.prg(342) Error E0030 Syntax error "syntax error at '.'" и т.д. SergKis пишет: цитата: | В AutoCheckZaiv() надо отключать timer на время выполнения работ и включать timer по завершению снова, где-то на эту тему мы уже общались |
| Пересмотрел форум, не нашел. Помню что вы рекомендовали, а что точно не помню. Если несложно, пожалуйста повторите что и как нужно сделать ? Заранее БОЛЬШОЕ спасибо.
| |
|
Haz
|
| |
Пост N: 87
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.08.13 10:24. Заголовок: Не ставиться
Andrey пишет: цитата: | TITLE cTitle ; MODAL; NOSIZE NOMAXIMIZE NOMINIMIZE; |
| Синтаксис описания модального окна отличается от не модального. Сравни по мануалу. В частности там нет NOMAXIMIZE NOMINIMIZE
| |
|
SergKis
|
| постоянный участник
|
Пост N: 232
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.08.13 17:20. Заголовок: Andrey пишет: повтор..
Andrey пишет: цитата: | повторите что и как нужно сделать |
| Procedure AutoCheckZaiv() SetProperty('Form_1', 'Timer_1', 'Enabled', .F.) // выкл. или Form_1.Timer_1.Enabled := .F. ... SetProperty('Form_1', 'Timer_1', 'Enabled', .T.) // вкл. или Form_1.Timer_1.Enabled := .T. Return
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2944
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.08.13 12:44. Заголовок: Спасибо БОЛЬШОЕ. Сд..
Спасибо БОЛЬШОЕ. Сделал, работает. Теперь другой вопрос. Как вернуть текущему окну (в котором работает юзер) фокус ввода из моей задачи ? А то, после запуска моей задачи из трея, приходится мышкой тыкать в то окно, с которым работал.
| |
|
Haz
|
| |
Пост N: 88
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.08.13 12:27. Заголовок: Как вернуть текущему окну
на вскидку два варианта 1) получить указатель окна пользователя ( ShrinkIt из примеров минигуи в помощь ) и читать типа этого http://www.wasm.ru/forum/viewtopic.php?pid=123607 2) Вообще не забирать фокус у окна пользователя а писать статистику в лог ( базу ). Из программы пользователя анализировать этот лог ( базу ) и выводить сообщения из нее.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2949
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.08.13 13:20. Заголовок: Haz пишет: на вскид..
Haz пишет: Спасибо БОЛЬШОЕ ! Второй вариант лучше. Меньше "париться" !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2950
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.08.13 13:31. Заголовок: Если я создаю объект..
Если я создаю объект: DEFINE WINDOW Win_Zaiv ; MODAL ; NOSHOW ; ..... END WINDOW Win_Zaiv.Center Win_Zaiv.Activate То почему то окно все равно показывается на экран. Что не так делаю ?
| |
|
Haz
|
| |
Пост N: 89
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.08.13 15:01. Заголовок: все так
вроде все так, без живого примера не понять перед Win_Zaiv.Center добавь Win_Zaiv.Hide и забудь
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2954
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.08.13 18:46. Заголовок: Haz пишет: перед Wi..
Haz пишет: цитата: | перед Win_Zaiv.Center добавь Win_Zaiv.Hide и забудь |
| Не получается ! Окно все равно выводиться. Почему ? Я же ставлю при создание окна NOSHOW ! А окно появляется: Вот полный код: Скрытый текст //////////////////////////////////////////////////////////// // создание БД измененных записей FUNCTION CHANGE_ZAIVKI(cDbfZaivIzm,cPathDbf,dZaivka,cTypeWin) LOCAL cTitle := "Подготовка измененых записей" LOCAL cDbfZip := "" DEFAULT cTypeWin TO "" DEFINE WINDOW Win_Zaiv ; ROW 0 COL 0 ; WIDTH 480 ; HEIGHT 240 ; TITLE cTitle ; ICON "ICON2SITE" ; MODAL ; NOSHOW ; NOSIZE NOSYSMENU ; FONT 'Tahoma' SIZE 10 ; ON INIT { || cDbfZip := InitChangeZaivki(cDbfZaivIzm,cPathDbf,dZaivka,cTypeWin) } @ 80, 0 LABEL Label_Up VALUE "" ; WIDTH 480 HEIGHT 260 ; BACKCOLOR COLOR_BUTTONE_LIGHT_RED @ 10,80 ANIMATEBOX Avi_1 ; WIDTH 32 HEIGHT 40 ; FILE 'AVICHECK' AUTOPLAY TRANSPARENT NOBORDER @ 120,20 PROGRESSBAR Progress_1 ; RANGE 0,100 ; VALUE 0; WIDTH 430 HEIGHT 34 @ 100,10 LABEL Label_1 ; WIDTH 450 HEIGHT 16 ; VALUE '0%' ; BOLD ; BACKCOLOR COLOR_BUTTONE_LIGHT_RED ; CENTERALIGN @ 155,10 LABEL Label_2 ; WIDTH 450 HEIGHT 46 ; VALUE "создаю БД" ; BOLD ; BACKCOLOR COLOR_BUTTONE_LIGHT_RED ; CENTERALIGN END WINDOW Win_Zaiv.Hide Win_Zaiv.Center Win_Zaiv.Activate RETURN cDbfZip //////////////////////////////////////////////////////////// // Инициализация формы FUNCTION InitChangeZaivki(cDbfZaivIzm,cPathDbf,dZaivka,cTypeWin) LOCAL nJ, nI, aFieldArray, lRet, cFileDbf, bErrHandler, aDbf, nAllRecno LOCAL aRecno := {}, cDateZ, cTimeZ, cNumZ, cID, cMsg MsgDebug(cTypeWin)
| У Григория есть пример \MiniGUI\SAMPLES\BASIC\SPLASHDEMO\demo.prg Там нормально отрабатывает NOSHOW: Скрытый текст Function Main DEFINE WINDOW Form_Main ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'Main Window' ; MAIN ; NOSHOW END WINDOW DEFINE WINDOW Form_Splash ; PICTURE 'DEMO' ; SPLASH ; DELAY 4 ; ON RELEASE Form_Main.Show END WINDOW CENTER WINDOW Form_Main ACTIVATE WINDOW ALL Return Nil
| По доке окно MODAL тоже может быть NOSHOW... Или глюк какой то ?
| |
|
Haz
|
| |
Пост N: 90
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.08.13 19:40. Заголовок: видимо косячек
видимо косячек в минигуи с модальным окном. как вариант в ON INIT засунуть ThisWindow.hide , прячет но мелькает всеравно
| |
|
SergKis
|
| постоянный участник
|
Пост N: 241
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.08.13 19:50. Заголовок: Haz пишет:видимо кос..
Haz пишет: цитата: | видимо косячек в минигуи с модальным окном. |
| и не только в модальном (было в версии 2.07) всегда show
| |
|
Haz
|
| |
Пост N: 91
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.08.13 20:52. Заголовок: ТАБЛЕТКА
Андрей , держи таблетку и играй в прятки с модальными окнами в h_windows.prg в строке 1295 вместо If _HMG_aFormType == "M" _ShowWindow ( _HMG_aFormNames , .F. ) нужно прописать условие IF ... и пересобратьбиблиотеки минигуи If _HMG_aFormType == "M" if _HMG_aFormNoShow == .F. _ShowWindow ( _HMG_aFormNames , .F. ) ELSE _hIDEWindow ( _HMG_aFormNames , .F. ) end
| |
|
Панченко
|
| |
Пост N: 52
Зарегистрирован: 13.06.12
|
|
Отправлено: 29.08.13 18:09. Заголовок: Андрей, убери Win_Za..
Андрей, убери Win_Zaiv.Activate (ну и Hide перед ним тоже не нужен)
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2960
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.08.13 19:51. Заголовок: Панченко пишет: Анд..
Панченко пишет: цитата: | Андрей, убери Win_Zaiv.Activate (ну и Hide перед ним тоже не нужен) |
| Конечно. Ставил я это из-за того: Haz пишет: цитата: | видимо косячек в минигуи с модальным окном. |
|
| |
|
Панченко
|
| |
Пост N: 53
Зарегистрирован: 13.06.12
|
|
Отправлено: 30.08.13 08:42. Заголовок: Andrey пишет: Haz п..
Andrey пишет: цитата: | Haz пишет: цитата: видимо косячек в минигуи с модальным окном. |
| Андрей, описываешь модальное окно с NOSHOW. ACTIVATE не надо !!! (это активация окна, которая выводит его на экран). Окно нормально создается, но на экран не выводится.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2962
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.08.13 20:36. Заголовок: Панченко пишет: Окн..
Панченко пишет: цитата: | Окно нормально создается, но на экран не выводится. |
| Да, создается. Только при повторном обращении к этой функции, теперь программа слетает ! С ошибкой: Error: Window: Win_Zaiv is already defined.</p><BR> Called from _DEFINEMODALWINDOW(440) Called from CHANGE_ZAIVKI(311) А с Win_Zaiv.Activate нормально работает. Т.е. если я делаю модальное окно: DEFINE WINDOW Win_Zaiv ; MODAL ; NOSHOW ; ON INIT { || cDbfZip := InitChange(cDbfZaivIzm,cPathDbf,dZaivka,cTypeWin) } ..... END WINDOW Win_Zaiv.Center RETURN NIL //////////////////////////////////////////////////////////// // Инициализация формы FUNCTION InitChange(cDbfZaivIzm,cPathDbf,dZaivka,cTypeWin) ..... IF LEN(cTypeWin) == 0 Win_Zaiv.Show ELSE Win_Zaiv.Hide // "NOWIN" ENDIF ............ То программа с параметром "NOWIN" - работает один раз. При повторном обращении падает с ошибкой указанной выше... Где и что править ? Или придется делать ДВЕ отдельные функции: с окном и без окна ? Но это же неправильно !
| |
|
SergKis
|
| постоянный участник
|
Пост N: 244
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.08.13 21:39. Заголовок: Andrey для проверки ..
Andrey для проверки наличия есть: _IsWindowDefined('Form_1') - для окон _IsControlDefined('Label_1', 'Form_1') - для контролов
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2964
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.08.13 22:09. Заголовок: SergKis пишет: для ..
SergKis пишет: цитата: | для проверки наличия есть: _IsWindowDefined('Form_1') - для окон _IsControlDefined('Label_1', 'Form_1') - для контролов |
| СПАСИБО БОЛЬШОЕ ! Буду пользоваться. Я не пойму только одного у себя, если модальное окно с NOSHOW и БЕЗ Win_Zaiv.Activate у меня окно показывается. А у Григория в примере \MiniGUI\SAMPLES\BASIC\SPLASHDEMO\demo.prg стоит ACTIVATE WINDOW ALL то у него все работает. Панченко пишет: цитата: | Андрей, убери Win_Zaiv.Activate (ну и Hide перед ним тоже не нужен) |
| Тогда неправ Панченко ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 245
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.13 05:32. Заголовок: Andrey пишет:А у Гри..
Andrey пишет: цитата: | А у Григория в примере \MiniGUI\SAMPLES\BASIC\SPLASHDEMO\demo.prg стоит ACTIVATE WINDOW ALL то у него все работает |
| У него другая схема - сначала MAIN, потом другое окно. Начинать приложение сразу с MODAL у меня тоже были проблемы с управлением в окне. Сделал как у Григория, сначала MAIN в небольших координатах, сверху в OnInit MODAL и hide MAIN, но фокус эта конструкция будет забирать на себя при запуске из Tray - возможно запускать надо раньше, при старте своей проги и пусть сидит в фоне, или управлять заголовками (переключением фокуса между окнами по HWND)
| |
|
SergKis
|
| постоянный участник
|
Пост N: 246
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.13 06:07. Заголовок: Andrey при вызове (c..
Andrey при вызове (click-ом) из Tray фокус на Tray меню, hide в новом запуске вернет фокус на последний фокус где был, т.е. на окно задачи не вернет.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 2968
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.08.13 11:47. Заголовок: SergKis пишет: Начи..
SergKis пишет: цитата: | Начинать приложение сразу с MODAL у меня тоже были проблемы с управлением в окне. |
| Так у меня тоже приложение начинается не с MODAL, а с MAIN. У меня в трее сидит приложение. Через 5 минут идет (открытие/проверка), выводит окно MODAL -бегунка подготовки БД. Вот это окно, я хочу убрать это окно, не показывать вообще (NOSHOW). А это окно все равно показывается на экране. У меня 2-3 места в программе, где я не хочу показывать такие MODAL-окна. Вот и получается, что есть тогда 3 варианта: 1) Исправить этот баг в библиотеке МиниГуи 2) написать аналогичные процедуры у себя в программе - без использования окон 3) переключением фокуса между окнами по HWND Пока хочу попробовать 3-вариант. SergKis пишет: цитата: | или управлять заголовками (переключением фокуса между окнами по HWND) |
| А как вы это делаете ? Подскажите пожалуйста.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 248
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.13 15:58. Заголовок: Andrey Я это делаю A..
Andrey Я это делаю AutiIt3, мы это уже обсуждали, в hb через FindWindow в ваших темах где-то было
| |
|
SergKis
|
| постоянный участник
|
Пост N: 249
Зарегистрирован: 17.02.12
|
|
Отправлено: 31.08.13 16:04. Заголовок: Andrey пишет:А это о..
Andrey пишет: цитата: | А это окно все равно показывается на экране. |
| NOSHOW я не использую, когда надо делаю DoMethod(cWnd, 'Hide', .T.) или .F., работает как надо, претензий нет
| |
|
Haz
|
| |
Пост N: 92
Зарегистрирован: 20.02.11
|
|
Отправлено: 31.08.13 16:50. Заголовок: пора определиться
Андрей, пора определиться ) мне кажется необходимости в этом окне в качестве NOSHOW нет никакой, т.к. никакой фоновой нагрузки оно не несет и используется исключительно для отображения бегунка. Это можно оформить процедурой и рисовать обычное окно в ней при вызове . NOSHOW нужно, к примеру , в окне типа "WAIT ..." в минигуи есть 2 примера использования ( и то не модальные ). Вот тут при старте задачи заявил окно и спрятал, а когда нужно пользователю сказать жди(те) - кинул в окно нужную строку и показал до нужного момента. Можно конечно это окно и бегунком украсить если надо ))) PS. если есть все же желание активировать модальное окно с noshow - я показал где это подправить в минигуи. что касается меня - так давно правлю каждый релиз минигуи под себя т.к. некоторые вещи мне удобнее сделать один раз в библиотеке чем выеживаться в каждом проекте, к примеру это возможность получить имя поля базы из колонки tsbrowse и устанавливать ширину этих колонок через это имя, а не по номеру колонки.
| |
|
Ответов - 301
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|
|