On-line: гостей 3. Всего: 3 [подробнее..]
АвторСообщение
администратор




Пост N: 4905
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.06.15 10:51. Заголовок: Вопросы новичка [MiniGUI]


MAIN окно не получило фокус ввода при запуске , почему ?
Пример самодостаточный.

 
#include "minigui.ch"
REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866, HB_LANG_RUWIN
REQUEST HB_LANG_RUWIN
REQUEST HB_LANG_RU866


Func Main()



DEFINE WINDOW Form_0 AT 321 , 491 WIDTH 558 HEIGHT 175 TITLE "Почему окно не в фокусе при запуске ?" ;
MAIN NOSIZE NOSYSMENU TOPMOST ON INIT {|| MdiMain()}


DEFINE BUTTONex Button_1
ROW 32
COL 424
WIDTH 110
HEIGHT 28
CAPTION "Вход"
ACTION { || ret:=.t., DoMethod("Form_0","Hide") , DoMethod("Form_1","show") }
FONTBOLD .t.
END BUTTONex

DEFINE BUTTONex Button_2
ROW 71
COL 424
CAPTION "Отмена"
ACTION { || DoMethod("Form_0","Release") }
WIDTH 110
HEIGHT 28
FONTBOLD .t.
END BUTTONex


END WINDOW
Form_0.Activate
Form_0.Setfocus
return nil
*****************************
Func Mdimain()


DEFINE WINDOW Form_1 at 0,0 ;
WIDTH 200 HEIGHT 300 TITLE "MDI windows" ;
MDI ;
NOSHOW


END WINDOW

Form_1.Center
Form_1.Activate
Form_0.Release
return



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


администратор




Пост N: 4973
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.15 13:47. Заголовок: думаю вот этот приме..


думаю вот этот примерчик ;)
C:\MiniGUI\SAMPLES\Advanced\ExternalApp_3\demo2.prg

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4974
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.15 14:53. Заголовок: Попробовал сделать и..


Попробовал сделать и не пашет как следует......
Скрытый текст



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




Пост N: 4309
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.06.15 13:55. Заголовок: Dima пишет: MAIN ок..


Dima пишет:

 цитата:
MAIN окно не получило фокус ввода при запуске , почему ?


Можно получить фокус на MAIN окно если в Func Mdimain() сделать так:
Form_1.Center
Activate Window Form_1 NoWait
Form_0.Release



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4979
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.06.15 15:59. Заголовок: Andrey пишет: Activ..


Andrey пишет:

 цитата:
Activate Window Form_1 NoWait


Понял. А если у всех окон программы использовать NOWAIT , тут не может быть каких то подводных камней ?
Как выше Сергей писал ACTIVATE WINDOW без NOWAIT это цикл и живет пока окно не закроется , то есть
из функции в которой я создал окно я не выйду пока окно не будет закрыто.
Да и команды после ACTIVATE WINDOW не сработают пока окно не закроется.


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




Пост N: 4314
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.06.15 18:00. Заголовок: Dima пишет: А если ..


Dima пишет:

 цитата:
А если у всех окон программы использовать NOWAIT , тут не может быть каких то подводных камней ?


А каких ? Даже и не знаю, я сторонник попробовать...
Просто занялся этим прелодером вот и вспомнил, как Григорий показывал в примерах.

А окно можешь убить потом в любое время и в любом месте программ. Очень удобно.

Dima пишет:

 цитата:
1) из функции в которой я создал окно я не выйду пока окно не будет закрыто.
2) Да и команды после ACTIVATE WINDOW не сработают пока окно не закроется.


1) можешь там же в функции закрыть окно - команду ты знаешь.
2) Не пиши код после ACTIVATE WINDOW, сделай все в ON INIT {|| функция1(), функция2(), .... , ThisWindow.Release }

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4986
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.06.15 19:34. Заголовок: Простой вопрос :) Ес..


Простой вопрос :)
Есть статус бар
 
DEFINE STATUSBAR FONT 'Verdana' SIZE 8
STATUSITEM "TEST"
STATUSITEM "123"
DATE
CLOCK
KEYBOARD
END STATUSBAR



Хочу в RUNTIME оставить только один ITEM на всю ширину статус бара.
Затем выставить ITEM по центру (изначально он по левому краю ориентирован)
Сменить фон статус бара , шрифт + его параметры и цвет ITEM

Знаний хватило только на это
Form_0.StatusBar.Item(1) := "Проверка"
Form_0.StatusBar.Width(1) := WidthWindow_MyApl // ширина главного окна
А как быть с остальными хотелками ? ;)


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4987
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.06.15 19:59. Заголовок: Вроде понял ;) Приме..


Вроде понял ;)
Примерно таким макаром
SetProperty( "Form_0", "Statusbar","Item",1,"1111111111111" )


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




Пост N: 4318
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.06.15 20:00. Заголовок: Dima пишет: Form_0...


Dima пишет:

 цитата:
Form_0.StatusBar.Item(1) := "Проверка"


В TBROWSE налетишь на грабли, в StatusBar.Item(1) он выводит свои какие то данные и затирает, то что сам выводишь.
Я от StatusBar отказался, не очень он красивый получается...
Насчет фона и цвета шрифта смотри Пост N: 714 http://clipper.borda.ru/?1-1-0-00000431-000-20-0

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4989
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.06.15 20:11. Заголовок: Andrey пишет: Насче..


Andrey пишет:

 цитата:
Насчет фона и цвета шрифта смотри Пост N: 714


Спасибо но это было до того как в статус бар ввели цвета. Так что сейчас видать все проще. Разбираюсь.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4991
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.06.15 21:41. Заголовок: Вообщем все решил. Ч..


Вообщем все решил.
Через
_HMG_aControlBkColor
_HMG_aControlSpacing
_HMG_aControlFontColor

С одним НО ;) это все пашет только если статуситем заявлен так , как минимум
STATUSITEM "TEST" FONTCOLOR BLACK
вот так фокус не сработает
STATUSITEM "TEST"
Вероятно косяк Минигуи.

PS
С этим Минигуи , не когда даже телик глянуть
5 часов пролетает как 5 минут ))

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




Пост N: 4321
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.06.15 22:06. Заголовок: Dima пишет: С этим ..


Dima пишет:

 цитата:
Вообщем все решил.
Через
_HMG_aControlBkColor
_HMG_aControlSpacing
_HMG_aControlFontColor


Как ? Напиши подробней.

Dima пишет:

 цитата:
С этим Минигуи , не когда даже телик глянуть
5 часов пролетает как 5 минут ))



Аналогично ! Читаешь как детектив и расследуешь - как будет работать или не работать !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4992
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.06.15 22:39. Заголовок: Andrey пишет: Как ?..


Andrey пишет:

 цитата:
Как ? Напиши подробней.


Кушать подано сэр

Во первых статусбар надо объявить примерно так
 
DEFINE STATUSBAR FONT 'Verdana' SIZE 8
STATUSITEM "TEST_SB" FONTCOLOR BLACK // без FONTCOLOR BLACK все что дальше не заработает , хз почему
STATUSITEM ""
DATE //WIDTH 80
CLOCK //WIDTH 90
KEYBOARD
END STATUSBAR


Далее
 
SetProperty( "Form_0", "Statusbar","Width",1,WidthWindow_MyApl )

Тут все ясно , этой командой как бы убиваются все STATUSITEM кроме первого так его расширили по самое не хочу
Команда хороша тем что можно точно указать нужный ITEM , без вопросов.
Дальше все будет в слепую без четкого указания ITEM
 
IF ( h := MyGetControlHandle('StatusBar' ) ) > 0 // опа а тут сразу вопрос , 'StatusBar' может жить и в другом окне
MySetSb( h ) // и как их отличать ? У меня живет только в главном , поэтому ладно..
ENDIF



Далее ставим новые фичи на STATUSITEM но в слепую без указания ITEM , как это сделать нормально не нашел. Но в случае
если видимый ITEM только один , это работает.
 
FUNC MySetSb( ParentHandle )
LOCAL h, i

FOR EACH h In _HMG_aControlContainerHandle
i := h:__enumIndex()
IF _HMG_aControlType [ i ] == "ITEMMESSAGE" .AND. h == ParentHandle
_HMG_aControlCaption [ i ]:="TEST-2" // Caption
_HMG_aControlBkColor [ i ]:= nRGB2Arr(RGB(159, 191, 236) ) // цвет заднего фона
_HMG_aControlSpacing [ i ]:=1 // по центру
_HMG_aControlFontColor [ i ]:=WHITE // цвет шрифта
ENDIF
NEXT

RETURN Nil



Поправка: я допер как делать не в слепую.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4993
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.06.15 08:14. Заголовок: Dima пишет: Поправк..


Dima пишет:

 цитата:
Поправка: я допер как делать не в слепую.


Итак в начале
 
SetProperty( "Form_0", "Statusbar","Width",1,WidthWindow_MyApl )

IF ( h := MyGetControlHandle('StatusBar',"Form_0" ) ) > 0 // находим хендл StatusBar на форме Form_0
MySetSb( h )
ENDIF



Функция MyGetControlHandle
 
FUNC MyGetControlHandle( cControlName ,cFormName)
Local Hc:=0
Local Hcf:=GetControlHandle ( cControlName ,cFormName )
Local Elem
Local i
for each Elem in _HMG_aControlNames

i:=Elem:__enumindex()

if Elem==cControlName

if _HMG_aControlHandles[ i ]==Hcf
Hc:=_HMG_aControlHandles[ i ]
endif

endif

next
RETURN Hc


Дальше красим так , потому что из SetProperty добраться к цветам
и ALIGN не удалось (может кто подскажет как....)
Было бы логичным добираться к Property ITEM через SetProperty и не
городить весь этот огород , ведь часть Property все же доступна из
SetProperty.
 
FUNC MySetSb( ParentHandle )
LOCAL h, i

FOR EACH h In _HMG_aControlContainerHandle
i := h:__enumIndex()
IF _HMG_aControlType [ i ] == "ITEMMESSAGE" .AND. h == ParentHandle
_HMG_aControlCaption [ i ]:="Всем привет ;)"
_HMG_aControlBkColor [ i ]:= nRGB2Arr(RGB(159, 191, 236) )
_HMG_aControlSpacing [ i ]:=1 // по центру
_HMG_aControlFontColor [ i ]:=YELLOW
ENDIF
NEXT

RETURN Nil


Функция MySetSb работает по умолчанию с ITEM 1 , как добраться к другим не понял.
Может кто подскажет как....

Полистал все елементы _HMG_SYSDATA (их больше 400)
Обратил внимание на 135 и 136 и как обратится к нужному ITEM статусбара понятно.
Вот только сдвиг там идет на 2. То есть если надо править ITEM 1 , то править нужно
3 элемент нужного массива.
Так все больше "флудить" не буду раз это ни кому не надо и ни кто не испытывает желание
подсказать (помочь).

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 672
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.06.15 11:16. Заголовок: Dima Вернусь к вопр..


Dima
Вернусь к вопросу с Modal на Mdi (если не выкинул еще)
h_windows.prg в _DefineModalWindow (...) есть такое
IF _HMG_InplaceParentHandle <> 0
Parent := _hmg_InplaceParentHandle
ELSEIF ! _HMG_BeginWindowMDIActive // срабатывает этот кусок кода
Parent := _hmg_MainHandle // после Save_Rest_HMG()
ENDIF

если не трудно проверь это на модал окне
hParent := _HMG_InplaceParentHandle
aHmg := Save_Rest_HMG()
_HMG_InplaceParentHandle := GetActiveMdiHandle()
... здесь модал окно
Save_Rest_HMG(aHmg)
_HMG_InplaceParentHandle := hParent

измениться ли поведение модал ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4994
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.06.15 11:22. Заголовок: SergKis пишет: (есл..


SergKis пишет:

 цитата:
(если не выкинул еще)


Похоронил всё MDI

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 673
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.06.15 11:26. Заголовок: Dima пишет:Дальше кр..


Dima пишет:
 цитата:
Дальше красим так , потому что из SetProperty добраться к цветам


нашел
HB_FUNC( SETBKCOLOR )
{
hb_retnl( ( ULONG ) SetBkColor( ( HDC ) hb_parnl( 1 ), ( COLORREF ) RGB( hb_parni( 2 ), hb_parni( 3 ), hb_parni( 4 ) ) ) );
}
т.е. по идее если знаешь handle item StatusBar, то ...
для align используем свою
 
// BAA
HB_FUNC( CONTROLALIGN )
{
HWND hWnd = ( HWND ) hb_parnl(1);

LONG nStyle, nAlign=0, nAlignNew, nAlignMsk;

nAlignMsk = ES_LEFT | ES_CENTER | ES_RIGHT; // 0x0003

if( IsWindow(hWnd) ){

nStyle = GetWindowLong(hWnd, GWL_STYLE);
nAlign = nAlignMsk & nStyle;

if( HB_ISNUM(2) ){

nAlignNew = hb_parni(2);
nAlignNew &= nAlignMsk; // Что бы небыло лишнего

nStyle &= ( ~nAlignMsk ); // Снять
nStyle |= nAlignNew; // Поставить

// Только при прижатии влево
// Текст не сворачивается а обрезается
// Делается замена табуляции на пробелы

if(nAlignNew==ES_LEFT ) nStyle |= SS_LEFTNOWORDWRAP ;
else nStyle &= ( ~SS_LEFTNOWORDWRAP );

SetWindowLong(hWnd, GWL_STYLE, nStyle);
}
}

hb_retni( nAlign );
}

ControlAlign(hWnd) - читает значение
ControlAlign(hWnd, nAlign) - ставит

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4995
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.06.15 11:28. Заголовок: SergKis Спасибо...


SergKis
Спасибо.
Пишу пока свою , закончу , выложу.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 674
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.06.15 11:29. Заголовок: Dima пишет:Похоронил..


Dima пишет:
 цитата:
Похоронил всё MDI


Жаль, возможно это решило бы проблему modal

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4996
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.06.15 15:44. Заголовок: Снова бяка. Толи у м..


Снова бяка. Толи у меня руки не оттуда растут или косячок в Минигуи.
 

#include "minigui.ch"

Function Main()

DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 500 ;
HEIGHT 200 ;
MAIN;
TITLE 'Test'


DEFINE BUTTONEX Button_1
ROW 20
COL 70
WIDTH 110
HEIGHT 30
CAPTION "Change With SB"
ACTION { || SetProperty("Form_1","StatusBar","Width",1,;
if( GetProperty("Form_1","StatusBar","Width",1)==50,GetProperty( "Form_1","Width"),50)) }
END BUTTONEX

DEFINE BUTTONEX Button_2
ROW 70
COL 70
WIDTH 110
HEIGHT 30
CAPTION "New Windows"
ACTION { || New_win() }
END BUTTONEX

DEFINE STATUSBAR OF Form_1
STATUSITEM "Test1" WIDTH 50 FONTCOLOR BLACK
DATE
CLOCK
KEYBOARD
END STATUSBAR


END WINDOW

CENTER WINDOW Form_1

ACTIVATE WINDOW Form_1

Return Nil
*********************
Func New_Win()
DEFINE WINDOW Form_2 ;
WIDTH 800 ;
HEIGHT 100 ;
CHILD;
TITLE 'Newwin'
DEFINE STATUSBAR OF Form_2
STATUSITEM "Test2" WIDTH 50 FONTCOLOR BLACK
DATE
CLOCK
KEYBOARD
END STATUSBAR



END WINDOW
Form_2.Center
ACTIVATE WINDOW Form_2
return



Топчем кнопку Change With SB , ширина 1 итема StatusBar меняется
Cтоит вызвать окно по кнопке New Windows и закрыть его , то ACTION в кнопке Change With SB
уже не фурычит , точнее не пашет SetProperty для StatusBar
Более того если открыть Child окно и не закрывая его переключится на главное
и потыкать кнопку Change With SB то все начинает меняться в StatusBar CHILD окна ))
Оно лечится ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 766
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.06.15 17:25. Заголовок: Dima пишет: Оно леч..


Dima пишет:

 цитата:
Оно лечится ?


Благодарю за наводку - это мой косяк

Поправил следующую процедуру
*-----------------------------------------------------------------------------* 
PROCEDURE _SetStatusWidth ( ParentForm , Item , Size )
*-----------------------------------------------------------------------------*
LOCAL nItem As Numeric, nSize As Numeric
LOCAL FormHandle, aWidths, h := GetControlHandle ( "StatusBar", ParentForm )

Assign nItem := Item
Assign nSize := Size

FormHandle := GetFormHandle ( ParentForm )
aWidths := _GetStatusItemWidth ( FormHandle )

_SetStatusItemWidth ( nItem, nSize, FormHandle )

aWidths [nItem] := nSize
SetStatusBarSize ( h, aWidths )

RefreshItemBar ( h, _GetStatusItemWidth ( FormHandle, 1 ) )

RETURN

Теперь Ваш пример работает нормально

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 201 , стр: 1 2 3 4 5 6 7 8 9 10 11 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 381
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет