Форум » GUI » Примеры из Минигуи -ошибки, вопросы..... » Ответить

Примеры из Минигуи -ошибки, вопросы.....

Andrey: Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \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

Andrey: Avf пишет: Можно, например, так while .t. Нельзя так. Это на форме редактируется.

SergKis: Andrey пишет:Подскажите, как можно проверить ввод 2-х паролей Примерно так: [pre2] 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 [/pre2]

Andrey: SergKis пишет: Примерно так: Спасибо БОЛЬШОЕ ! Очень подробно и с разъяснениями !!! Просто супер !


Andrey: Не нравиться порядок написания программ в МиниГуи... уж очень растянуто получается... Подскажите можно ли как то уменьшить или изменить это ? Вот например: 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: И еще вопрос вдогонку к предыдущему сообщению. Видимость объектов на форме какая (допустим Label_1 )? Это Public переменная или другая ? В любом месте только одного модуля PRG можно обращаться к Form_1.Label_1.Value или в других модулях PRG тоже можно обращаться к объектам объявленных ранее ?

Andrey: Подскажите пожалуйста, как в GRID'e можно сделать заголовки в 2-3 строчки ? HEADERS { '№;№','1-строка;2-строка'..... } знак ";" как в TBROWSE() для Харбора не прокатывает... Пробовал { '№'+CHR(13)+CHR(10)+'№', '1-строка'+CHR(13)+CHR(10)+'2-строка' ... } тоже не работает....

SergKis: Andrey пишет:Видимость объектов ... Пока существует окно (не разрушено), существуют и контролы его и они всегда доступны. Хранятся данные в переменных _HMG_... (см. i_var.ch). [pre2]Как заполняются данные на окно в переменных _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 [/pre2]

Andrey: SergKis пишет: Пока существует окно (не разрушено), существуют и контролы его и они всегда доступны. Т.е. доступны в любых PRG файлах данной программы, как Public переменные ?

SergKis: Andrey пишет:как Public переменные ? Да как Public переменные. См. h_init.prg: Procedure Init ... Public _HMG_SYSDATA [ _HMG_SYSDATA_SIZE ] ... Повторю пример функции (вчера пропустил пропажу [ i ] и ошибку): [pre2] 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 [/pre2]

Andrey: Подскажите, как можно на форме сделать мигающую надпись типа "Выбор здесь !" ? MiniGUI\SAMPLES\BASIC\BLINK - не совсем красивый... цветами бы разными перерисовывался... Или периодически всплывающее окошко с интервалом 5-10 сек. ?

SergKis: Andrey пишет: как можно на форме сделать мигающую надпись Примерно так: [pre2] 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 [/pre2]

Andrey: 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: Andrey пишет:Что-то медленно мигает Так INTERVAL 2000 - это две секунды (1000 * 2), надо задать как надо. 2 цвета всего Можно сделать: [pre2] 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 или придумать что то еще. [/pre2]

Andrey: 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: Andrey пишет:взял цвета с i_color.ch ОТЛИЧНО !!! А цвета взять с MS Paint - это дополнение к i_color.ch (если нужны разнообразные оттенки). Используя TIMER, надо приостанавливать его выполнение в вызовах своих функций для блокирования повторного выполнения TIMER (это особенно важно при дисковых операциях). Пример: Function MyWndTimer() SetProperty("MyWnd", "MyWndTimer", "Enabled", .F.) ... SetProperty("MyWnd", "MyWndTimer", "Enabled", .T.) Return

Andrey: SergKis пишет: Используя TIMER, надо приостанавливать его выполнение в вызовах своих функций для блокирования повторного выполнения TIMER (это особенно важно при дисковых операциях) Спасибо большое ! Я бы не додумался ...

Andrey: А как реализовать вот такую трехцветную форму ? Это еще при том что на ней будут кнопки, списки, лабел и т.д. Нашел вот только это: 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: Andrey пишет:А как реализовать вот такую трехцветную форму Как-то так: [pre] #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 ); } */ [/pre]

SergKis: Andrey пишет:Я бы не додумался ... В MiniGUI.chm есть раздел Timer (Controls Command) и в конце описания (и так практически везде) есть: [pre2] PROPERTIES (свойства): // GetProperty(...) или SetProperty(...) используем ... EVENTS (события): // вызываются сами в определенных местах ... METHODS (методы): // DoMethod(...) используем ... [/pre2] Здесь смотрим, что есть в компонентах и пляшем отсюда ...

Andrey: Спасибо БОЛЬШОЕ ! Программа заработала.. А как бы сделать динамически эту заливку ? А то когда форму раздвигаешь, то белый цвет появляется ....



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