Форум » GUI » Кто как делает » Ответить

Кто как делает

Vlad04: Любая программа - это много справочников. Хотелось бы создать универсальную простую форму с одним Brows для поиска и выбора значений из различных справочников. Не беру во внимание Комбобокс и ЛистБокс - это другой случай. В консоле я так и делаю.Один Brows , ему передаю в качестве параметром : алиасы, колонки , поля и т.д. А вот в Gui не получается. Описывать каждый справочник в программнике не хочется. Кто как делает? Спасибо

Ответов - 29, стр: 1 2 All

Andrey: Vlad04 пишет: Кто как делает? Я тоже над этим задумывался.... Наверно так же нужно делать - "Один Brows , ему передаю в качестве параметром : алиасы, колонки , поля и т.д. " Но с Brows пока не работал...

gfilatov2002: Vlad04 пишет: Один Brows , ему передаю в качестве параметром : алиасы, колонки , поля и т.д. Если речь идет о библиотеке минигуи, то могу порекомендовать в качестве стартового примера универсальный просмотровщик/редактор из папки samples\Basic\BROWSE_8, в котором это делается таким образом: Use (File) Shared New nCamp := Fcount() aEst := DBstruct() aNomb := {'iif(deleted(),0,1)'} ; aJust := {0} ; aLong := {0} ; aFtype := {} For i := 1 to nCamp aadd(aNomb,aEst[i,1]) aadd(aFtype, aEst[i,2]) aadd(aJust,LtoN(aEst[i,2]=='N')) aadd(aLong,Max(100,Min(160,aEst[i,3]*14))) Next CreaBrowse( Alias(), aNomb, aLong, aJust, aFtype )

Vlad04: Кое- что получилось. http://files.mail.ru/7A65ECD6CA7F40CDA58BEC920DF2D73F За основу взят BROWSE_8. Надо добавить навигацию по базе, поиск и т.д.


Andrey: Vlad04 пишет: Кое- что получилось. Здорово. Выкладываю свой пример (на базе Tsb_filter), может кому нужно. http://files.mail.ru/18266882AACD47AEB6C1A0CC2AB4A4A8

Vlad04: Красивое оформление ! Но больше 4-х цветов не рекомендуют применять

Andrey: Vlad04 пишет: Но больше 4-х цветов не рекомендуют применять Почему ? Оформление нужно делать в любом случае. Чтобы программа запоминалось !

Andrey: gfilatov2002 пишет: могу порекомендовать в качестве стартового примера универсальный просмотровщик/редактор из папки samples\Basic\BROWSE_8 Вот вопрос про этот BROWSE: В каком примере можно посмотреть использование полноцветных (24bit) иконок или bmp-файлов ?

ММК: Andrey пишет: Vlad04 пишет:  цитата: Но больше 4-х цветов не рекомендуют применять Почему ? Оформление нужно делать в любом случае. Чтобы программа запоминалось ! Очень здорово запустить яркую, восхитительно "раскрашенную " пр-му , получить удовольствия от картинки и ... забыть о ней на всю оставшеюся жизнь. И совсем другое каждый день по несколько часов пялиться на агресивный набор ярких пятен Смысл уже до тошноты известен , а интересует только изменение информации и работа с ней. Вот поэтому так и советуют.... Vlad04 пишет: В консоле я так и делаю.Один Brows , ему передаю в качестве параметром : алиасы, колонки , поля и т.д. А вот в Gui не получается. Описывать каждый справочник в программнике не хочется. Кто как делает? Почему не получается? Можно , но описывать проще и удобнее. Под виндой возможностей больше и информативность выше. Различные заголовки ( а не имена полей ) , возможность использовать их как кнопки. Набор управления, фильтрация и т.д. Поэтому такой вариант( передавать все при вызове ) для меня не очень удобноый. Один и тот же справочники может иметь три варианта: 1. Чисто справочная информация. Добавляется управление (2) , видно по каким полям есть индексация и ее переключение (1), фильтры, поиск, выгрузка в ворд(ексел) и т.д. 2. Справочник используется для заполнения каких-то форм 3. Непосредственная работа со справочником (редактирование ) Вот в соответствии с вышеизложенным при обращении к справочнику указываю какой справочник и его вид. Вся обработка собраноа в отдельном модуле и все однотипно Сначало описывается все общее- окно(диалог) , цвета, фонты и т.д. , а потом информация для справочников (базы, расположение, размеры окон) Do case case PrSp=1 //+++++++++++++++++++++++++ Select Pl Dbgotop() DEFAULT cTiti := "площадки" L_poi:=.T. _Y:=78 _X:=22 case PrSp=2 //+++++++++++++++++++++++++ Select Ce Dbgotop() DEFAULT cTiti := "цеха" _Y:=78 _X:=22 L_poi:=.T. ................... И дальше формирование бровсов с учетом разрешенных операций и необходимых действий (то,что задано при вызове). В таком виде легко править, изменять и использовать одинаковые методы для всех справочников.

Vlad04: Спасибо, всем. Толкнули в нужную сторону. Уже получается. На первом этапе сделаю общий бровз по классификации ММК для 2. Справочник используется для заполнения каких-то форм Это позволит значительно упростить и ускорить разработку. А дальше увеличивать его функционал

Andrey: ММК пишет: В таком виде легко править, изменять и использовать одинаковые методы для всех справочников. Это хорошо, когда задача одна ! А если несколько задач похожих ? Я имею один универсальный exe-ник и к нему идет файл ini (настройки/обработки) этого ехе-ника. ИНИ-ник управляет всеми меню, поведением программы. Файл зашифрован, чтобы чужие шаловливые ручки не лазили. Вызов справочника в ини-файле: [Справочники_БД] Меню 1 = {" Cправочники Фирмы/Реквизитов,Филиалов ... ", "MenuPopUp" , "Cправочники_Фирмы_Филиалов",,} Меню 2 = {" Адресные справочники .................... ", "MenuPopUp" , "Адресные_справочники",,} Меню 3 = {" Справочник мастеров и сотрудников ", "Spravki" , "Справочник_сотрудников",, } Меню 4 = {" Справочник Банк получателя ", "Spravki" , "Справочник_Банк_получателя",,} Меню 5 = {" Справочник Оплаты ", "Spravki" , "Справочник_Оплаты",,} Меню 6 = {" Cправочники УЧЕТНЫЕ и ОБОРУДОВАНИЯ ...... ", "MenuPopUp" , "Справочники_учетные" ,,} Меню 7 = {" Cправочники ДОПОЛНИТЕЛЬНЫЕ .............. ", "MenuPopUp" , "Справочники_Дополнительные" ,,} Меню 8 = {" Выход из меню ", "Exit" , "",,} Название меню = "Выбор справочников" Координата У = 2 Координата Х = 15 Цвет меню = "15/1" Заголовок меню = "14/1" Проверка = "нет" Номер помощи = 1 Цвет помощи = "11/1" Кол-во строк помощи = 1 Пример обработки справочника: [Справочник_сотрудников] Экран в библиотеке = 9 Координаты окна = {0,0,24,79} Цвет окна = "14/8" Цвет справочника = "15/2" Цвет заголовка = "14/2" Координаты DbEdit = {2,2,22,76} Цвет бегунков = "0/15,0/15" ; //* --- цвет GET Tbrowse Цвет DbEdit = "14/0,0/12" ; //* -------- Цвет условий в TBrowse ---------------------- Цвет_условия_1 = { { || KDel == 0 }, "4/2" } Цвет_условия_2 = { { || KDel == 1 }, "14/2" } Цвет_условия_3 = { { || KDel == 2 }, "0/2" } Цвет_условия_4 = { { || KDel == 3 }, "15/2" } Цвет_условия_5 = { { || KDoljn == 0 }, "12/2" } ; //* -------- Открытие баз данных в TBrowse --------------- База 1 = { "Master.dbf" , "Master0" , "Master2" , "Master" , "SHARED" , 3 } База 2 = { "Fili.dbf" , "Fili0" , "Fili2" , "Fili" , "SHARED" , 3 } База 3 = { "mastdel.dbf" , "mastdel0" , "mastdel2" , "mastdel" , "SHARED" , 3 } База 4 = { "Doljn.dbf" , "Doljn0" , "Doljn2" , "Doljn" , "SHARED" , 3 } База основная = "Master" Фильтрация базы = {.F.,NIL,0,"N"} Индекс ключ 1 = { "Master0", "KMaster" } Индекс ключ 2 = { "Master2", "Master" } Связь 1 = { "KFili" , "FILI" } Связь 2 = { "KDel" , "MastDel" } Связь 3 = { "KDoljn", "Doljn" } Ключ по полю = "KMaster" Ордер фокуса = 3 Массив полей = {"KMaster" , "Master" , "Doljn->Doljn" , "MastDel->MastDel" , "FILI->FILI" } Массив названий = {";NN" , "Ф.И.О.;сотрудника" , "Должность;сотрудника" , "Статус;сотрудника" , "Филиал" } Массив форматов = {"999" , "@S29 "+REPLICATE("x",30) , "xxxxxxxxxxxxxxxxxx" , "xxxxxxxxxxxxxx" , "xxxxxxxxxxxxxxxxxxxx" } Массив доступа = {"W" , "W" , "S" , "S" , "S" } ДОСТУП ФИЛИАЛА = {"R" , "R" , "S" , "S" , "R" } Массив записи = {"" , "" , {"Doljn","KDoljn","Doljn","Doljn2"} , {"MastDel","KDel","MastDel","MastDel2"} , {"Fili","KFili","Fili","Fili2"} } Массив типов = {"N" , "C" , "C" , "C" , "C" } ;//* Форма печати = "spr_mast.lsr" ;//* дополнительный индекс показа Создать индекс = "STR(KDel)+UPPER(Master)" Меню_печати_FR = {" 1.Форма-стандартная A4 (форма M1) " } Форма_печати_FR = {"SPRAV\masters_m1.fr3" } ММК Красивые у тебя программы ! Я тоже так хочу... Но пока сижу на терминалки и осваиваю МиниГуи. А фотографии сотрудников у тебя в базе сохраняются (тип картинки и база какая - fpt, blob ) ? Просто такое же надо делать, из за этого и спрашиваю.

ММК: Andrey пишет: ММК пишет:  цитата: В таком виде легко править, изменять и использовать одинаковые методы для всех справочников. Это хорошо, когда задача одна ! А если несколько задач похожих ? Имренно для этого это так и сделано Andrey пишет: Я имею один универсальный exe-ник и к нему идет файл ini (настройки/обработки) этого ехе-ника. ИНИ-ник управляет всеми меню, поведением программы. Файл зашифрован, чтобы чужие шаловливые ручки не лазили. Вызов справочника в ини-файле: Посмотрел я , что Вы внесли в INI .Это только часть того, что нужно . Если мне не изменяет память у меня в "кадровой" задаче где-то 60-70 справочников. НЕ говоря о меню и всего остального... Представляете , если все это впереть в INI ?!! Нет конечно... В INI все то , что требуется для настройки задачи на конкретном рабочем месте, плюс набор необходимых констант. И , в соответствии с этим, доступ к нему открыт. Что касается "шаловливых" ручек... exe-ник действительно универсальный и запускается он так - И есть маленькая задача-администратор. В ней этот самый администратор формирует пароль и виды доступа. И вот это уже действительно зашифрованно. Выглядит приблизительно так - Andrey пишет: ММК Красивые у тебя программы ! Спасибо Андрей :)) Andrey пишет: Я тоже так хочу... Но пока сижу на терминалки и осваиваю МиниГуи. Ничего не хочу сказать по поводу МиниГуи , но если уж жизнь так сложилась и у Вас есть FW то поверьте это серьезнее (пока во всяком случае) и хватит Вам на всю оставшеюся трудовую жизнь ( даже если Вы не "отжалеете" немного денег на свежую версию) Andrey пишет: А фотографии сотрудников у тебя в базе сохраняются (тип картинки и база какая - fpt, blob ) ? Нет. Отдельная дер-я. При оформлении человека туда "ложится" его фото хоть на мыльничу снятое( тут-же) .Формат JPG ( можно и бмп , но они гораздо больше ) . Имя фото- табельный номер.

Vlad04: ММК у меня в "кадровой" задаче где-то 60-70 справочников. И столько же условий "case" ? Do case case PrSp=1 //+++++++++++++++++++++++++ Select Pl Dbgotop() Судя по тому что все работает, значит не запутываешься. В консоле у меня все сделано на макроподстановках. В MiniGui макроподстановки во многих случаях не срабатывают

ММК: Vlad04 пишет: И столько же условий "case" ? Да Vlad04 пишет: Судя по тому что все работает, значит не запутываешься. Гораздо проще ,чем с макроподстановками. Более прозрачно . Ведь при формировании бровса достаточно много индивидуальных вещей ( присущих данному справочнику, проверок... Проблемы были с TsBrows. К сожалению Manuel Mercado не смог в силу личных обстоятельст довести ее до ума. Но с xBrows совсем другое дело :)

Pasha: Михаил, а в Белоруссии есть закон о защите ПД ? Я смотрю, в личной карточке есть фотка, а это уже биометрическая информация, по которой более строгие правила ее сбора. Я тоже у себя сначала фотку добавил, пока наш закон не почитал.

Vlad04: Ну а если на форме несколько таблиц вывести ?

ММК: Pasha пишет: Михаил, а в Белоруссии есть закон о защите ПД ? Я смотрю, в личной карточке есть фотка, а это уже биометрическая информация, по которой более строгие правила ее сбора. Я тоже у себя сначала фотку добавил, пока наш закон не почитал. Фотка? Интересно..., но ведь в обменнике делают ксерокопию. Хотя нет :) Это на Украине. А что паспортные данные или подробности личной жизни? Ведь это в картотеке все есть... А по поводу закона не знаю. Может и есть , а может появиться задним числом :) Но сейчас основной интерес в том ,что бы собрать о каждом как можно больше информации. Работа, банк.счет, покупки , интернет , телефон, поездки... Поэтому такой закон может проявиться только в определенной ситуации :) А в карточке есть все , все личное дело . Жены , дети, контракты, назначения, воин. служба, отпуска и т.д. Стыковал с "зарплатой" для передачи информации в другие "организации" . Там то же куда-то передают... При такой цепочке защита понятие более ,чем относительное :(

Pasha: Если такого закона нет, то вам повезло. Одним головняком меньше.

ММК: Pasha пишет: Если такого закона нет, то вам повезло. Одним головняком меньше. Не знаю .Просто не знаю :)) ( во всех смыслах :) ) Vlad04 пишет: Ну а если на форме несколько таблиц вывести ? Можно и несколько. И можно сделать так ,что изменение размеров любого бровса (мышкой) автоматом будет менять положение остальных. Т.к. техника у всех разная , то если задача такой вариант "строго" не требует делаю фолдеры (закладки). Так можно сделать все "полнее" Вот например ассортимент мороженого- в любой момент нажимаем на "состав" и все ,что надо видно .А попутно можно и распечатать :))

Vlad04: ММК Сейчас в fwh есть визуальный дизайнер - visualfw.exe. Вы его используете в работе ?

SergKis: Vlad04 Еще более наглядный способ это написать класс окна с общим оформлением и поведением browse + контролов и наследовать от него для любого другого добавляя или меняя свойства и методы. также можно поступить и для документов, например счет, ттн и т.д. в дальнейшем, при изменении счета, вам надо наследовать от класса старого счета и внести новое поведение. так можно поступать по всем документам и справочникам. case отпадет оперировать будете объектами окон.

Vlad04: Я про это думал. В теории вроде бы понятно,но опыта практического в этом нет. Кто может выложите маленький пример - форма с каким нибудь контролом.

SergKis: Vlad04 Держи: http://gfile.ru/a2Eqw

Vlad04: Круто! Но как говорит Андрей - "Это засада!" Подход иной, разбираться и разбираться надо

ММК: Vlad04 пишет: Сейчас в fwh есть визуальный дизайнер - visualfw.exe. Вы его используете в работе ? Нет. Мне он без надобности :)

ММК: Vlad04 пишет: Кто может выложите маленький пример - форма с каким нибудь контролом. #include "FiveWin.ch" #include "xbrowse.ch" function Main() local oDlg, oBrw DEFINE DIALOG oDlg SIZE 300, 200 @ 0, 0 XBROWSE oBrw OF oDlg ARRAY { { "one","two","three" } } AUTOCOLS oBrw:CreateFromCode() oBrw:bKeyDown = { || oDlg:SetText( Str( oBrw:nColSel ) ) } ACTIVATE DIALOG oDlg CENTER ON INIT ( oDlg:oClient := oBrw, oDlg:Resize() ) return nil По Enter перход на следующее поле ( twoo) и на заголовке 1 меняется на 2. И т.д. :)

SergKis: Vlad04 пишет:Круто! Это не круто - это притягивание за уши MiniGui к объектному программированию. Круто (правильно) это hwg от alkresin, просто когда вышла 2.0 версия hb, версия hwg была 2004,2005 года и показалась брошенной, а MiniGui активно жила.

SergKis: Vlad04 Только начал набирать окно с более сложным алгоритмом Layout размещения контролов - может будет понятнее. еще размещает без отступов между контролами, я еще в начале пути, но если будет полезно, то держи: http://gfile.ru/a2BXD

Andrey: SergKis пишет: Это не круто - это притягивание за уши MiniGui к объектному программированию. Так пример другой ! ММК пишет: #include "FiveWin.ch" #include "xbrowse.ch"

SergKis: Andrey Круто! Но как говорит Андрей - "Это засада!" Подход иной, разбираться и разбираться надо относится к предыдущей статье, а не следующей, или я не так читаю ? а пример MMK - использование объекта xbrowse, в MiniGui такой тоже есть tsbrowse называется и по поведению, мне кажется, они очень похожи, но глубоко в tsbrowse не вникал.



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