On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
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.



Спасибо: 0 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]


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 клиентской области контрола, ... и можно строить относительные координаты, для используемых контролов, в определенной плоскости и при необходимости изменения дизайна окна - достаточно переставлять плоскости, а не контролы.



Спасибо: 0 
Профиль
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 );
...
}


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 442
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.01.13 11:58. Заголовок: SergKis пишет: int ..


SergKis пишет:

 цитата:
int Style = WS_CHILD; // | SS_NOTIFY убрали


Благодарю за подсказку!
Поправил для новой сборки, которая выйдет завтра

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 2580
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.01.13 12:12. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Поправил для новой сборки, которая выйдет завтра


Ура ! Наконец то...
А то уже вторую неделю бьюсь с этим...

Вот экран задачи сразу после запуска:


А вот экран после сброса на панель задач:




Спасибо: 0 
Профиль
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.


Спасибо: 0 
Профиль
gustow
постоянный участник




Пост N: 346
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 23.01.13 10:46. Заголовок: SergKis, хммм... опя..


SergKis, хммм... опять употребилось где-то "[ i ]", написанное БЕЗ пробелов (похоже, в конце IF после первого CASE). Извиняйте за "граммарнацизм" ;) просто иногда трудновато понять, "что сказать-то этим хотел?.." :)

Спасибо: 0 
Профиль
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 - дело Григория.



Спасибо: 0 
Профиль
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 стиль или стиль ( одновременно менять - срабатывал только стиль ).
Примеры:Скрытый текст



Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 2589
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.01.13 21:59. Заголовок: SergKis пишет: Свой..


SergKis пишет:

 цитата:
Свойства есть, надо использовать:



Супер ! Спасибо БОЛЬШОЕ !

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 2590
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.13 13:42. Заголовок: SergKis опять у меня..


SergKis опять у меня проблема с инициализацией до создания окна...
Я сделал пример (еще не отладил), подправьте его пожалуйста.
Скрытый текст


И хотелось бы избавиться от двойного дублирования массивов:
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(), если это возможно....

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 104
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.01.13 21:14. Заголовок: Andrey пишет:опять у..


Andrey пишет:
 цитата:
опять у меня проблема с инициализацией до создания окна...


Ошибочное утверждение. Всего навсего :
MySayColorLabel(aLabel1,aColors1) вызов, а
Function MySayColorLabel(cWnd,aLabel,aColor) - параметров 3 однако.

 цитата:
И хотелось бы избавиться от двойного дублирования массивов:


Делаем как и раньше в Clipper STATIC переменные. Скрытый текст


Спасибо: 0 
Профиль
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



Спасибо: 0 
Профиль
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



Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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 строчку !


Это я не понял - в какой функции ?

Спасибо: 0 
Профиль
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 !!!

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 109
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.01.13 09:32. Заголовок: Andrey пишет:Это про..


Andrey пишет:
 цитата:
Это просто 11 строка в файле, с самого начала PRG !!!


Я совсем туплю - как она хоть выглядит ?
В
 цитата:
Почти готовый пример

это комментарий.
В предыдущем скрытом тексте это #define ...


Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 2596
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.01.13 12:32. Заголовок: SergKis пишет: Я со..


SergKis пишет:

 цитата:
Я совсем туплю - как она хоть выглядит ?


* Copyright ..... SergKis <????????>
Ваши данные нужны.

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 110
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.01.13 19:11. Заголовок: Andrey пишет:Ваши да..


Andrey пишет:
 цитата:
Ваши данные нужны


Смело удаляйте эту строку !

Спасибо: 0 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 170
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет