On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 6069
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.10.18 17:25. Заголовок: MsgInfo(), MsgStop(), MsgExclamation(), MsgDebug()


Уже скоро 2019 год будет, а эти функции до сих пор неизменны.
Экраны большие у пользователей уже давно.
Замучили юзера вопросом, а побольше шрифт можно сделать для этих окон ?
A то читать приходиться через лупу.
Настолько мелкий шрифт в этих сообщениях для больших экранов.

Можно ли установить для этих окон при запуске программы
РАЗМЕР фонта, ну и до кучи сам фонт ?

Типа:
SET MSGFUNCT FONT TO cFont, nFontSize  


Как есть команда:
SET FONT TO cFont, nFontSize 

Ну и до кучи задать другой размер иконки и картинки:
SET MSGFUNCT SIZE 256  // или 48, 64, 72, 96, 128 
SET MSGINFO SIZE 64 ICO "INFO64.ICO"

Тогда за иконку отвечать будет сам программист.
Нет иконки в ресурсах, и нет в окошке иконки.

И цвета окошек тоже:
SET MSGINFO  BACKCOLOR aDim1 FONTCOLOR aDim2 
SET MSGSTOP BACKCOLOR aDim1 FONTCOLOR aDim2
SET MSGEXCL BACKCOLOR aDim1 FONTCOLOR aDim2
SET MSGDEBUG BACKCOLOR aDim1 FONTCOLOR aDim2

Если это нельзя сделать для этих функций и не хочется увеличивать размер ресурсов
для текущей версии МиниГуи, то хотелось бы иметь дополнительную библиотеку
MiniguiExt.lib и файл ресурсов miniguiExt.res

Т.е. сделать доп.функции:
Msg2Info(), Msg2Stop(), Msg2Exclamation(), Msg2Debug() 

Оставить обычный синтаксис и типа такого:
SET MSG2FUNCT FONT TO cFont, nFontSize   
SET MS2GINFO SIZE 64 ICO "INFO64.ICO"

Msg2Info( cMsg , "Инфо", ......, cFont, nFontSize, 64, "INFO64.ICO", aDim1, aDim2 )

------------------------------------------------------------------
Надоели танцы с бубнами, чтобы сменить иконку в этих функциях !!!
Сначала в ресурсном файле объявить:
#define MSGINFO 1005
Потом в prg-модуле нужно ставить:
#define MSGINFO 1005
и ещё потом уже где тебе нужно:
MsgInfo( cMsg , "Инфо", MSGINFO, .F. )

А по простому нельзя сделать ?

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


постоянный участник


Пост N: 1477
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 11.10.18 17:35. Заголовок: Напиши свою функцию ..


Напиши свою функцию да и всё.

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




Пост N: 6070
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.10.18 18:04. Заголовок: PSP пишет: Напиши с..


PSP пишет:

 цитата:
Напиши свою функцию да и всё.


Да я уже пробовал, не особо красиво получается...
Тем более я думаю это не только у меня такие придирчивые пользователи.
Расширение функционала МиниГуи тоже большой плюс.

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




Пост N: 3807
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.10.18 08:00. Заголовок: Так это обертка для ..


Так это обертка для функции winapi
В winapi нет такого функционала. Чтобы его получить, надо делать другую реализацию.
Думается, что многие пользователи захотят использовать именно стандартные средства winapi, так что лучше это сделать отдельными функциями.
Ну а что там такого военного ? Модальное окно с текстом и кнопками, больше ничего.

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




Пост N: 1371
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.10.18 09:33. Заголовок: Pasha пишет: Модаль..


Pasha пишет:

 цитата:
Модальное окно с текстом и кнопками


Тем более, что в ядре библиотеки уже есть Клиппер-совместимая по синтаксису и Вин7-10 подобная по виду функция

 цитата:
HMG_Alert( cText, [<aOptions>], [<cTitle>], [<nType>] )


Пример использования см. в папке \samples\Basic\WALERT_2

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




Пост N: 6073
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.10.18 19:18. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Пример использования см. в папке \samples\Basic\WALERT_2



А можно в эту функцию добавить ещё один параметр, отвечающий за иконку из ресурсов ?
Было бы здорово !
И размеры фонта как можно регулировать для этой функции ?
Если нет возможности, то можно ещё добавить параметр фонта ?

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




Пост N: 1377
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.10.18 14:49. Заголовок: Andrey пишет: разме..


Andrey пишет:

 цитата:
размеры фонта как можно регулировать для этой функции ?


После изменений, предложенных Сергеем, это будет возможно, если определить свой шрифт DlgFont до вызова функции HMG_Alert()
Такое изменение шрифта будет доступно в следующей сборке библиотеки

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




Пост N: 2097
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.10.18 15:07. Заголовок: Andrey пишет А можно..


Andrey пишет
 цитата:
А можно в эту функцию добавить ещё один параметр, отвечающий за иконку из ресурсов ?

 
1.
В MiniGui\RESORCES есть файлы ico с именами aIcon := { "ALERT", "QUESTION", "INFO", "STOP" }, замени их своими.
2.
FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile )
LOCAL aIcon := { "ALERT", "QUESTION", "INFO", "STOP" }
// LOCAL cIcoFile

LOCAL nLineas
...
AEval( aIcon, {|x, i| aIcon[ i ] := "ZZZ_B_" + x } )

DEFAULT cIcoFile := aIcon[ nType ]

IF ! _IsControlDefined( "DlgFont", "Main" )
...

Иконки должны быть 32x32, так зашито в окно

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




Пост N: 1379
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.10.18 16:52. Заголовок: SergKis пишет: FUNC..


SergKis пишет:

 цитата:
FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile )


Добавил новый параметр в эту функцию.
Спасибо за помощь

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




Пост N: 6076
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.10.18 20:14. Заголовок: SergKis пишет: Икон..


SergKis пишет:

 цитата:
Иконки должны быть 32x32, так зашито в окно


Ну что за невезуха, хотелось бы размер иконок 48 или 64х64 хотя бы.

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




Пост N: 2100
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.10.18 20:48. Заголовок: Andrey пишет Ну что ..


Andrey пишет
 цитата:
Ну что за невезуха


Так текст ф-ии есть, поправь, отладку сделай на разные размеры.
Кто мешает ?

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




Пост N: 1380
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.10.18 22:06. Заголовок: Andrey пишет: разме..


Andrey пишет:

 цитата:
размер иконок 48 или 64х64 хотя бы


Добавил в функцию еще один параметр nIcoSize.

Пример вызова:

 цитата:
DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 18
HMG_Alert( "MessageBox with user's defined Font and Icon", NIL, "Warning", NIL, "demo.ico", 64 )
RELEASE FONT DlgFont



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




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


gfilatov2002 пишет:

 цитата:
Добавил в функцию еще один параметр nIcoSize.


Ура !
Спасибо большое !

Т.е. если мне всегда нужен постоянный размер фонта в HMG_Alert(), я в MAIN определяю
DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 18
и больше нигде не забочусь об этом ? Правильно ?

DlgFont - у меня больше ни где не присутствует.

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




Пост N: 1381
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.10.18 15:07. Заголовок: Andrey пишет: я в M..


Andrey пишет:

 цитата:
я в MAIN определяю
DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 18
и больше нигде не забочусь об этом ?


Да, теперь так можно сделать...

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




Пост N: 6078
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.10.18 19:27. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Да, теперь так можно сделать...



Спасибо !
Жду с нетерпением новую версию !

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




Пост N: 1382
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.10.18 20:10. Заголовок: Andrey пишет: Жду с..


Andrey пишет:

 цитата:
Жду с нетерпением новую версию


Осталось потерпеть всего одну неделю

Кстати, мой тестовый пример для проверки этой функции
#include "hmg.ch" 

ANNOUNCE RDDSYS

PROCEDURE MAIN

SET WINDOW MAIN OFF

DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 12

HMG_Alert( "MessageBox Stop", NIL, "Stop!", ICON_STOP )

HMG_Alert( "MessageBox Alert", NIL, "Alert" )

HMG_Alert( "MessageBox with the user's defined Font and Icon", NIL, "Warning", NIL, "demo.ico" )

RELEASE FONT DlgFont

DEFINE FONT DlgFont FONTNAME "Verdana" SIZE 18

HMG_Alert( "MessageBox with the Big Font and Icon Size", NIL, NIL, NIL, "demo.ico", 64 )

HMG_Alert( ;
HMG_Alert( "Test Question;Second Line", {"&Yes","&No","Con&tinue","&Cancel"}, "Please, Select", NIL, "demo.ico", 64 ), ;
3 /* timeout in the seconds */, "Information", ICON_INFORMATION )

RETURN
работает нормально

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





Пост N: 63
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 25.10.18 07:36. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
работает нормально





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




Пост N: 1383
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.10.18 09:37. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
работает нормально


gfilatov2002 пишет:

 цитата:
Осталось потерпеть всего одну неделю




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




Пост N: 6102
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.10.18 13:25. Заголовок: gfilatov2002 Можно ..


gfilatov2002
Можно кнопочки по высоте сдела раза в ТРИ больше ?
Пока юзер по кнопке попадёт, выслушаешь о себе много чего....
И ему без разницы, что я пишу на готовой системе, главное чтобы он по кнопке попадал.
Ну и заодно бы смену фона выбранной кнопки сделать, всего несколько строк:
 
NOHOTLIGHT NOXPSTYLE HANDCURSOR ;
ON MOUSEHOVER ( This.Backcolor := BLACK , This.Fontcolor := YELLOW ) ;
ON MOUSELEAVE ( This.Backcolor := ???? , This.Fontcolor := ????? ) ;


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




Пост N: 6103
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.10.18 16:39. Заголовок: Перешёл на новую вер..


Перешёл на новую версию МиниГуи.
Теперь пример Tsb_menu слетает вот на этой строке:
   DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 12 

Первый раз срабатывает, на второй раз, вот такая ошибка:
Error MGERROR/0 Font: DlgFont Of Main Already defined. Program terminated.
Called from MSGMINIGUIERROR(99) in module: h_error.prg
Called from _DEFINEFONT(61) in module: h_font.prg
Called from RUN_TEST1(570) in module: Tsb_menu.prg

Почему до этого работало, а сейчас нет ?
Я знаю как исключить эту ошибку, но просто понять почему это происходит.

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




Пост N: 1392
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 31.10.18 18:21. Заголовок: Andrey пишет: Почем..


Andrey пишет:

 цитата:
Почему до этого работало, а сейчас нет ?


Видимо новая версия более строга к ошибкам разработчика , Григорий ее постоянно оптимизирует , заставляя внимательнее писать код.
Что само по себе радует.
Andrey пишет:

 цитата:
Я знаю как исключить эту ошибку, но просто понять почему это происходит.


Тебе помогли твой же косяк найти Не ясно как он бы аукнулся в дальнейшем.

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




Пост N: 6187
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.03.19 13:54. Заголовок: Возвращаюсь опять к ..


Возвращаюсь опять к HMG_Alert()
Юзера жалуются, кнопка узкая, попасть плохо....

Григорий, можно кнопочки по высоте сделать раза в ДВА-ТРИ больше ?
Или задавать в доп.параметрах высоту кнопки ?

Заодно в параметры добавить передачу цвета кнопки, чтобы различать можно было - юзеру понятней будет.
Ну и заодно бы HANDCURSOR на кнопку.

Я понимаю, что можно самому сделать свою эту функцию, но стандартную осталось доделать чуть-чуть.
Заранее спасибо !

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




Пост N: 1465
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.03.19 15:42. Заголовок: Andrey пишет: можно..


Andrey пишет:

 цитата:
можно кнопочки по высоте сделать раза в ДВА-ТРИ больше ?


Высота кнопок определяется размером шрифта DlgFont.
Например, можно определить

 цитата:
DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 18



Andrey пишет:

 цитата:
добавить передачу цвета кнопки...
HANDCURSOR на кнопку.


Эти фичи имеет только ButtonEX, а в функции HMG_Alert() используется обычная кнопка Button
для максимального копирования стандартных инфо-функций системы.

Andrey пишет:

 цитата:
можно самому сделать свою эту функцию


Да, это единственный выход

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




Пост N: 6188
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.03.19 15:57. Заголовок: Григорий ! А может в..


Григорий !
А может вы добавите новую тогда функцию HMG_Alert2() с учётом новых пожеланий...

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




Пост N: 1466
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.03.19 16:44. Заголовок: Andrey пишет: добав..


Andrey пишет:

 цитата:
добавите новую тогда функцию HMG_Alert2() с учётом новых пожеланий


Написать такую функцию на основе HMG_Alert() не проблема, но зачем тогда две похожие функции в ядре библиотеки
Поэтому я и предложил "самому сделать свою эту функцию"

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




Пост N: 6189
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.03.19 17:27. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Написать такую функцию на основе HMG_Alert() не проблема, но зачем тогда две похожие функции в ядре библиотеки


Ну может тогда оставить и одну функцию, но сделать флаг переключения на другой тип кнопок - BUTTONEX.
Как это реализовать, не знаю. Вам видней.
Если увеличить высоту шрифта, то сообщение будет ОЧЕНЬ большим.
Вот и нужно из за этого отдельное задание высоты кнопок. Юзеру хватает высоты 50-70 пикс.

gfilatov2002 пишет:

 цитата:
Поэтому я и предложил "самому сделать свою эту функцию"


Да я исходник смотрел, куча всего, некоторые моменты вообще не понимаю...

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




Пост N: 1467
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.03.19 17:51. Заголовок: Andrey пишет: Как э..


Andrey пишет:

 цитата:
Как это реализовать, не знаю


Понял, постараюсь помочь.
Но попрошу подготовить картинку, как должна выглядеть эта функция га экране

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




Пост N: 6190
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.03.19 18:22. Заголовок: FUNCTION HMG_Alert( ..


FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile, nIcoSize, nButtonExHeight, aButtonExColor )
где nButtonExHeight - высота кнопки, aButtonExColor - цвета кнопок, например { LGREEN, RED }
        DEFINE FONT DlgFont FONTNAME "Verdana" SIZE 16 
nK := HMG_Alert( cMsg, {"&Поиск","&Отмена"}, "Внимание!", Nil, "iExclam64", 64 )

Вот цветные кнопки как на картинке нужно (серые это стандартные кнопки):


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




Пост N: 2269
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.03.19 18:22. Заголовок: gfilatov2002 пишет Н..


gfilatov2002 пишет
 цитата:
Но попрошу подготовить картинку, как должна выглядеть эта функция га экране


Может, достаточно, курсора пр hover, а в параметрах добавить bInit
 
FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile, nIcoSize, bInit )
...
DEFAULT aOptions TO { "&OK" }
DEFAULT bInit TO {|| NIL }

...
ACTIVATE WINDOW oDlg ON INIT ( FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize ), EVal( bInit ) )
...
и меняй, в нем размеры как хочешь. Имена кнопок известны, окна тоже.



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


Пост N: 815
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 19.03.19 18:32. Заголовок: Андрей ! У твоих Юзе..


Андрей ! У твоих Юзеров явные проблемы со зрением. Тебя тяготит к большим кнопкам, шрифтам и т.п.

 цитата:
Юзера жалуются, кнопка узкая, попасть плохо.





 цитата:
HMG_Alert( "MessageBox with the Big Font and Icon Size", NIL, NIL, NIL, "demo.ico", 64 )



Смотрится не АЙС. Все дополнительные параметры желательно замыкающими в вызове параметров и без NIL.
Если параметр не последний, отделить просто запятой - " , ".
Как , к примеру, в Substr(Text,2,4) и Substr(Text,2). В первом случае выделяем 4 символа, во втором - все, начиная со второго.
Иначе, подозреваю, что этими функциями будет пользоваться только Андрей.

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




Пост N: 2270
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.03.19 18:48. Заголовок: Vlad04 пишет У твоих..


Vlad04 пишет
 цитата:
У твоих Юзеров явные проблемы со зрением


Вообще то, таких много. И что им не работать ?
У нас есть клиентка делает размеры окна, где половина\треть за пределами экрана (механизм Dlu2Pixel).
Сидит и по телефону отвечает данным, все видит. когда нет такой необходимости вкл. нормальный режим работы.

 цитата:
Иначе, подозреваю, что этими функциями будет пользоваться только Андрей


#xtranslate никто не отменял. Можно сделать красивые вызовы на базе hmg_Alert(...) без лишних NIL и запятых

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


Пост N: 816
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 19.03.19 18:59. Заголовок: Сейчас в функции HMG..


Сейчас в функции HMG_Alert кнопки в зависимости от длины надписей на кнопках НЕ центрируются

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




Пост N: 2271
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.03.19 19:09. Заголовок: Vlad04 Андрей, прав..


Vlad04
Андрей, правильно предложил (согласен с ним), кнопки сделать BUTTONEX + HANDCURSOR все остальное можно доделать в bInit.
И даже, если не менять, оставить BUTTON, в bInit BUTTON можно убрать и создать BUTTONEX на их месте нужных размеров, ну и размер окна поправить если что.

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


Пост N: 817
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 19.03.19 21:10. Заголовок: SergKis Вообще то, ..


SergKis

 цитата:
Вообще то, таких много. И что им не работать ?


Но зачем так, пусть работают.
У Windows есть настройки и экрана, и шрифтов и лупа увеличительная.
А если думать о масштабируемости элементов, то имеет смысл делать это для всей программы.
В 1 с есть такая возможность индивидуально настроить масштаб.
А с #xtranslate лучше наоборот- по умолчанию в функции ничего лишнего и #xtranslate нет.
А подобные формочки типа Alert я рисую сам как хочу, помещаю в библиотеку и никаких проблем.

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




Пост N: 1468
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.03.19 21:21. Заголовок: Andrey пишет: цветн..


Andrey пишет:

 цитата:
цветные кнопки как на картинке нужно


Вот что у меня получилось

Вызываю так:
PROCEDURE MAIN 

SET WINDOW MAIN OFF

DEFINE FONT DlgFont FONTNAME "Verdana" SIZE 16

cMsg := "Первая строка" + CRLF + CRLF + "Вторая строка" + CRLF + Repl( "-._.", 15 ) + CRLF + CRLF + "Четвертая строка"

nK := HMG_Alert( cMsg, {"&Поиск","&Отмена"}, "Внимание!", Nil, "alert.ico", 64, {GREEN,RED} )

RETURN

P.S. HANDCURSOR тоже не забыл добавить...

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




Пост N: 2272
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.03.19 21:47. Заголовок: gfilatov2002 пишет В..


gfilatov2002 пишет
 цитата:
Вот что у меня получилось


Если управлять раскраской кнопок, то просится backcolor окна и label как минимум, т.е. еще параметр
Еще, Андрей, любит применять gradient ... + текст в две строки ...
И скажет завтра
 цитата:
Я понимаю, что можно самому сделать свою эту функцию, но стандартную осталось доделать чуть-чуть.



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




Пост N: 2273
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.03.19 22:04. Заголовок: Vlad04 пишет У Windo..


Vlad04 пишет
 цитата:
У Windows есть настройки и экрана, и шрифтов и лупа увеличительная.


На чужих компах (это все), настроишь под себя (если дадут доступ), развалятся чужие проги. Так что про это лучше забыть

 цитата:
А если думать о масштабируемости элементов, то имеет смысл делать это для всей программы.
В 1 с есть такая возможность индивидуально настроить масштаб.


Dlu2Pixel именно так и делает, хотя сделать доп. режим для любого окна никто не мешает.
Разговор о hb, а не о 1C.

 цитата:
А с #xtranslate лучше наоборот- по умолчанию в функции ничего лишнего и #xtranslate нет.


Можно и без #xtranslate, тогда как h_msgbox.prg. Сверху делаем новые AlertOk(), AlertYesNo(), ... , но внутри hmg_Alert()

 цитата:
А подобные формочки типа Alert я рисую сам как хочу, помещаю в библиотеку и никаких проблем.


Со своими формочками никто не спорит, а с системной hmg_Alert(), выкидывать или модифицировать (закрыв ~50-70% сообщений) ?

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




Пост N: 6191
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.03.19 03:05. Заголовок: Vlad04 пишет: У тво..


Vlad04 пишет:

 цитата:
У твоих Юзеров явные проблемы со зрением. Тебя тяготит к большим кнопкам, шрифтам и т.п. цитата:


Да меня не тяготит, это юзеров моих тяготит.

Vlad04 пишет:

 цитата:
Смотрится не АЙС.


Всё АЙС на больших экранах. Давно уже большие экраны у юзеров, и стонут давно уже.

SergKis пишет:

 цитата:
Еще, Андрей, любит применять gradient ... + текст в две строки ...


Нет, здесь не буду извращаться. Хватит минимального сообщения.

SergKis пишет:

 цитата:
а с системной hmg_Alert(), выкидывать или модифицировать (закрыв ~50-70% сообщений)


Да я все 100% сообщений в программе на эту функцию переделаю и забуду об них.

gfilatov2002 пишет:

 цитата:
nK := HMG_Alert( cMsg, {"&Поиск","&Отмена"}, "Внимание!", Nil, "alert.ico", 64, {GREEN,RED} )


То что надо ! СПАСИБО !

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




Пост N: 2274
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.19 09:02. Заголовок: Andrey пишет То что ..


Andrey пишет
 цитата:
То что надо ! СПАСИБО !


Что делать, если 3-и кнопки или 4, как покрасить ?
nK := HMG_Alert( cMsg, {"&Поиск","&Отмена", "&Восстановить"}, "Внимание!", Nil, "alert.ico", 64, {GREEN,RED} )
Потом, если цвет backcolor окон проходит темой в проге, то вызов окна сообщения выпадает из нее.
Не АЙС, как то.

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




Пост N: 2275
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.19 11:07. Заголовок: gfilatov2002 Можно с..


gfilatov2002
Можно сделать как в GETBOX
STATIC aBackColor, aFontColor
+ команды для установки и добавить на окно BACKCOLOR aBackColor и для LABEL
BACKCOLOR aBackColor
FONTCOLOR aFontColor
и параметр bInit с вызовом в ON INIT окна
Закроются вопросы по hmg_Alert

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




Пост N: 2276
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.19 11:44. Заголовок: PS LABELam VCENTERAL..


PS
LABELam VCENTERALIGN, наверно, добавить лучше.
Под bInit понимаю возможность добавить на окно галочки или radio group

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




Пост N: 1469
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.03.19 12:14. Заголовок: SergKis пишет: Под ..


SergKis пишет:

 цитата:
Под bInit понимаю возможность добавить на окно галочки или radio group


Да, все это можно сделать
Но ведь у нас есть благодаря Петру системная функция TaskDialog() с подобными возможностями
А hmg_Alert() была задумана как быстрая замена функции Alert() из Клиппера

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




Пост N: 1470
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.03.19 12:17. Заголовок: SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что делать, если 3-и кнопки или 4, как покрасить ?
nK := HMG_Alert( cMsg, {"&Поиск","&Отмена", "&Восстановить"}, "Внимание!", Nil, "alert.ico", 64, {GREEN,RED} )


Вот так

Код
   DEFINE FONT DlgFont FONTNAME "Verdana" SIZE 16  

_HMG_ModalDialogReturn := 2

cMsg := "Первая строка;;Вторая строка;" + Repl( "-._.", 15 ) + ";;Четвертая строка"

nK := HMG_Alert( cMsg, {"&Поиск","&Отмена", "&Восстановить"}, "Внимание!", Nil, "alert.ico", 64, {YELLOW, RED, GREEN} )

HMG_Alert( nK )


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




Пост N: 2277
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.19 12:31. Заголовок: gfilatov2002 пишет Н..


gfilatov2002 пишет
 цитата:
Но ведь у нас есть благодаря Петру системная функция TaskDialog() с подобными возможностями


Как то не манит ее использовать - сложновато и многовато, смотрел примеры в TaskDialog - работает все ок, но ...

 цитата:
А hmg_Alert() была задумана как быстрая замена функции Alert() из Клиппера


С добавлением icon по размерам + теперь цвета, она вышла за рамки "Alert() из Клиппера"
А простые запросы куда архив откинуть (сервер, флэшка, диск, ...), уточнение по форме печати и похожие остались.
Простые окна запросов постоянно делаются, думаю, hmg_Alert можно использовать вместо, простыми средствами

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


Пост N: 351
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 20.03.19 12:34. Заголовок: Andrey пишет: Нет, ..


Andrey пишет:

 цитата:
Нет, здесь не буду извращаться. Хватит минимального сообщения.


Минимальные должны быть в ядре. Гргорий очень правильно сказал.Какая проблема сделать окошко с кнопками? Можно добавить ini файлик с настройками; размер,фонт, цвет и т.д
А что бы окошко не "глушило" экран сделайте для текста скроллинг ( горизонтальный или вертикальный ), как в FW
http://forums.fivetechsupport.com/viewtopic.php?f=3&t=18497&sid=1385f5e4cd43192128278e6396b9157e
Окраску кнопок можно сделать трехслойной ( что бы глаза не резала) . Т.е. серые ( или что то нетральное) . При наводке курсора "раскрашивается". При активации вспыхивает ... Если уж изобретаете велосипед, то не делайте его деревянным :)

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




Пост N: 2278
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.19 12:43. Заголовок: ММК пишет Гргорий оч..


ММК пишет
 цитата:
Гргорий очень правильно сказал.Какая проблема сделать окошко с кнопками?


Проблем сделать нет (делаются в реале), есть системная ф-я уже ПОЧТИ все делающая, привязывается по установке относительно какого окна центроваться (в своих это надо повторять каждый раз), ЕЕ, СИСТЕМНУЮ, ВЫБРОСИТЬ из использования или чуть поправить, усилив ?

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




Пост N: 2279
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.19 12:50. Заголовок: gfilatov2002 пишет В..


gfilatov2002 пишет
 цитата:
Вот так


Это ожидаемо
Осталось фон окна и label.
Помнится, в Клипперной Alert цвет фонта и цвет текстов задавался SET COORом

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




Пост N: 2280
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.19 12:51. Заголовок: PS SET COLORом , кон..


PS
SET COLORом , конечно

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




Пост N: 6192
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.03.19 15:25. Заголовок: ММК пишет: Т.е. сер..


ММК пишет:

 цитата:
Т.е. серые ( или что то нетральное) . При наводке курсора "раскрашивается".


Так цветные кнопки просто в качестве примера. На самом деле будет что-то нейтральное.
Бледно красное и бледно зеленое...
А свои кнопки и менюшки можно сделать используя пример Tsb_Menu05.7z https://cloud.mail.ru/public/35pf/NqnpzXCSi
Григорий, я тебе его высылал.

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




Пост N: 6193
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.03.19 15:39. Заголовок: SergKis пишет: Оста..


SergKis пишет:

 цитата:
Осталось фон окна и label.
Помнится, в Клипперной Alert цвет фонта и цвет текстов задавался SET COORом


Ну да, может до кучи сделать изменение фона окна.
Ну тогда хотелось бы через внешний глобальный параметр, типа:
SET MSGALERT BACKCOLOR YELLOW
SET MSGALERT LABELCOLOR BLUE

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




Пост N: 1471
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.03.19 17:10. Заголовок: Andrey пишет: сдела..


Andrey пишет:

 цитата:
сделать изменение фона окна.
Ну тогда хотелось бы через внешний глобальный параметр, типа:
SET MSGALERT BACKCOLOR YELLOW
SET MSGALERT LABELCOLOR BLUE


Cделал, конечно

Код ниже
   DEFINE FONT DlgFont FONTNAME "Verdana" SIZE 16  

_HMG_ModalDialogReturn := 2

cMsg := "Первая строка;;Вторая строка;" + Repl( "-._.", 15 ) + ";;Четвертая строка"

SET MSGALERT BACKCOLOR TO {240, 240, 240}
SET MSGALERT FONTCOLOR TO NAVY

nK := HMG_Alert( cMsg, {"&Поиск","&Отмена", "&Восстановить"}, "Внимание!", Nil, "alert.ico", 64, {YELLOW, RED, GREEN} )
P.S. Прозрачность для иконки задана, но выглядит немного коряво...

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




Пост N: 6194
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.03.19 21:45. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
P.S. Прозрачность для иконки задана, но выглядит немного коряво...



Пойдёт ! То что надо ! Спасибо !

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




Пост N: 2281
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.03.19 11:31. Заголовок: gfilatov2002 пишет Н..


gfilatov2002 пишет
 цитата:
Но ведь у нас есть благодаря Петру системная функция TaskDialog() с подобными возможностями


Еще раз посмотрел примеры, класс TaskDialog.
Совершенно не ясно как управлять расцветкой (свойствами) контролов, как добавить на окно tsb таблицу, как применить фонты из DEFINE FONT ...?
Да и сама hmg_Alert() не сделана на TaskDialog, а на стандартных командах hmg.
А в hmg_alert() с bInit можно спокойно добавить тсб таблицу, если надо, скрыть IMAGE, если не подобрать по сочетанию с backcolor, ... и др. штучки с окном\контролами проделать.

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




Пост N: 1473
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.03.19 13:32. Заголовок: SergKis пишет: в hm..


SergKis пишет:

 цитата:
в hmg_alert() с bInit можно спокойно добавить


Согласен
Например, такой блок

 цитата:
b := {|idx| this.title := 'New title', this.btn_01.caption := "Search", this.btn_02.caption := "Cancel", this.btn_03.caption := "Restore"}

переданный hmg_alert()

 цитата:
nK := HMG_Alert( cMsg, {"&Поиск","&Отмена", "&Восстановить"}, "Внимание!", Nil, "alert.ico", 64, {YELLOW, RED, GREEN}, b )


поменяет заголовок окна Alert и надписи на всех кнопках

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




Пост N: 2282
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.03.19 14:21. Заголовок: gfilatov2002 пишет п..


gfilatov2002 пишет
 цитата:
поменяет заголовок окна Alert и надписи на всех кнопках


Если добавить в блок кода
This.btn_01.Action := {|| myBtn1() }, This.btn_03.Action := {|| myBtn3() }
то выход с окна будет только по кнопке "Cancel\Отмена", а на кнопках 1,3 выполнятся соответствующие функции

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




Пост N: 6195
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.19 17:59. Заголовок: Григорий, ещё одна б..


Григорий, ещё одна бяка в hmg_Alert().
Центрирование строк убрать.
Или сделать по параметру
SET MSGALERT LABEL TO CENTERALIGN
SET MSGALERT LABEL TO RIGHTALIGN
SET MSGALERT LABEL TO LEFTALIGN

Мне нужно к левому краю прижимать сообщение.

И ещё сталкивался с проблемой, что hmg_Alert() остаётся за другими окнами,
т.е. нужен флаг - показывать окно поверх всех окон !
Как в MsgInfo() и др.

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




Пост N: 2283
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.19 18:39. Заголовок: Andrey Мы с Григори..


Andrey
Мы с Григорием, все время талдычим о bInit, в котором делай как надо с контролами (самим окном0 что хочешь.
Ты пропускаешь мимо ушей все.
Можешь каждую лабел двигать в любую нужную сторону, не хватает чего добавь на окно.

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




Пост N: 2284
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.19 18:59. Заголовок: PS 1. использовать и..


PS
1. использовать имена лабел
b := {|| This.Say_01.Alignment := 'LEFT', This.Say_02.Alignment := 'CENTER', This.Say_03.Alignment := 'RIGHT', ... }

2. режим SET OOP ON из описания в функции SayValueObj(nMode)
 
b := {|| MyInit() }
STAT FUNC Myinit()
LOCAL ow := ThisWindow.Object
LOCAL ao := ow:GetObj4Type('LABEL')
LOCAL o
FOR EACH o IN ao
o:Align := 'LEFT' // все налево или другой вариант
NEXT
RETURN Nil


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




Пост N: 2285
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.19 19:11. Заголовок: PPS и цвета у лабело..


PPS
и цвета у лабелов можешь поменять на другие, отличные от базовых

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




Пост N: 1474
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.03.19 20:48. Заголовок: Andrey пишет: Мне н..


Andrey пишет:

 цитата:
Мне нужно к левому краю прижимать сообщение.

И ещё сталкивался с проблемой, что hmg_Alert() остаётся за другими окнами,
т.е. нужен флаг - показывать окно поверх всех окон


Это возможно с помощью использования кодоблока bInit, предложенного Сергеем.
Рабочий код ниже
   _HMG_ModalDialogReturn := 2 

cMsg := "Первая строка;;Вторая строка;" + Repl( "-._.", 15 ) + ";;Четвертая строка"

SET MSGALERT FONTCOLOR TO NAVY

b := {|idx| this.say_01.alignment := "left", ;
this.say_03.alignment := "left", ;
this.say_04.alignment := "left", ;
this.say_06.alignment := "left", ;
EraseWindow( this.name ), ;
HMG_DrawIcon( this.name, "demo.ico", 30, 30, 48, 48, , .t. ), ;
this.topmost := .t.}

nK := HMG_Alert( cMsg, {"&Поиск","&Отмена", "&Восстановить"}, "Внимание!", Nil, "alert.ico", 64, {YELLOW, RED, GREEN}, b )

Результат на экране (для примера добавлена также замена иконки на лету )


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




Пост N: 6196
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.19 21:24. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Это возможно с помощью использования кодоблока bInit, предложенного Сергеем.



Согласен с использованием кодоблока, но тащить такой кодоблок в каждый HMG_Alert() крайне НЕ УДОБНО !
Конечно, можно его в Public объявить и всегда ставить в конце каждого HMG_Alert().
Хотелось бы иметь и альтернативу этому кодоблоку.

Кодоблок мне понравился, для индивидуального HMG_Alert() ! Спасибо за него !

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




Пост N: 2286
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.19 21:34. Заголовок: Andrey пишет Хотелос..


Andrey пишет
 цитата:
Хотелось бы иметь и альтернативу этому кодоблоку.


Альтернатива - своя функция (библиотека их: AlertYesNo(), ...)
 
FUNC Alert(...)
LOCAL nRet := 2
LOCAL bBlk := ...
nRet := hmg_alert(..., bBlk)
RETURN nRet


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




Пост N: 6197
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.19 21:39. Заголовок: SergKis пишет: Альт..


SergKis пишет:

 цитата:
Альтернатива - своя функция (библиотека их: AlertYesNo(), ...)


Ну да. Так тоже можно....
Ждём новую версию тогда...

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




Пост N: 6198
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.19 21:49. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
EraseWindow( this.name ), ;


А это для чего нужно ?

gfilatov2002 пишет:

 цитата:
this.say_06.alignment := "left",


Если такой строки не будет - какой будет результат ?

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




Пост N: 1475
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.03.19 22:13. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если такой строки не будет - какой будет результат ?


Врт такой будет экран


Код
   _HMG_ModalDialogReturn := 2 

cMsg := "Первая строка;;Вторая строка;" + Repl( "-._.", 15 ) + ";;Четвертая строка"

SET MSGALERT FONTCOLOR TO NAVY

b := {|idx| this.say_01.alignment := "left", ;
this.say_03.alignment := "left", ;
this.say_04.alignment := "left", ;
;// this.say_06.alignment := "left", ;
;// EraseWindow( this.name ), ;
;// HMG_DrawIcon( this.name, "demo.ico", 30, 30, 48, 48, , .t. ), ;
this.topmost := .t.}

nK := HMG_Alert( cMsg, {"&Поиск","&Отмена", "&Восстановить"}, "Внимание!", Nil, "alert.ico", 64, {YELLOW, RED, GREEN}, b )


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




Пост N: 6199
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.19 22:21. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
;// this.say_06.alignment := "left", ;


Не совсем понятно.
Допустим нет в сообщении 6-8 строки вообще.
А сделано так (т.е. по максимому для больших сообщений):
this.say_06.alignment := "left", ;
this.say_07.alignment := "left", ;
this.say_08.alignment := "left", ;
Что тогда будет ? Вылет ?

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




Пост N: 2287
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.19 22:26. Заголовок: Andrey У тебя ТВОЙ ..


Andrey
У тебя ТВОЙ массив с текстами, работай от его длины
AEval(aTxt, {|ct,nt| ct := 'Say_'+strzero(nt,2), This.&(ct).Aligment :='Left' })

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




Пост N: 6200
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.19 22:37. Заголовок: Понял. Спасибо ! :s..


Понял. Спасибо !

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




Пост N: 6213
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.03.19 18:19. Заголовок: Версия МиниГуи 19.02..


Версия МиниГуи 19.02
Запускаю свою большую программу.
Окно
	DEFINE WINDOW Form_Main ; 
MAIN NOSHOW ;
.....
END WINDOW

// Показ заставки: DEFINE WINDOW PICTURE/DELAY/ ON RELEASE
_DefineSplashWindow( "Form_Splash",,,,, "SPLASH", 10, {|| Addition_MainForms() } )

ACTIVATE WINDOW Form_Splash, Form_Main
...............

В Procedure _SplashDelay() запуск нескольких функций через Eval( hb_macroBlock( M->aRunCheck[nI] ) )

Ставлю в одной из них вот так:
nK := HMG_Alert( cMsg, {"&Перезапуск","&Отмена"}, "Внимание!", Nil, "iExclam64", 64 )
Прога вешается наглухо !!!
Если пытаюсь снять прогу через МЕНЕДЖЕР ЗАДАЧ, то и он сам вешается...
Если меняю сообщение на MsgYesNo( cMsg, "Внимание!", .F. ) - то ВСЁ работает !!!
Почему ? Что ещё нужно HMG_Alert() ?

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




Пост N: 2295
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.03.19 19:49. Заголовок: Andrey У тебя нет о..


Andrey
У тебя нет окна main и не стоит режим работы без main, для hmg_alert нужен окно-родитель
Сделай так примерно
 
DEFINE WINDOW Form_Main ;
MAIN NOSHOW ;
ON INIT _wPost(1) ;
.....
(This.Object):Event( 1, {|| SplasShow() })
END WINDOW

ACTIVATE WINDOW Form_Main
...
STAT FUNC SplashShow()
// здесь окна и запуски ф-й из массива
RETURN Nil


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




Пост N: 6214
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.03.19 20:51. Заголовок: Спасибо ! Буду пробо..


Спасибо ! Буду пробовать !

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




Пост N: 6219
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.19 18:00. Заголовок: Всем привет ! Разбир..


Всем привет !
Разбираюсь с новым HMG_Alert()
А как сделать фокус на второй кнопке ?
Вот так не работает:
  bInit  := {|| this.Btn_02.Setfocus }


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




Пост N: 2298
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.19 18:05. Заголовок: Andrey Посмотри вни..


Andrey
Посмотри внимательно пример от Григория (выше), думаю, ответ найдешь.

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




Пост N: 6220
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.19 18:26. Заголовок: Да, нашёл. _HMG_Moda..


Да, нашёл.
_HMG_ModalDialogReturn := 2
А почему не срабатывает this.Btn_02.Setfocus ?
Или нужно писать
   Domethod(ThisWindow.Name, "Btn_02", "Setfocus")

Хотя попробовал, тоже не срабатывает.

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




Пост N: 2299
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.19 18:38. Заголовок: Andrey пишет В исхо..


Andrey пишет [quote]`
В исходнике, ясно написано (если глянешь )
 
IF HB_ISBLOCK( bBlock )

Do_WindowEventProcedure( bBlock, This.Index, 'WINDOW_ACTIVATE' )

ENDIF

oDlg.&( aBut[ iif( Empty( _HMG_ModalDialogReturn ), 1, _HMG_ModalDialogReturn ) ] ).SetFocus()

Т.е. стачала работает блок, потом ...SetFocus
Можешь установить блок кода на ON INIT окна в bInit и там сделать This.Btn_02.SetFocus или на др. контрол, игнорируя _HMG_ModalDialogReturn

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




Пост N: 2300
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.19 18:44. Заголовок: PS Возможно, для бол..


PS
Возможно, для большей свободы, строку уст. фокуса можно переставить выше блока

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




Пост N: 6221
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.19 18:47. Заголовок: Вылетает теперь прог..


Вылетает теперь программа на HMG_Alert():
Error BASE/1132 Переполнение массива: Неверное количество аргументов
Called from FILLDLG(329) in module: h_alert.prg
Called from (b)HMG_ALERT(150) in module: h_alert.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from _ACTIVATEWINDOW(1314) in module: h_windows.prg
Called from HMG_ALERT(150) in module: h_alert.prg

Строка 329:
   oDlg.&( aBut[ iif( Empty( _HMG_ModalDialogReturn ), 1, _HMG_ModalDialogReturn ) ] ).SetFocus()

При таких условиях: первый вызов
 
_HMG_ModalDialogReturn := 2
nK := HMG_Alert( cMsg, {"&Да ","&Нет"}, ...)

Потом в коде где-то далее делаем простой вызов:
   HMG_Alert( cMsg, {"&Продолжить"}, ...)

Т.е. тогда всегда явно нужно указывать для ОДНОЙ кнопки:
   _HMG_ModalDialogReturn := 1

Что не очень удобно при написании кода.
Причём эту ошибку в отдельном примере не смог сделать.

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




Пост N: 2301
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.19 18:53. Заголовок: Andrey На базе hmg_..


Andrey
На базе hmg_alert напиши свои ф-ии, уже говорили выше
AlertOk()
AlertYesNo()
Alert3Btn()
Alert4Btn()
и используй их с уст. _hmg_modaldialogreturn

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




Пост N: 2302
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.19 18:56. Заголовок: PS или #xcommand Al..


PS
или
#xcommand AlertOK()...
если не устраивают ф-ии и там все ставь

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




Пост N: 6222
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.19 19:06. Заголовок: SergKis пишет: На б..


SergKis пишет:

 цитата:
На базе hmg_alert напиши свои ф-ии, уже говорили выше


Да наверное так и сделаю. Спасибо !

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




Пост N: 1480
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.03.19 21:04. Заголовок: SergKis пишет: На б..


SergKis пишет:

 цитата:
На базе hmg_alert напиши свои ф-ии


Благодарю за предложение

Уже добавил в новую бета-сборку такие функции по аналогии с функциями Msg*():

AlertYesNo ( Message, Title, RevertDefault, Icon, nSize, aColors, bInit )
AlertYesNoCancel ( Message, Title, nDefaultButton, Icon, nSize, aColors, bInit )
AlertRetryCancel ( Message, Title, nDefaultButton, Icon, nSize, aColors, bInit )
AlertOkCancel ( Message, Title, nDefaultButton, Icon, nSize, aColors, bInit )
AlertInfo ( Message, Title, Icon, nSize, aColors, bInit )
AlertStop ( Message, Title, Icon, nSize, aColors, bInit )
AlertExclamation ( Message, Title, Icon, nSize, aColors, bInit )


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




Пост N: 6247
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.04.19 18:29. Заголовок: SergKis пишет: У те..


SergKis пишет:

 цитата:
У тебя ТВОЙ массив с текстами, работай от его длины
AEval(aTxt, {|ct,nt| ct := 'Say_'+strzero(nt,2), This.&(ct).Aligment :='Left' })



Что-то не работает....
Сделал так:
   aTxt := HB_ATokens(cMsg, ";", .F., .F.) 
cSay := ""
FOR nI := 1 TO LEN(aTxt)
cSay += "this.say_" + strzero(nI,2) + ".Aligment := 'Left' "
cSay += IIF( nI == LEN(aTxt), "" , "," )
NEXT
bInit := {|| cSay , this.topmost := .t. }

Проще переключатель сделать, типа SET MSGALERT TEXT TO LEFT/CENTER ....

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




Пост N: 1489
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.19 19:44. Заголовок: Andrey пишет: Что-т..


Andrey пишет:

 цитата:
Что-то не работает


Andrey
Не парься, в следующей версии hmg_Alert() выравнивание влево будет делаться по умолчанию



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




Пост N: 2340
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.19 11:04. Заголовок: Andrey пишет Что-то ..


Andrey пишет
 цитата:
Что-то не работает....


Как ты это делаешь ?
Все работает. Пример https://TransFiles.ru/jcgdf

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




Пост N: 2341
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.19 12:25. Заголовок: gfilatov2002 Если у..


gfilatov2002
Если убрать имя окна oDlg и добавить форм. динамически имени окна, то можно несколько раз исп. hmg_alert вызов.
Пример и текст h_alert.prg тут https://TransFiles.ru/8w8g8
четвертая кнопка на main (Align = 'Left') + на кнопку "Повтор" ( Btn_01, Align = 'Center' ) подвешен вызов еще одной hmg_alert

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




Пост N: 1490
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.04.19 12:51. Заголовок: SergKis пишет: доба..


SergKis пишет:

 цитата:
добавить форм. динамически имени окна


Благодарю за помощь
Обязательно использую эту возможность

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




Пост N: 2342
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.19 14:15. Заголовок: gfilatov2002 Еще на..


gfilatov2002
Еще надо для LABEL в hmg_alert добавить VCENTERALIGN
Если сейчас для строки LABEL поставить BACKCOLOR отличный от окна, то будет вид не очень ...

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




Пост N: 1491
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.04.19 14:43. Заголовок: SergKis пишет: для ..


SergKis пишет:

 цитата:
для LABEL в hmg_alert добавить VCENTERALIGN


Сделал

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




Пост N: 6248
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.04.19 15:50. Заголовок: SergKis пишет: Как ..


SergKis пишет:

 цитата:
Как ты это делаешь ?
Все работает. Пример


Спасибо !
Я не так делал !

Вот сделал окно для ошибки вылета, теперь у меня свои окошки:


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




Пост N: 6291
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.05.19 20:02. Заголовок: Всем привет ! Если ..


Всем привет !

Если самая длинная строка не помещается на окне hmg_Alert(), то она обрывается и её не видно !
Надо бы сделать проверку на длину строки и выводить остаток строки в hmg_Alert().
Как это сделать ?

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




Пост N: 2570
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.05.19 21:32. Заголовок: Andrey пишет Как это..


Andrey пишет
 цитата:
Как это сделать ?


Длину строки знаешь
Клиентскую часть и размеры окна тоже
В bInit все что надо делай - вычисляй, прибавляй, меняй

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




Пост N: 6293
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.05.19 21:59. Заголовок: SergKis пишет: Длин..


SergKis пишет:

 цитата:
В bInit все что надо делай - вычисляй, прибавляй, меняй


Но это опять ерунда выходит.
Вместо того чтобы поставить в код hmg_Alert(), делаем опять через bInit ...

Вот этот кусочек кода НУЖНО вставить в hmg_Alert() и функция станет универсальной.
   LOCAL nI, nJ, iMax, aDim, cText, nTabSize := 8, lWrap := .T. 
......
cMsg := AtRepl( ";", cMsg, CRLF )
aDim := HB_ATokens(cMsg,CRLF,.F.,.F.)
cMsg := ""
FOR nI := 1 TO LEN(aDim)
cText := aDim[nI]
IF LEN(cText) > 70
iMax := MLCount( cText, 70, nTabSize, lWrap )
FOR nJ := 1 TO iMax
cMsg += MemoLine( cText, 70, nJ, nTabSize, lWrap ) + CRLF
NEXT
ELSE
cMsg += cText + CRLF
ENDIF
NEXT
....
cIcoRes := "iWarning64"
HMG_Alert( cMsg, {"&Продолжить"}, cTitle, Nil, cIcoRes, nIcoSize, { aButtColor } , bInit )

Может что и не правильно я написал, поправьте тогда меня.
А так приходиться вставлять одинаковые куски кода по своим функциям, где вызываю hmg_Alert().
Дубляж кода постоянно не хочется делать.

SergKis пишет:

 цитата:

Длину строки знаешь
Клиентскую часть и размеры окна тоже


Длину строки на моём шрифте 18 - знаю. А для другого фонта вычислять нужно.
И чем ограничена ширина окна - я не знаю....
Исходник не смотрел пока.

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




Пост N: 2571
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.05.19 00:50. Заголовок: Andrey пишет Вот это..


Andrey пишет
 цитата:
Вот этот кусочек кода НУЖНО вставить в hmg_Alert() и функция станет универсальной.


Не будет универсальной, по height может выходить за пределы экрана, фонт увеличишь опять не попадешь (раньше попадало), надо скролы ставить для прокрутки. И т.д. и т.п. Какие отступы, как полно заполнять окном экран ?

 цитата:
И чем ограничена ширина окна - я не знаю....


Шутишь ? Про десктоп забыл ?

 цитата:
А так приходиться вставлять одинаковые куски кода по своим функциям, где вызываю hmg_Alert().


Уже писал, повторю (выше в теме и пример был), напиши свою с 1ым блоком кода на базе hmg_Alert(), назови My_Alert() и используй. Фонт ставь от кол-ва строк в массиве и мах. ширины строки в нем, а не в лоб 18 и все. Может на 14 все поместится, на 18 нет.
На мой взгляд, свою роль hmg_Alert() и производные от нее выполняют нормально.
Расширение возможностей, пожалуйста, через bInit, что угодно делай, хоть контролы добавляй.

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




Пост N: 6328
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.07.19 16:27. Заголовок: Всем привет ! Сделал..


Всем привет !
Сделал свою функцию MG_Stop(), MG_Info() и т.д. на базе hmg_Alert().
Всё хорошо, но иногда происходит сбой...
MsgStop() работает, а MG_Stop() вылетает с ошибкой:
Error MGERROR/0 ACTIVATE WINDOW: activate windows within an ON RELEASE window procedure is not allowed. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(100) in module: h_error.prg
Called from _ACTIVATEWINDOW(1294) in module: h_windows.prg
Called from HMG_ALERT(167) in module: h_alert.prg
Called from MG_STOP(59) in module: util_Alert.prg

Почему ? Что нужно сделать, чтобы не вылетало ?
МиниГуи последний.

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




Пост N: 2633
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.07.19 19:44. Заголовок: Andrey пишет Почему ..


Andrey пишет
 цитата:
Почему ?


Активировать окна в ON RELEASE не разрешено, так вроде переводится.

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




Пост N: 6329
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.07.19 19:50. Заголовок: SergKis пишет: Акти..


SergKis пишет:

 цитата:
Активировать окна в ON RELEASE не разрешено, так вроде переводится.


А почему тогда MsgStop работает нормально ?
Как сделать, чтобы hmg_Alert() тоже заработал в этом режиме ?

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




Пост N: 2635
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.07.19 19:56. Заголовок: Andrey пишет А почем..


Andrey пишет
 цитата:
А почему тогда MsgStop работает нормально ?


Это winapi.

 цитата:
Как сделать, чтобы hmg_Alert() тоже заработал в этом режиме ?


Это hmg, т.е. DEFINE WINDOW ... END WINDOW
Писать, наверно, по другому.

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




Пост N: 6334
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.07.19 14:04. Заголовок: Всем привет! Опять о..


Всем привет!
Опять очередная загадка...
В таблице клавишей DEL удаляю цифры. Происходит вылет по HMG_ALERT() !
Вот ошибка:
Error MGERROR/0 Control: Btn_01 Of Form_AYC Not defined. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(100) in module: h_error.prg
Called from SETPROPERTY(3792) in module: h_controlmisc.prg
Called from (b)MG_YESNO(137) in module: util_Alert.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from FILLDLG(342) in module: h_alert.prg
Called from (b)HMG_ALERT(167) in module: h_alert.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from _ACTIVATEWINDOW(1314) in module: h_windows.prg
Called from HMG_ALERT(167) in module: h_alert.prg
Called from MG_YESNO(147) in module: util_Alert.prg
Called from AYC_DELREC(1975) in module: form_AbonYearCalc.prg
Called from (b)TAB_AYC(793) in module: form_AbonYearCalc.prg
Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg
Called from EVENTS(699) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg


MG_YESNO() моя функция для HMG_ALERT(), вот код:
FUNCTION MG_YesNo( cMsg, cTitle, cIcoRes, nIcoSize, bInit, aBackColor, aFontColor )  
LOCAL aButton := {" &Да "," &Нет "}
................
DEFAULT cTitle := "Внимание!" , bInit := {|| this.topmost := .t. ,;
this.Btn_01.Fontcolor := BLACK ,;
this.Btn_02.Fontcolor := BLACK } // строка 137

Почему ?
Если цифры вбивать, то всё нормально.

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




Пост N: 6335
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.07.19 14:20. Заголовок: Я понял почему. Григ..


Я понял почему.
Григорий давно уже мне помогал делать и сделал на окно обработку кнопок:
       // --------------- назначение клавиш -------------------     
on key INSERT action AYC_InsRec(Int(Val(aTabName[ GetProperty(_HMG_ThisFormName,"Tab_1","Value") ])),"Set_Columns" + hb_ntos(GetProperty(_HMG_ThisFormName,"Tab_1","Value")))
on key DELETE action AYC_DelRec(Int(Val(aTabName[ GetProperty(_HMG_ThisFormName,"Tab_1","Value") ])),"Set_Columns" + hb_ntos(GetProperty(_HMG_ThisFormName,"Tab_1","Value")))

При редактирование таблицы при нажатии клавиши DEL происходит вызов на функцию AYC_DelRec().
Как исправить данную коллизию ?

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




Пост N: 2640
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.19 15:04. Заголовок: Andrey пишет При ред..


Andrey пишет
 цитата:
При редактирование таблицы при нажатии клавиши DEL происходит вызов на функцию AYC_DelRec()


 
1. Делал проверку наличия кнопок на форме
bInit := {|cw,ab| cw := This.Name, ab := {'Btn_01', 'Btn_02', 'Btn_03', 'Btn_04'}, this.topmost := .t., ;
AEval(ab, {|cb| iif( _IsControldefined(cb, cw), SetProperty(cw, cb, 'FONTCOLOR', BLACK), ) })

2. Перенес назначение кнопок с окна на таблицу (держал бы ее всегда в фокусе)
oBrw:UserKeys( VK_INSERT, {|ob| _wPost(1, ob) } )
oBrw:UserKeys( VK_DELETE, {|ob| _wPost(2, ob) } )

3. Сохранять\восстанавливать клавиши и блоки кода, можно делать, но это не предлагаю, т.к. лично мне не он нравится.




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




Пост N: 6336
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.07.19 15:29. Заголовок: SergKis пишет: 3. ..


SergKis пишет:

 цитата:
3. Сохранять\восстанавливать клавиши и блоки кода, можно делать, но это не предлагаю, т.к. лично мне не он нравится.


Да это более простой метод.
Как считать какая обработка была назначена на клавишу ?
Можно ее считать, а потом восстановить ?

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




Пост N: 2641
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.19 15:52. Заголовок: Andrey пишет Как счи..


Andrey пишет
 цитата:
Как считать какая обработка была назначена на клавишу ? Можно ее считать, а потом восстановить ?


Надо написать ф-ии, к примеру :
1.
aKey := SaveHotkeyAll()
- получить все назначения на окно 'HOTKEY' тип контрола (HMG_GetControls() функцией)
- пробежать по полученному массиву и сохранить в своем данные, см. h_hotkey.prg _DefineHotKey (...) массив назначения
_HMG_aControlType [k] := "HOTKEY"
_HMG_aControlNames [k] := ''
_HMG_aControlHandles [k] := 0
_HMG_aControlParentHandles [k] := nParentForm
_HMG_aControlIds [k] := nId
_HMG_aControlProcedures [k] := bAction
_HMG_aControlPageMap [k] := nMod
_HMG_aControlValue [k] := nKey
...
- выполнить для полученного массива _ReleaseHotKey ( cParentForm, nMod , nKey )

2.
RestHotkeyAll(aKey)
- по массиву aKey выполнить _DefineHotKey ( cParentForm , nMod , nKey , bAction )

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




Пост N: 2642
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.19 16:26. Заголовок: PS правильно HMG_Get..


PS
правильно HMG_GetFormControls ( cFormName, cUserType ), вместо HMG_GetControls()

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




Пост N: 6342
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.07.19 00:09. Заголовок: Всем привет ! Столкн..


Всем привет !
Столкнулся с переполнением в HMG_Alert().
Т.е. если слишком много строк текста, то окно становиться посередине экрана и нет кнопки закрыть.
Задачу приходиться снимать.
Григорий, добавь пожалуйста в эту функцию закрытие этого окна по Alt+F4 !
MsgStop() закрывается по этой клавише.

У себя конечно сделаю свою обработку, но мало ли где ещё такая бяка вылезет.
А как посчитать сколько строк влезет в HMG_Alert() ?
Не знаю как рассчитывается расстояние между строчками текста в Label в МиниГуи.
Остальное знаю.

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




Пост N: 1521
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.07.19 09:56. Заголовок: Andrey пишет: добав..


Andrey пишет:

 цитата:
добавь пожалуйста в эту функцию закрытие этого окна по Alt+F4


Такая возможность уже есть (см. последний параметр в определении функции ниже)

 цитата:
HMG_Alert( cMsg, aOptions, cTitle, nType, xIcon, nSize, aColors, bInit, lClosable )



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




Пост N: 2656
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.19 10:25. Заголовок: gfilatov2002 пишет а..


gfilatov2002 пишет
 цитата:
акая возможность уже есть


В AlertInfo(), AlertYesNo(), ... нет параметра lClosable

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




Пост N: 1522
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.07.19 11:29. Заголовок: SergKis пишет: В Al..


SergKis пишет:

 цитата:
В AlertInfo(), AlertYesNo(), ... нет параметра lClosable


Да, верно (этот параметр используется внутри этих функций).

Но Андрей ведь спрашивал о функции HMG_Alert()

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




Пост N: 2657
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.19 11:40. Заголовок: gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Да, верно (этот параметр используется внутри этих функций).


FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable )
...
DEFAULT cTitle TO "Attention", aOptions TO { "&OK" }, lClosable TO .F.
...
STATIC FUNCTION _Alert( cMsg, aOptions, cTitle, nType, nDefault, xIcon, nSize, aColors, lTopMost, bInit, lClosable )
В этой ф-ии желательно сделать
DEFAULT lClosable TO .T.
тогда Alert... функции будут похожи на Msg... функции - выход по Esc, Alt+F4

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




Пост N: 1543
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.07.19 17:18. Заголовок: Andrey пишет: SergK..


Andrey пишет:

 цитата:
SergKis пишет:

 цитата:
Активировать окна в ON RELEASE не разрешено, так вроде переводится.


А почему тогда MsgStop работает нормально ?
Как сделать, чтобы hmg_Alert() тоже заработал в этом режиме ?


Уже сделал: все функции из семейства Alert*() будут работать при ON RELEASE

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




Пост N: 6376
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.07.19 18:15. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Уже сделал: все функции из семейства Alert*() будут работать при ON RELEASE



Спасибо !
А как это делается ?

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




Пост N: 1544
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.07.19 19:28. Заголовок: Andrey пишет: как э..


Andrey пишет:

 цитата:
как это делается ?


Эта возможность будет доступна в следующей сборке (если таковая выйдет в будущем)

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




Пост N: 6481
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.10.19 19:45. Заголовок: Что то не работает п..


Что то не работает правильно функция HMG_Alert()
Обрезает текст с длинными строчками и не выводит его полностью.

Проект высылал на почту.
Кстати и в примере ButtonEx_DynamicMenu(1).7z который высылал ранее, функция MsgInfo(cText,'Menu Array')
показывает правильно весь текст, а HMG_Alert(ToDimText(aBtn), , 'Menu Array') - обрезает текст.
Можно исправить эту функцию ?

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




Пост N: 1608
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.10.19 21:13. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно исправить эту функцию ?


Благодарю за сообщение
Эта функция будет исправлена для работы с длинными строками в следующей сборке (уже скоро).

P.S. Исправленный вариант функции выслал по почте...

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




Пост N: 6482
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.10.19 21:52. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
P.S. Исправленный вариант функции выслал по почте...



Что-то не пашет...
Добавил модуль в проект:
# list all files *. p r g 
hmg_Alert2.prg
h_alert.prg

Собирается нормально, а при запуске выдаёт ошибку:
Error BASE/1449 Синтаксическая ошибка: & 
--------------------------------- Stack Trace ---------------------------------
Called from _DEFINEMODALWINDOW(655) in module: h_windows.prg
Called from HMG_ALERT(164) in module: h_alert.prg
Called from MAIN(34) in module: hmg_Alert2.prg


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




Пост N: 1609
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.10.19 21:57. Заголовок: Andrey пишет: при з..


Andrey пишет:

 цитата:
при запуске выдаёт ошибку


Да, Вы правы.
Дело в том, что в этой функции использованы новые возможности, которые будут доступны только в следующей сборке.

Тогда нужно немного подождать выхода этой сборки...

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




Пост N: 6483
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.10.19 21:59. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Тогда нужно немного подождать выхода этой сборки...



Хорошо, тогда ждем !

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




Пост N: 1610
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.10.19 22:20. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
в этой функции использованы новые возможности




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




Пост N: 6516
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.11.19 20:39. Заголовок: Новая версия МиниГуи..


Новая версия МиниГуи - 19.10 (Update 2)
Что не все окна при использовании функции HMG_Alert() делаются по центру экрана.
У меня стали некоторые окна HMG_Alert() показываться в левом верхнем углу экрана.
Почему ? Как сделать что бы окна HMG_Alert() были всегда по центру экрана ?
У меня принудительно главное меню скидывается на панель задач, когда нужно.
Может быть из-за этого ?

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




Пост N: 6530
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.19 17:45. Заголовок: Всем привет ! А как..


Всем привет !

А как сделать окно HMG_Alert() поверх всех окон ?
Что то по старому перестало работать...

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




Пост N: 2966
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.11.19 20:24. Заголовок: Попробуй _HMG_Inplac..


Попробуй
_HMG_InplaceParentHandle := ThisWindow.Handle
hmg_Alert(...)

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




Пост N: 6531
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.19 21:42. Заголовок: Что то после переход..


Что то после перехода на последню версию МиниГуи, программа стала падать на HMG_Alert()
Вот такая ошибка:
Error MGERROR/0 Control: Btn_01 Of Form_CardOpl Not defined. Program terminated. 
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(100) in module: h_error.prg
Called from SETPROPERTY(3977) in module: h_controlmisc.prg
Called from (b)MG_YESNO(149) in module: Source\util_Alert.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from FILLDLG(355) in module: h_alert.prg
Called from HMG_ALERT(166) in module: h_alert.prg

Вот мой код:
   cIcoRes := "Help64" ; nIcoSize := 64  
aButton := {"&Продолжить","&Отмена"} "

_HMG_ModalDialogReturn := 2

bInit := {|| this.topmost := .t. ,;
this.Btn_01.Fontcolor := BLACK ,;
this.Btn_02.Fontcolor := BLACK }

nK := HMG_Alert( cMsg, aButton, cTitle, NIL, cIcoRes, nIcoSize, aButColor, bInit ) // строка 166

Почему ? Чего перестало хватать ?

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




Пост N: 2967
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 01:00. Заголовок: Andrey пишет Btn_01 ..


Andrey пишет
 цитата:
Btn_01 Of Form_CardOpl Not defined.


На окне Form_CardOpl timer есть ?
Если есть, его (все timer работающие) надо отключать, когда, что то делаешь и вкл. когда закончил.

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




Пост N: 6532
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.19 10:47. Заголовок: SergKis пишет: На о..


SergKis пишет:

 цитата:
На окне Form_CardOpl timer есть ?


Нет у него таймера.
У меня и в других окнах так же вылетает.

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




Пост N: 2968
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 12:27. Заголовок: Andrey пишет Нет у н..


Andrey пишет
 цитата:
Нет у него таймера.
У меня и в других окнах так же вылетает.


Проверить не могу, не стоит bcc 5.8, но по тексту имя окна hmg_alert() "oDlg"
 
LOCAL cForm := "oDlg"

IF _IsWindowDefined( cForm )
nLineas := 0
WHILE _IsWindowDefined( cForm := "oDlg" + hb_ntos( ++nLineas ) )
END
ENDIF
...
DEFINE WINDOW (cForm) WIDTH 0 HEIGHT 0 TITLE cTitle MODAL NOSIZE BACKCOLOR aBackColor ;
ON INTERACTIVECLOSE ( lPressButton .OR. lClosable ) ;
ON RELEASE iif( !lPressButton .AND. lClosable, _HMG_ModalDialogReturn := 0, NIL )

FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable, cFontName ) // тут снятие

END WINDOW
...
добавь в
bInit := {|| _logfile(.t., This.Name), this.topmost := .t. ,;
this.Btn_01.Fontcolor := BLACK ,;
this.Btn_02.Fontcolor := BLACK }
какое имя окна ?


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




Пост N: 6533
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.19 14:15. Заголовок: SergKis пишет: како..


SergKis пишет:

 цитата:
какое имя окна ?


Код:
    Function MG_YESNO(...) 
.....
? ProcNameLine() + "--1-----------------------"

bInit := {|| _logfile(.t., This.Name), this.topmost := .t. ,;
this.Btn_01.Fontcolor := BLACK ,;
this.Btn_02.Fontcolor := BLACK } // строка 166

? ProcNameLine() + "--2-----------------------" // строка 168
nK := HMG_Alert( cMsg, aButton, cTitle, NIL, cIcoRes, nIcoSize, aButColor, bInit ) // строка 169

Лог-файл:
Вызов из: MG_YESNO(162) --> util_Alert.prg--1-----------------------	 
Вызов из: MG_YESNO(168) --> util_Alert.prg--2-----------------------
Form_CardOpl

Вылет по ошибке:
Error MGERROR/0 Control: Btn_01 Of Form_CardOpl Not defined. Program terminated. 
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(100) in module: h_error.prg
Called from SETPROPERTY(3977) in module: h_controlmisc.prg
Called from (b)MG_YESNO(166) in module: util_Alert.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from FILLDLG(355) in module: h_alert.prg
Called from HMG_ALERT(166) in module: h_alert.prg
Called from MG_YESNO(169) in module: util_Alert.prg


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




Пост N: 2971
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 14:23. Заголовок: Andrey А если так S..


Andrey
А если так
 
SET OOP ON
...
bInit := {|ow| _logfile(.t., This.Name, ow:Name), this.topmost := .t. ,;
this.Btn_01.Fontcolor := BLACK ,;
this.Btn_02.Fontcolor := BLACK }




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




Пост N: 2972
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 14:44. Заголовок: PS Что покажет ?..


PS
Что покажет
? ProcNameLine() + "--2-----------------------", ThisWindow.Name // строка 168

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




Пост N: 6534
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.19 14:50. Заголовок: SergKis пишет: А ес..


SergKis пишет:

 цитата:
А если так


Вылет:
 
Error BASE/1004 Метод не экспортирован: NAME
--------------------------------- Stack Trace ---------------------------------
Called from NAME(0)
Called from (b)MG_YESNO(166) in module: util_Alert.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from FILLDLG(355) in module: h_alert.prg
Called from HMG_ALERT(166) in module: h_alert.prg

SergKis пишет:

 цитата:
Что покажет


Вызов из: MG_YESNO(162) --> util_Alert.prg--1-----------------------	 
Вызов из: MG_YESNO(168) --> util_Alert.prg--2----------------------- Form_CardOpl


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




Пост N: 2973
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 15:02. Заголовок: Andrey Error BASE/1..


Andrey

 цитата:
Error BASE/1004 Метод не экспортирован: NAME


Извини, это в моей версии передается объект окна, а тут нет такого.
Хотел проверить создание окна oDlg было ли ?
Если было то фокус должен был быть на нем и this среда его.
Похоже окно hmg_alert не создано, т.к. this среда осталась от предыдущего окна.
Пробни
 
bInit := {|| _logfile(.t., This.Name, _IsWindowDefined('oDlg')), this.topmost := .t. ,;
this.Btn_01.Fontcolor := BLACK ,;
this.Btn_02.Fontcolor := BLACK } // строка 166


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




Пост N: 6535
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.19 15:03. Заголовок: Поставил вызов этой ..


Поставил вызов этой функции (без ow:Name) в главной форме, всё отлично работает. Вот лог:
Вызов из: TEST(524) --> 11main.prg--0-----------------------	 
Вызов из: MG_YESNO(162) --> util_Alert.prg--1-----------------------
Вызов из: MG_YESNO(168) --> util_Alert.prg--2----------------------- Form_Main
oDlg .T.


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




Пост N: 2974
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 15:14. Заголовок: А на родном месте ? ..


А на родном месте ?
на маин не так интересно, т.к. окон мало

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




Пост N: 6536
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.19 15:17. Заголовок: SergKis пишет: Проб..


SergKis пишет:

 цитата:
Пробни


Вызов из: TEST(524) --> 11main.prg--0-----------------------	 
Вызов из: MG_YESNO(162) --> util_Alert.prg--1-----------------------
Вызов из: MG_YESNO(168) --> util_Alert.prg--2----------------------- Form_Main
oDlg .T. .T.
Вызов из: MG_YESNO(162) --> util_Alert.prg--1-----------------------
Вызов из: MG_YESNO(168) --> util_Alert.prg--2----------------------- Form_CardOpl
Form_CardOpl .T.

Получается на главной форме (Form_Main) работает, а в нужном окне нет. Почему ?
На главной форме таймер сидит. У меня в рабочей программе 3 таймера используются, без них никак !
Отключил таймер.
Всё равно такая же ошибка !
Раньше стояла функция MsgYesNo() - решил переделать на свою и облом, то работает, то нет.

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




Пост N: 2975
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 15:33. Заголовок: Andrey пишет Всё рав..


Andrey пишет
 цитата:
Всё равно такая же ошибка !


Если таймеры отключены, то трассируй h_alert.prg на предмет значения ThisWindow.name в
*-----------------------------------------------------------------------------*
STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont )
*-----------------------------------------------------------------------------*
...

 цитата:
На главной форме таймер сидит. У меня в рабочей программе 3 таймера используются, без них никак !


По мне, без глобальных таймеров обходиться можно (он может нарушить this среду если не управлять его вкл.\выкл.).
Просто распределяешь работу таймера на смену режимов\окон\событий клавы и мыши ...
Таимер тек. окна то же может нарушить this среду, без упр. вкл.\выкл., если работает блок кода для контрола, кнопки например - это надо учитывать делая останов\пуск таймера

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




Пост N: 6537
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.19 15:37. Заголовок: Andrey пишет: Отклю..


Andrey пишет:

 цитата:
Отключил таймер.
Всё равно такая же ошибка !


Дело не в таймере !

Раньше стояла функция MsgYesNo() - решил переделать на свою через HMG_ALERT() и облом, то работает, то нет.

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




Пост N: 2976
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 15:43. Заголовок: Andrey пишет решил п..


Andrey пишет
 цитата:
решил переделать на свою через HMG_ALERT() и облом, то работает, то нет.


Так потестируй h_alert.prg _logfile(...), раз у тебя вылезло в данном месте стабильное сваливание, найди причину, пересобирая либу

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




Пост N: 2977
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 15:48. Заголовок: Andrey пишет Дело не..


Andrey пишет
 цитата:
Дело не в таймере !


Если у тебя глобальные таймеры и ты ими не жестко управляешь, то могут быть бяки при работе с This средой.
Возможно, надо отказаться в таком случае от нее и оперировать факт. именами окон и контролов всегда.
Только это хотел сказать про таймер и this среду

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




Пост N: 6538
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.19 16:10. Заголовок: Пробовал в других ме..


Пробовал в других местах вызов HMG_ALERT(), работает.
Как вызываю из таблицы свою карточку (окно Form_CardOpl), вот там вылетает...
Обычное окно, по базе ищет что нужно. Мистика какая то ...

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




Пост N: 2978
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.19 16:18. Заголовок: Andrey пишет Как выз..


Andrey пишет
 цитата:
Как вызываю из таблицы свою карточку (окно Form_CardOpl), вот там вылетает...


Обвесь _logfile(...) как писал выше в h_alert.prg, посмотри, что даст log
У бери NOSHOW при создании окна и снова посмотри.
Понятнее будет с мистикой ...

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




Пост N: 6539
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.19 16:58. Заголовок: Забодался искать. Сд..


У меня 2 окна скрываются, т.е. делаю DoMethod( сForm, "Hide" ) два раза, чтобы окон много не было.
Может из-за этого, но по другому нельзя.
Забодался искать. Сделал так:
   bInit := {|| _logfile(.t., This.Name, _IsWindowDefined('oDlg')) ,; 
SetProperty("oDlg", "Topmost", .t. ) ,;
SetProperty("oDlg", "Btn_01", "Fontcolor", BLACK ) ,;
SetProperty("oDlg", "Btn_02", "Fontcolor", BLACK ) }

Надеюсь теперь ВСЕГДА будут работать !

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




Пост N: 6614
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.04.20 23:15. Заголовок: Всем привет ! Возвра..


Всем привет !
Возвращаюсь опять к функции HMG_ALERT().
Если очень много строк передаю в эту функцию (а это часто бывает) , то беда с этим окном !
Верх и низ окна просто УЛЕТАЮТ за границу экрана.
Вот примерно выглядит так это:


Юзера в шоке, я тоже. Кнопки закрыть и выйти нет !
Писать ещё свою функцию нет резона, хотелось бы одну стандартную.
Т.е. достаточно было бы проверить в HMG_ALERT() выход за границы экрана и уменьшить их..
А сам текст хотелось бы "затолкать" в объект EDITBOX в режиме READONLY
Вот так примерно чтобы выглядело:


Такое решение было бы просто отличным для многих !
Заранее спасибо !

Проект для пробы выкладываю - https://cloud.mail.ru/public/g3VA%2Fi87fBERHx

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




Пост N: 3937
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.04.20 08:02. Заголовок: Юзера в шоке, я тоже..



 цитата:
Юзера в шоке, я тоже. Кнопки закрыть и выйти нет



Я в подобном случае проверяю количество строк, и при превышении некоторого значения вместо alert формирую окно с бровсом и кнопками

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




Пост N: 3122
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.04.20 10:31. Заголовок: Andrey пишет А сам т..


Andrey пишет
 цитата:
А сам текст хотелось бы "затолкать" в объект EDITBOX в режиме READONLY
...
Такое решение было бы просто отличным для многих !


Вариант от Pasha более перспективный, т.к. просто вывести ошибки это меньшая часть дела. Надо с ошибки выйти на карточку с ошибкой для исправления. Потому надо сразу все ошибки выводить в TsBrowse и организовывать выход при DblClick и Enter на исправление ошибки (можно и кнопки добавлять) на окно. Тсб может быть с одной колонкой или иметь их несколько.
Пример, как это делать, есть в Advanced\App_OopReport\demo2.prg функция ( использование HMG_Alert() для этого)
STATIC FUNC AgeCard( oWnd, oBrw, oCnl )
+
STATIC FUNC bAgeCard( oWnd, oBrw, oCnl )
...
Вместо тсб можно и EDITBOX прикрутить в bInit блоке кода.

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




Пост N: 1671
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.04.20 11:46. Заголовок: Andrey пишет: А сам..


Andrey пишет:

 цитата:
А сам текст хотелось бы "затолкать" в объект EDITBOX в режиме READONLY


Благодарю за предложение!
Результат отработки функции для вашего примера см. на картинке



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




Пост N: 6615
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.04.20 12:09. Заголовок: Pasha пишет: Я в по..


Pasha пишет:

 цитата:
Я в подобном случае проверяю количество строк, и при превышении некоторого значения вместо alert формирую окно с бровсом и кнопками


Да это тоже вариант, но это не есть хорошо.
Если это ОДНА функция, то такое решение универсальное и самое простое для всех.
В противном случае нужно делать свою отдельную функцию и в коде писать обращение к своей функции.

SergKis пишет:

 цитата:
т.к. просто вывести ошибки это меньшая часть дела. Надо с ошибки выйти на карточку с ошибкой для исправления. Потому надо сразу все ошибки выводить в TsBrowse и организовывать выход при DblClick и Enter на исправление ошибки (можно и кнопки добавлять) на окно. Тсб может быть с одной колонкой или иметь их несколько.



Не надо лишних движений. Юзер вошёл в список квартир, ни фига не заполнил и вышел из списка.
Вот для таких случаев и надо ему выводить КРАСНОЕ ОКНО с ошибками, ни фига не видят.

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




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


gfilatov2002 пишет:

 цитата:
Результат отработки функции для вашего примера см. на картинке


А самому пощупать когда можно будет ?

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




Пост N: 1672
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.04.20 12:14. Заголовок: Andrey пишет: самом..


Andrey пишет:

 цитата:
самому пощупать когда можно будет ?


После выхода апрельской сборки в конце месяца

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




Пост N: 6617
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.04.20 12:17. Заголовок: Спасибо ! Буду ждать..


Спасибо ! Буду ждать !
Только текст проверить на кол-во строк.
При 150 строках падала программа... а может и с меньшим кол-вом строк...

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




Пост N: 1673
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.04.20 12:20. Заголовок: Andrey пишет: Тольк..


Andrey пишет:

 цитата:
Только текст проверить на кол-во строк.


Проверял на 1500 строк - работает нормально

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




Пост N: 6618
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.04.20 12:29. Заголовок: Ещё одно уточнение, ..


Ещё одно уточнение, кнопку на окне прижать вправо по месту окончания объекта EDITBOX,
красивей будет !



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




Пост N: 3123
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.04.20 12:34. Заголовок: Andrey пишет Не надо..


Andrey пишет
 цитата:
Не надо лишних движений. Юзер вошёл в список квартир, ни фига не заполнил и вышел из списка.
Вот для таких случаев и надо ему выводить КРАСНОЕ ОКНО с ошибками, ни фига не видят.
...
Только текст проверить на кол-во строк.
При 150 строках падала программа... а может и с меньшим кол-вом строк...


Если они ни фига не видят и не смотрят, то и 150 строк смотреть не будут, но когда нибудь все равно исправлять надо.
Тогда достаточно спросить "В 150 карточках\квартирах ошибки", Распечатать ? Yes \ No
И безразмерных EditBox не надо. На крайняк, есть внешние редакторы с readonly режимами.

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




Пост N: 1674
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.04.20 12:42. Заголовок: Andrey пишет: кнопк..


Andrey пишет:

 цитата:
кнопку на окне прижать вправо


Так подходит



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




Пост N: 3124
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.04.20 12:42. Заголовок: Andrey пишет Ещё одн..


Andrey пишет
 цитата:
Ещё одно уточнение, кнопку на окне прижать вправо по месту окончания объекта EDITBOX,
красивей будет !


Вот, вот, тут и начинается ... у каждого свое.
А почему слева под image пусто, надо editbox под image и на всю ширину окно, но с отступами, а до edit заголовок (справа от image) и т.д. и т.п.

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




Пост N: 3125
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.04.20 12:58. Заголовок: PS Использование TsB..


PS
Использование TsBrowse, вместо editbox - более интересно, на мой взгляд

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




Пост N: 6619
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.04.20 21:25. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Так подходит


Отлично !

SergKis пишет:

 цитата:
Использование TsBrowse, вместо editbox - более интересно, на мой взгляд


Да, если нужен полный журнал этих ошибок для правки.

Но как правило юзер живёт своими измерениями.
Если выводить 5 сточек ошибок, то опять нужен код для учёта.
Вывод сообщения в HMG_Alert(): 10 ошибок + .... и ещё 40 строчек ошибок !
А тут универсальная функция, если не входит список ошибок в границы окна, то EDITBOX со скролингом поможет оценить
юзеру что дофига ошибок, т.е. забыл сделать и юзер вернётся опять в список и исправит что забыл сделать.
Позволяет программисту не думать о кол-ве строк ошибок.


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




Пост N: 3126
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.04.20 22:46. Заголовок: Andrey пишет А тут у..


Andrey пишет
 цитата:
А тут универсальная функция


Editbox универсальности практически не добавляет, а тсб с массивом\алиасом решает до фига.
Наверно половину окон с таблицами заменит, надо только немного из bInit подстроить работу, колонки, header, footer, ...
Если окну добавить режим CHILD к MODAL, то получишь, действительно, универсальное окно. Т.е. задав только (хотя бы в размерах editbox)
 
DEFINE TBROWSE Tsb_Alert AT nY,nX WIDTH nW HEIGHT nH ALIAS xArray CELL
:nHeightHead := 1
END TBROWSE

уже будешь иметь таблицу замену editbox, если xArray многоколоночный массив, то и таблица с колонками, если xAlias это ALIAS области, то можешь в bInit настроить на :LoadFields(). И т.д. настройки ...

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




Пост N: 3127
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.04.20 09:08. Заголовок: Пример BASIC\Edi..


Пример BASIC\EditBox модифицированный Скрытый текст

Листаем pgDn станицами до индикации Row: 385 Col: 1
Жмем pgDn и получаем индикацию Row: 3 Col: 37 , в просмотре, как бы все правильно.
Но нажав стрелку вверх, пару раз, улетаем в начало строк. Наличие\отсутствие MAXLENGTH не влияет на ситуацию.
Есть, наверно, ограничения на EDITBOX ?
У Андрея, как понимаю, происходит чтение файла и показ в HMG_Alert() и возникнут вопросики в связи с EDITBOX.
Вот вырезка с его тестового примера
 
cText := ""
FOR nI := 1 TO 2150
cText += "Квартира: " + HB_NtoS(nI) + " не заполнен тариф оплаты ! . ;"
NEXT
...
cMsg := cText

// высчитываем размерность текста
cMsg := AtRepl( ";", cMsg, CRLF )
cMsg := StrTran(cMsg, CRLF, chr(10)) // если текст кривой
cMsg := StrTran(cMsg, chr(10), CRLF)
...
@ nG, nCMemo EDITBOX Edit_Memo WIDTH nWMemo HEIGHT nHMemo ;
VALUE cMsg READONLY ;
BACKCOLOR aEBoxBack FONTCOLOR aFontColor
...

т.е. HSCROLL назначен, но не работает, на контроле он присутствует, но без ползунка и включается перенос\искажение текста по разным строкам.
Т.е. в начале ok! в конце ерунда.
 
Квартира: 1 не заполнен тариф оплаты ! .
Квартира: 2 не заполнен тариф оплаты ! .

Квартира: 3 не заполнен тариф оплаты ! .
Квартира: 4 не заполнен тариф оплаты ! .

Квартира: 5 не заполнен тариф оплаты ! .
Квартира: 6 не заполнен тариф оплаты ! .

Квартира: 7 не заполнен тариф оплаты ! .
Квартира: 8 не заполнен тариф оплаты ! .
...
Квартира: 2133 не заполнен тариф оплаты ! .
Квартира: 2134 не
заполнен тариф оплаты ! .
Квартира: 2135 не заполнен тариф оплаты ! .
Квартира: 2136
не заполнен тариф оплаты ! .
Квартира: 2137 не заполнен тариф оплаты ! .
Квартира:
2138 не заполнен тариф оплаты ! .
Квартира: 2139 не заполнен тариф оплаты ! .

Квартира: 2140 не заполнен тариф оплаты ! .
Квартира: 2141 не заполнен тариф оплаты !
.
Квартира: 2142 не заполнен тариф оплаты ! .
Квартира: 2143 не заполнен тариф оплаты !
.
Квартира: 2144 не заполнен тариф оплаты ! .
Квартира: 2145 не заполнен тариф оплаты
! .
Квартира: 2146 не заполнен тариф оплаты ! .
Квартира: 2147 не заполнен тариф
оплаты ! .
Квартира: 2148 не заполнен тариф оплаты ! .
Квартира: 2149 не заполнен
тариф оплаты ! .
Квартира: 2150 не заполнен тариф оплаты ! .



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




Пост N: 3128
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.04.20 09:13. Заголовок: PS Размер width у ED..


PS
Размер width у EDITBOX достаточный для показа любой всей строки из показанных, справа места от CRLF много

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




Пост N: 6648
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.05.20 08:57. Заголовок: Всем привет ! Почем..


Всем привет !

Почему по коду идёт вот такая ошибка:
Error MGERROR/0 Only Panel windows can be defined inside a DEFINE WINDOW...END WINDOW structure. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(100) in module: h_error.prg
Called from _DEFINEWINDOW(150) in module: h_windows.prg
Called from WAITWINDOW(2742) in module: h_windows.prg
Called from CREATEDATOSPRND31(783) in module: Tsb_demo7.prg


При вызове вот этой функции WaitWindow( 'Загрузка базы ...', .T. ) // open the wait window


И можно это малюсенькое окошечко сделать крупней ?
Юзера на своих мониторах просто не замечают.

Может через параметр передавать хотя бы:
WaitWindow( 'Загрузка базы ...', .T. , 500,200,RED,"DejaVu Sans Mono",16,YELLOW)
где RED - цвет фона формы, YELLOW-цвет текста формы

И будет юзеру счастье ....

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




Пост N: 6767
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.20 09:03. Заголовок: Последняя версия Мин..


Последняя версия МиниГуи.
Использую ТСБ, в нём:
 
// удаление/восстановление записи разрешена
// кнопка для удаления, будет работать и на восстановление
:SetDeleteMode( .T., .F., {|| AlertYesNo(iif((oBrw:cAlias)->(Deleted()), "Восстановить", "Удалить") + ;
" запись в таблице ?", "Подтверждение") } )

по клавише DEL вызов функции в которой:
   lDelete := (oBrw:cAlias)->(Deleted()) 
.....
IF !lDelete
cMsg := "1) ....;;"
cMsg += "Вы действительно хотите удалить запись в таблице ?"
aColors := _SetMsgAlertColors( {179, 30, 173} )
IF !AlertYesNo( cMsg, "Выбор действия", , "Cancel64x1", 64 , {RED,LGREEN} )
RETURN NIL
ENDIF
SET MSGALERT BACKCOLOR TO aColors
ENDIF

// встроенный метод для удаления текущей записи
lChange := oBrw:DeleteRow(.F., .T.)
....

После вызова первого 1) - AlertYesNo() если нажать ДА, то происходит вылет:
Error BASE/1132 Переполнение массива: Неверное количество аргументов Args: [1] = A { ... } length: 2 [2] = N 3 
--------------------------------- Stack Trace ---------------------------------
Called from EVENTS(337) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1514) in module: h_windows.prg
Called from HMG_ALERT(176) in module: h_alert.prg
Called from _ALERT(115) in module: h_alert.prg
Called from ALERTYESNO(20) in module: h_alert.prg
Called from (b)MYSETEDITTSB(778) in module: Forma_D40setup.prg
Called from TSBROWSE:DELETEROW(3102) in module: h_tbrowse.prg
Called from MYRECNODELETERECOVER(1277) in module: Forma_D40setup.prg
Called from (b)FORM_D40SETUP(272) in module: Forma_D40setup.prg
Called from DO_CONTROLEVENTPROCEDURE(58) in module: h_objmisc.prg
Called from TWNDDATA:DOEVENT(729) in module: h_objects.prg
Called from DO_ONWNDLAUNCH(240) in module: h_objmisc.prg
Called from (b)INIT(123) in module: h_init.prg
Called from EVENTS(1224) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1514) in module: h_windows.prg

Строка 176 в модуле h_alert.prg
ACTIVATE WINDOW ( cForm )
Почему ? Что не хватает ? Потерялось окно ?
P.S. Потом идет вылет на любом AlertXXXX

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




Пост N: 7217
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.07.20 14:43. Заголовок: А если без ТСБ , тож..


А если без ТСБ , тоже глючит в каком нибудь простом примере ?

PS
Чую косяк у тебя где то.......

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




Пост N: 6768
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.20 15:53. Заголовок: Dima пишет: А если ..


Dima пишет:

 цитата:
А если без ТСБ , тоже глючит в каком нибудь простом примере ?


Сделал на простом примере, не вылетает. НО !!!
Потом в другом AlertYesNo() вместо текста ЧЕРНЫЙ КВАДРАТ !
Вот ссылка - https://drive.google.com/file/d/1Qtbatqdha93BUirBsHIj05FL82nG8pxZ/view?usp=sharing
Значит при использовании в блоке кода вылетит точно !

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




Пост N: 6769
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.07.20 16:31. Заголовок: Нашёл при каком вари..


Нашёл при каком варианте сбоит:
      aColors := _SetMsgAlertColors( {189, 30, 73} ) 
SET MSGALERT FONTCOLOR TO YELLOW
IF !AlertYesNo( cMsg, "Выбор действия" , , "iCancel64x1", 64 , {RED,LGREEN} )
SET MSGALERT BACKCOLOR TO aColors
SET MSGALERT FONTCOLOR TO BLACK

RETURN NIL
ENDIF
SET MSGALERT BACKCOLOR TO aColors
SET MSGALERT FONTCOLOR TO BLACK

Повторный вызов любого AlertXXXX - будет сваливаться ...
Кодировать неудобно (зеленым цветом дублирующий код), цвет КРАСНЫЙ окна делаешь для юзера, чтобы впечатлился.
Предлагал же заталкивать цвет фона окна и цвет текста сообщения - параметром последним в этой функции.
Почему ломается код при использовании _SetMsgAlertColors() ?

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




Пост N: 3290
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.07.20 17:37. Заголовок: Andrey Глянь исходн..


Andrey
Глянь исходник
*-----------------------------------------------------------------------------* 
FUNCTION _SetMsgAlertColors( aBackClr, aFontClr )
*-----------------------------------------------------------------------------*
LOCAL aOldClrs := { aBackColor, aFontColor }

IF aBackClr != NIL
aBackColor := aBackClr
ENDIF

IF aFontClr != NIL
aFontColor := aFontClr
ENDIF

RETURN aOldClrs

и что ты проделываешь aColors := _SetMsgAlertColors( {189, 30, 73} ) и
SET MSGALERT BACKCOLOR TO aColors
SET MSGALERT FONTCOLOR TO BLACK
как говорится, "найдите разницу" ?

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




Пост N: 6771
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.07.20 10:36. Заголовок: SergKis пишет: как ..


SergKis пишет:

 цитата:
как говорится, "найдите разницу" ?


Опять заработался я...
Спасибо за подсказку !
Оказывается можно и так делать:
 
SET MSGALERT BACKCOLOR TO {189, 30, 73} STOREIN aColors
SET MSGALERT FONTCOLOR TO YELLOW

IF !AlertYesNo( cMsg2, "Выбор действия" )
SET MSGALERT BACKCOLOR TO aColors[1]
SET MSGALERT FONTCOLOR TO aColors[2]
RETURN NIL
ENDIF

SET MSGALERT BACKCOLOR TO aColors[1]
SET MSGALERT FONTCOLOR TO aColors[2]


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





Пост N: 263
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 01.08.20 15:48. Заголовок: А в AlertYesNo() зву..


А в AlertYesNo() звука нет? Если в других подобных функциях есть звук и возможность его отключения, мне кажется было бы логично везде это сделать.

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




Пост N: 3303
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.08.20 16:43. Заголовок: rvu пишет было бы ло..


rvu пишет
 цитата:
было бы логично везде это сделать.


По мне, звук вообще отключить (у клиента орет и все шарахаются, т.к. после виде всегда громкость стоит).
Звук есть только в ф-ях
1. AlertExclamation() - PlayExclamation()
2. AlertInfo() - PlayAsterisk()
3. AlertStop() - PlayHand()
Добавить звук в ф-ии легко, в AlertYesNo( Message, Title, RevertDefault, Icon, nSize, aColors, lTopMost, bInit )
ltkftnt bInit := {|| PlayHand() } или bInit := {|| TONE(3600) }

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





Пост N: 264
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 01.08.20 18:25. Заголовок: SergKis пишет: По м..


SergKis пишет:

 цитата:
По мне, звук вообще отключить



Я по умолчанию отключаю. Но вдруг кому нравится.

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





Пост N: 310
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 11.03.21 11:11. Заголовок: В программе выставле..


В программе выставлена кодировка 1251.

AlertYesNo() пишет: Да, Нет.
AlertRetryCancel: Retry, Cancel.

Наверное, где-то не включили нужные слова в русскую локализацию. Или так и задумано?

А можно вообще свои слова вставлять в эти функции? Было бы удобно.

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




Пост N: 3600
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.03.21 11:32. Заголовок: rvu проверьте, что д..


rvu проверьте, что дает после SET LANGUAGE TO RUSSIAN
? _HMG_LANG_ID
если не "RU", то
_HMG_LANG_ID := "RU" ; InitMessages() // см. h_init.prg
+
 
*-----------------------------------------------------------------------------*
FUNCTION AlertOkCancel ( Message, Title, nDefaultButton, Icon, nSize, aColors, lTopMost, bInit )
*-----------------------------------------------------------------------------*
LOCAL aOptions := { _HMG_BRWLangButton [4], _HMG_BRWLangButton [3] } // можете поменять на свои тексты

RETURN ( _Alert( Message, aOptions, Title, , hb_defaultValue( nDefaultButton, 1 ), Icon, nSize, aColors, lTopMost, bInit, .T. ) == IDOK )


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





Пост N: 311
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 11.03.21 11:47. Заголовок: SergKis пишет: пров..


SergKis пишет:

 цитата:
проверьте, что дает после SET LANGUAGE TO RUSSIAN
? _HMG_LANG_ID
если не "RU"



Не "RU". Интересно, а почему?

То _HMG_LANG_ID := "RU" ; InitMessages() - Теперь "RU". Но AlertRetryCancel все равно: Retry, Cancel.

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




Пост N: 3601
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.03.21 12:38. Заголовок: rvu смотрите InitMe..


rvu
смотрите InitMessage(), сначала ставятся en тексты, потом от _HMG_LANG_ID == "RU", возможно не все переведено
делайте
t1 := _HMG_BRWLangButton [4]
t2 := _HMG_BRWLangButton [3]
_HMG_BRWLangButton [4] := "текст 1"
_HMG_BRWLangButton [3] := "текст 1"
AlertYsNo(...)
_HMG_BRWLangButton [4] := t1
_HMG_BRWLangButton [3] := t2
или замените не устраивающие тексты в _HMG_... массивах на нужные (свою Ru_InitMessages() заведите)
напишите свою, Андрей написал и использует вездеСкрытый текст


 цитата:
Если хочешь сделать что-то хорошо, сделай это сам



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





Пост N: 312
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 11.03.21 13:18. Заголовок: SergKis пишет: Если..


SergKis пишет:

 цитата:
Если хочешь сделать что-то хорошо, сделай это сам



В идеале — да, но всё самому сделать невозможно. За советы спасибо!

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




Пост N: 7229
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.03.22 14:06. Заголовок: Последняя версия Мин..


Последняя версия МиниГуи. Система Win10 !
При вызове вот этой функции:
WaitWindow( 'Загрузка программы ... ' + GetExeFileName(), .T. )   

Получаю окно без надписи ! Пустое окно ! Как у меня было на Win8.1
Почему ?
Если сделать WaitWindow( 'Загрузка программы ... ', .T. ) то надпись есть.
А как сделать надпись в 2-3 строчки ?

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




Пост N: 4091
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.03.22 22:04. Заголовок: Andrey пишет Получаю..


Andrey пишет
 цитата:
Получаю окно без надписи ! Пустое окно ! Как у меня было на Win8.1
Почему ?
Если сделать WaitWindow( 'Загрузка программы ... ', .T. ) то надпись есть.


Ширина окна ставится
SetProperty( cFormName, "Width", Min( 2 * nWidth, Min( GetDesktopWidth(), 800 ) ) )
Если текст шириной больше ширины окна, то вкл. timer прокрутки текста в label
Наверно, тут не клеится с ним и прокруткой. Если текст короткий, то все работает как надо.

 цитата:
А как сделать надпись в 2-3 строчки ?


Как то так. Пример Скрытый текст


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




Пост N: 4092
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.03.22 15:48. Заголовок: Поправил ф-ю WaitWin..


Поправил ф-ю WaitWindow() Скрытый текст


Пример Скрытый текст


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




Пост N: 2021
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.03.22 10:06. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил ф-ю WaitWindow()


Ok

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




Пост N: 7230
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.03.22 12:21. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил ф-ю WaitWindow()


А сразу туда нельзя добавить несколько строк для разделителя ";" или CRLF ?
Несколько добавочных строк и можно будет не делать свою отдельную функцию.
Плюс к этому добавить ещё 2 параметра
       WaitWindow ( cMessage, lNoWait, nWidth, nSize, cFont, aBackColor, aFontColor ) 

И будет законченное решение.

Я конечно сам могу себе сделать свою функцию, но хочется иметь готовую стандартную функцию, где это всё уже есть.

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




Пост N: 4093
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.03.22 13:05. Заголовок: Andrey пишет Я конеч..


Andrey пишет
 цитата:
Я конечно сам могу себе сделать свою функцию, но хочется иметь готовую стандартную функцию, где это всё уже есть.


Можно сделать. Надо перенести код из примера ToWaitWindow(...) в WaitWindow(). Даже была мысль такая, но надо для массива иметь доступ к ф-ям расчета от dlu, для "правильных" пропорций размеров от фонта, а для этого нужен set oop on. Другие расчеты размеров, по мне, не очень подходят и саму ф-ю надо сильно переписать.
Не знаю, надо ли ?

PS
По поводу aBackColor, aFontColor
cWWname := WaitWindow(...)
SetProperty(cWWname, "Message", "FontColor", aFontColor )
SetProperty(cWWname, "Message", "BackColor", aBackColor )
Если надо. Это вполне можно на #xcommand вынести
А есть еще свойства фонта BOLD, ITALIC ..., как с ними быть ..., т.е. ограничения есть, все в ф-ю WaitWindow(...) не засунешь
Можно и параметры в ф-ю добавить, но для однострочного вывода, по мне, это не так актуально, но сделать просто, добавив в
@ nY, nX LABEL Message ;
...
BACKCOLOR aBackColor FONTCOLOR aFontColor

PS2
Имея cWWname можно на окно ProgressBar добавлять самостоятельно, по аналогии с примером выше и "двигать" его, а не счетчик

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




Пост N: 7231
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.03.22 19:37. Заголовок: WaitWindow ( cMessag..


WaitWindow ( cMessage, lNoWait, nWidth, nSize, cFont, aBackColor, aFontColor ) 

Высоту строк считать просто от параметра nSize, остальное BOLD, ITALIC не нужно.

SergKis пишет:

 цитата:
Можно и параметры в ф-ю добавить, но для однострочного вывода, по мне, это не так актуально, но сделать просто, добавив в
@ nY, nX LABEL Message ... ;
BACKCOLOR aBackColor FONTCOLOR aFontColor


Сделай пожалуйста правильно, а то я опять сделаю и Григорию не понравиться !
Хочется иметь стандартную ПРОСТУЮ функцию, остальные требуют отдельного подключения к проектам.

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




Пост N: 4094
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.03.22 20:53. Заголовок: Andrey пишет Высоту ..


Andrey пишет
 цитата:
Высоту строк считать просто от параметра nSize,


Приемлемо на 11', 14' (что под рукой) отображение идет от nSize := 10 до nSize := 18, при выводе массива или одной строки. За пределами этого - искажения отображения. Это при условии, что в WaitWindow(...) сделал правку высоты
Default nHeight := nSize + 14
вместо
Default nHeight := nSize + 8
Если такой вариант использования устраивает, то можно сделать вывод строки и массива в WaitWindow(...) с указанными параметрами.

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




Пост N: 7232
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.03.22 21:56. Заголовок: SergKis пишет: Если..


SergKis пишет:

 цитата:
Если такой вариант использования устраивает, то можно сделать вывод строки и массива в WaitWindow(...) с указанными параметрами.


Да, устраивает !

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




Пост N: 4095
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.03.22 15:23. Заголовок: Andrey пишет Хочется..


Andrey пишет
 цитата:
Хочется иметь стандартную ПРОСТУЮ функцию, остальные требуют отдельного подключения к проектам.


WaitWindow(...) получилась такая Скрытый текст


Пример использования Скрытый текст


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




Пост N: 2023
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.03.22 20:23. Заголовок: SergKis пишет: Wait..


SergKis пишет:

 цитата:
WaitWindow(...)


Принято
Благодарю за помощь

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




Пост N: 7234
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.03.22 08:08. Заголовок: Что то не работает ф..


Что то не работает фон окна и вообще оно пропадает !
   cForm := WaitWindow( "... Запуск программы ...;"+cNam, .T., 700, nSize, YELLOW, RED ) 


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




Пост N: 2024
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.03.22 09:42. Заголовок: Andrey пишет: вообщ..


Andrey пишет:

 цитата:
вообще оно пропадает


А если записать так:


 цитата:
cForm := WaitWindow( "... Запуск программы ...;"+cNam, .T., 700, nSize, NIL, YELLOW, RED )



Кстати, выложил "тихое" обновление с учетом предложенных изменений для функции WaitWindow().

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




Пост N: 7236
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.03.22 09:57. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
А если записать так:


Как всегда, слона cFont и не заметил. Спасибо !

Добавил в h_windows.prg вот так:
         IF hb_osIsWin10() 
SetProperty( cFormName, "Height", GetProperty( cFormName, "Height" ) + 7 )
SetProperty( cFormName, "BackColor", nRGB2Arr( GetSysColor( COLOR_WINDOW ) ) )
ENDIF

IF hb_IsArray(aBackColor)
SetProperty( cFormName, "BackColor", aBackColor )
ENDIF

Ну не видят юзера серый цвет, от слова СОВСЕМ НЕ ВИДЯТ.
БОЛЬШАЯ просьба добавить это в исходник.
А как убрать беленькую полоску в титуле окна ?


Вот есть такое - https://docs.microsoft.com/ru-ru/windows/apps/develop/title-bar?tabs=wasdk
И ещё - https://translated.turbopages.org/proxy_u/en-ru.ru.740f60a8-6229ca4d-aa890b0b-74722d776562/https/stackoverflow.com/questions/70446389/how-to-recolor-windows-forms-title-bar-c-sharp

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




Пост N: 4097
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.03.22 13:50. Заголовок: gfilatov2002 Нельзя..


gfilatov2002
Нельзя сделать ширину окна > 800, это, наверно, неправильно, т.е. задать
 
LOCAL cNam := hb_FNameName( hb_ProgName() )
LOCAL cForm, nSize := 16
LOCAL nW := GetDesktopWidth() * 0.95

// Первый тест - строка
cForm := WaitWindow( "... Запуск программы ...;"+hb_ProgName(), .T., nW, nSize, NIL, YELLOW, BLUE )

Предлагаю правку
 
...
LOCAL lWidth := ( nWidth == NIL )
...
nHeight := GetTextHeight ( NIL, "A", hFont )

IF lWidth
nWidth := GetTextWidth( NIL, cTmp, hFont ) + nX * 2
nWidth := Min( 2 * nWidth, 800 )
ELSEIF Empty( nWidth ) .or. nWidth < 0
nWidth := GetTextWidth( NIL, cTmp+Replicate("A", 5), hFont ) + nX * 2
ENDIF

DeleteObject( hFont )

nHeight += 8

IF lNoWait
_HMG_IsModalActive := .F.
DEFINE WINDOW _HMG_CHILDWAITWINDOW CHILD
ELSE
DEFINE WINDOW _HMG_CHILDWAITWINDOW MODAL
ENDIF

//SetProperty( cFormName, "Width", Min( 2 * nWidth, Min( GetDesktopWidth(), 800 ) ) )
SetProperty( cFormName, "Width", Min( GetDesktopWidth(), nWidth ) )

SetProperty( cFormName, "Height", nHeight * nK + nY * 2 + GetBorderHeight() )

SetProperty( cFormName, "Title", "" )
SetProperty( cFormName, "TitleBar", .F. )
SetProperty( cFormName, "SysMenu", .F. )

IF hb_osIsWin10()
SetProperty( cFormName, "Height", GetProperty( cFormName, "Height" ) + 7 )
SetProperty( cFormName, "BackColor", nRGB2Arr( GetSysColor( COLOR_WINDOW ) ) )
ENDIF

IF HB_ISARRAY( aBackColor )
SetProperty( cFormName, "BackColor", aBackColor )
ENDIF

nW := GetProperty( cFormName, "ClientWidth" ) - nX * 2
...

тогда проходят варианты
LOCAL nW := GetDesktopWidth() * 0.95

cForm := WaitWindow( "... Запуск программы ...;"+hb_ProgName(), .T., nW, nSize, NIL, YELLOW, BLUE )
и
cForm := WaitWindow( "... Запуск программы ...;"+hb_ProgName(), .T., 0, nSize, NIL, YELLOW, BLUE )
расчет от текста ширины окна

Возможно, надо добавить вариант Андрея с заголовком окна, т.е. совсем без него
DEFINE WINDOW ... CHILD ... NOSIZE NOSYSMENU NOCAPTION ...
и
DEFINE WINDOW ... MODAL ... NOSIZE NOSYSMENU NOCAPTION ...

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




Пост N: 7238
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.03.22 13:59. Заголовок: Я уже попробовал. Не..


Я уже попробовал. Не особо красиво, текст прилипает к вверху окна. Нужно делать отступ от верха окна.
И нет теней для окна на Win10, и окантовки нет. Может на других ОС будет красиво, но я не могу пока проверить это.

Взял тихое обновление Григория и облом с моим примером, серый фон и блеклые жёлтые буквы на нём.
Нужно делать так:
         IF hb_osIsWin10() 
SetProperty( cFormName, "Height", GetProperty( cFormName, "Height" ) + 7 )
SetProperty( cFormName, "BackColor", nRGB2Arr( GetSysColor( COLOR_WINDOW ) ) )
//ELSEIF HB_ISARRAY( aBackColor )
// SetProperty( cFormName, "BackColor", aBackColor )

ENDIF
IF HB_ISARRAY( aBackColor )
SetProperty( cFormName, "BackColor", aBackColor )
ENDIF

Свой пример выкладываю - https://cloud.mail.ru/public/FVpn/Bh6MHPvKU

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




Пост N: 4098
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.03.22 20:04. Заголовок: Andrey пишет Я уже п..


Andrey пишет
 цитата:
Я уже попробовал. Не особо красиво, текст прилипает к вверху окна. Нужно делать отступ от верха окна.


Вот что получилось у меня WaitWindow(...) Скрытый текст

Пример Скрытый текст


 цитата:
И нет теней для окна на Win10, и окантовки нет


На счет окантовки есть ф-я, которая может делать окантовку с закругленными углами, ее можно тут применить. Но я не вспомнил ее название, а пример использования не нашел. Найди и можно вставить для пробы

PS
CLIENTAREA Min( GetDesktopWidth(), nWidth ), nHeight * nK + nY * 2
Вместо GetDesktopWidth() можно исп. GetDesktopRealWidth()

PS2
 
IF hb_osIsWin10()
SetProperty( cFormName, "Height", GetProperty( cFormName, "Height" ) /*+ 7*/ )

Выделенное цветом, по мне лишнее, т.е. эту строку можно убрать

Пример и h_windows.prg со всеми исправлениями WaitWindow() https://TransFiles.ru/sczh6

PS
Пример с заголовком окна https://TransFiles.ru/o6uph
В h_windows.prg добавил правку
 
IF lNoWait
_HMG_IsModalActive := .F.
IF lNoCapt
DEFINE WINDOW _HMG_CHILDWAITWINDOW CHILD CLIENTAREA nW, nH NOSIZE NOSYSMENU NOCAPTION
ELSE
nH -= GetTitleHeight()

DEFINE WINDOW _HMG_CHILDWAITWINDOW CHILD CLIENTAREA nW, nH
ENDIF
ELSE
IF lNoCapt
DEFINE WINDOW _HMG_CHILDWAITWINDOW MODAL CLIENTAREA nW, nH NOSIZE NOSYSMENU NOCAPTION
ELSE
nH -= GetTitleHeight()

DEFINE WINDOW _HMG_CHILDWAITWINDOW MODAL CLIENTAREA nW, nH
ENDIF
ENDIF


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




Пост N: 4099
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.03.22 11:03. Заголовок: Andrey пишет окантов..


Andrey пишет
 цитата:
окантовки нет


Вариант окантовки (добавка в h_windows.prg из последнего архива пред поста)
 
FUNCTION WaitWindow ( cMessage, lNoWait, nWidth, nSize, cFont, aFontColor, aBackColor, lNoCapt, aPenColor, nPen )
...
NEXT

IF HB_ISARRAY( aPenColor )
nPen := iif( Empty( nPen ), 2, nPen )
nI := nPen - 1
nY := nX := nI
nH := ThisWindow.ClientHeight - nI
nW := ThisWindow.ClientWidth - nI
DrawRect( cFormName, nY, nX, nH, nW, aPenColor, nPen )
ENDIF

IF lWidth .AND. GetProperty( cFormName, "Width" ) < 2 * nWidth
SetProperty( cFormName, "Message", "Value", "" )
_DefineTimer( "Timer", cFormName, 100, {|| EfeitoLabel( cMessage[ 1 ] ) } )
ENDIF
...

Пример Скрытый текст


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




Пост N: 7239
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.03.22 15:28. Заголовок: Круто ! То что надо ..


Круто ! То что надо для юзера ! Спасибо БОЛЬШОЕ !
Пошёл переделывать проги.

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




Пост N: 4100
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.03.22 17:58. Заголовок: Andrey пишет Пошёл п..


Andrey пишет
 цитата:
Пошёл переделывать проги.


Еще пример с добавленным ProgressBar к строкам массива Скрытый текст


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




Пост N: 4101
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.03.22 21:34. Заголовок: PS Пример с изменени..


PS
Пример с изменением размера окна для ProgressBar оставляет снизу лишнюю полоску.
Лучше применить др. методу замены элемента массива для размещения ProgressBar
Пример Скрытый текст


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




Пост N: 4102
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.03.22 13:34. Заголовок: Не знаю, актуально и..


Не знаю, актуально или уже нет, WaitWindow(...) такая вышла Скрытый текст


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




Пост N: 7240
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.03.22 15:29. Заголовок: SergKis пишет: Не з..


SergKis пишет:

 цитата:
Не знаю, актуально или уже нет, WaitWindow(...) такая вышла


Конечно актуально !
Классно получилось !
Григорий, ждем исправленную функцию в библиотеке.

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

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