Форум » GUI » Вопросы по GRID » Ответить

Вопросы по GRID

evgeny2006: Взял пример /Basic/Grid/demo4.prg/ Нормально работает, но есть вопрос. Почему массив aRows[20][3] так объявлен, хотя фактически имеет размерность [20][5] ? Можно ли сформировать содержимое aRows в процессе выполнения программы ? И как правильно это сделать? Можно ли заполнять массив, например так: aRows [j]=xm[i,j]

Ответов - 18

Andrey: evgeny2006 пишет: Можно ли сформировать содержимое aRows в процессе выполнения программы ? Можно. Только не забываем делать перерисовку после построения массива. Как - смотри в примере https://cloud.mail.ru/public/2cc06ae655a7/866TO1251dbf.7z

Dima: Вообще прикольный способ объявить массив Local aRows [20] [3] Это фича Минигуи ?

SergKis: Dima пишет:Это фича Минигуи ? фичи нет, сначала создан такой подмассив в 3 елемента, а потом переприсвоен в 5 элементов.


Dima: SergKis Да это я тормознул.

evgeny2006: SergKis пишет: фичи нет, сначала создан такой подмассив в 3 елемента, а потом переприсвоен в 5 элементов. Вообще-то интересный подход! Спасибо!!!

Softlog86: Добрый день ! Можно-ли задать высоту строк в контроле GRID ?

Andrey: Softlog86 пишет: Можно-ли задать высоту строк в контроле GRID ? По моему нельзя. Но могу ошибаться. Нужно считать размер высоты букв и подгонять под размер окна. Как это делать ? Есть пример от SergKis, могу выслать.

Softlog86: Вообще-то я хотел сделать таблицу в которой один столбец - это миниатюры (фото товаров) . Поэтому высота строки в таблице - ну точек 50 не меньше . Может быть посоветуете другой способ для реализации задуманного ??

Andrey: Softlog86 пишет: Вообще-то я хотел сделать таблицу в которой один столбец - это миниатюры (фото товаров) . Если нужно менять/добавлять на ходу таблицу то GRID не позволяет добавлять фото (миниатюры). Это мне Григорий писал. Лучше делай через Tbrowse. Вот пример для начала, я его уже здесь выкладывал. Tsb_dir_Ver12.7z в папке https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample

Softlog86: Всё-таки нашел как можно высоту строк задавать ! Standard Window: @ <nRow> ,<nCol> GRID <ControlName> [ ID <nId> ] [ OF | PARENT | DIALOG <ParentWindowName> ] ......... [ IMAGE <acImageNames> ] <----- Высота строки в GRID = Высоте рисунка ! ........

AM: Наверно, сюда. У меня тоже вопрос про GRID. Какой-то малопонятный глюк, похоже на мистику. В окне (не главном) есть TAB, а в нём GRID. Вообще-то GRID'ов несколько, но виден из них, в разных режимах, максимум один. По ON DBLCLICK на каждом из GRID'ов вызывается процедура, в которой создаётся ещё одно окно, если оно уже есть - то просто ему фокус передаётся. Что в этом окне - неважно, я пробовал его и пустым сделать, то же самое. Так вот, после открытия второго окна GRID ведёт себя странно - при щелчке на нём мышью ничего не происходит, только окно выходит на первый план, если было на заднем. Программно поставить фокус на этот самый GRID можно, но и после этого на мышь не реагирует, только на клавиши! Это относится только к GRID'у, из которого была вызвана процедура, открывающая второе окно. Другие контролы, в т.ч. другие GRID'ы, реагируют на мышь нормально. После закрытия второго окна - глюк прекращается. Кто подскажет, как с этим бороться?

Andrey: AM пишет: Кто подскажет, как с этим бороться? Без самодостаточного примера подсказать очень трудно.

AM: Andrey пишет: Без самодостаточного примера подсказать очень трудно. Да, пожалуй, Вы правы. Попробую на неделе отсечь всё лишнее, но чтобы глюк сохранился.

Andrey: AM пишет: Попробую на неделе отсечь всё лишнее, но чтобы глюк сохранился. Вот - вот и я тоже таким делом не раз занимался, отсекал всё лишнее, а потом пример работал как надо. Я МиниГуи только сейчас более-менее понимать начал, хотя уже 3 года его плотно осваиваю, переписываю свои системы. У других может и быстрей освоение происходит...

AM: Андрей, я тоже надеялся, что так будет, глюки уйдут. Но нет. Вот самодостаточный пример: [pre2] #include "minigui.ch" #define U_HEADERS 'Вид','Организация','Директор','Характеристика','Год основания' #define U_WIDTHS 80,150,100,150,130 proc test() DEFINE WINDOW Test_form AT Kadry2Row,Kadry2Col WIDTH 660 HEIGHT 600; TITLE 'Первое окно' child FONT "Arial" SIZE 9 @ 30,50 label lGridTest value 'Можно здесь нажать' width 400; size 12 fontcolor {0,0,100} backColor {180,180,180}; bold height 20 on click MsgInfo('Нажали') @ 75,10 grid GridTest1 width 605 height 115; HEADERS {U_HEADERS} WIDTHS {U_WIDTHS}; FONT "Times New Roman" SIZE 14 FONTCOLOR BLUE BACKCOLOR {222,222,222}; on DblClick Test2(This.Item(This.Value)[2]+'; '+; This.Item(This.Value)[3]+' - '+This.Item(This.Value)[4]) @ 225,10 grid GridTest2 width 605 height 115; HEADERS {U_HEADERS} WIDTHS {U_WIDTHS}; FONT "Times New Roman" SIZE 14 FONTCOLOR BLUE BACKCOLOR {222,222,222}; on DblClick Test2(This.Item(This.Value)[2]+'; '+; This.Item(This.Value)[3]+' - '+This.Item(This.Value)[4]) END WINDOW uData={{'ВИД 1','Парадиз','Вася','хороший','1999'},; {'ВИД 2','Анимир','Дуся','плохая','1990'},; {'ВИД 3','Харе Кришна','Миша','мутный','1989'},; {'ВИД 4','Комода','Изя','просто мутант','1893'},; {'ВИД 5','Мироед','Света','плохая','1981'},; {'ВИД 6','Гоп секс','Грета','хорошая','1950'},; } for i=1 to 3 DoMethod('Test_form','GridTest1','AddItem',uData[ i ]) next i for i=4 to 6 DoMethod('Test_form','GridTest2','AddItem',uData[ i ]) next i ACTIVATE WINDOW Test_form return proc Test2(par) if lw:=_IsWindowDefined('Test2') //уже было открыто SetProperty('Test2','dType1','Value',par) DoMethod('Test2','SetFocus') else //не было открыто DEFINE WINDOW Test2 AT 60,60 WIDTH 460 HEIGHT 600; TITLE 'Второе окно' child FONT "Arial" SIZE 9 @ 10,10 label dType1 transparent bold size 12 value par; fontcolor {0,0,100} width 300 END WINDOW endif //было/не было окно открыто if !lw ACTIVATE WINDOW Test2 endif return [/pre2] Даже после обрезки получается тот самый эффект, о котором я писал. Тот из двух GRID'ов, из которого открывается второе окно - перестаёт реагировать на мышь, только на клавиши, пока не закроем второе окно. Другой же работает как надо. Кто подскажет, что я делаю не так? Блин, почему убираются отступы? Программа становится нечитаемой!

Haz: AM пишет: Вот самодостаточный пример: Второе окошко нужно активировать раньше #include "minigui.ch" #define U_HEADERS 'Вид','Организация','Директор','Характеристика','Год основания' #define U_WIDTHS 80,150,100,150,130 proc test() DEFINE WINDOW Test_form AT 100,100 WIDTH 660 HEIGHT 600; TITLE 'Первое окно' main FONT "Arial" SIZE 9 @ 30,50 label lGridTest value 'Можно здесь нажать' width 400; size 12 fontcolor {0,0,100} backColor {180,180,180}; bold height 20 on click MsgInfo('Нажали') @ 75,10 grid GridTest1 width 605 height 115; HEADERS {U_HEADERS} WIDTHS {U_WIDTHS}; FONT "Times New Roman" SIZE 14 FONTCOLOR BLUE BACKCOLOR {222,222,222}; on DblClick Test2(This.Item(This.Value)[2]+'; '+; This.Item(This.Value)[3]+' - '+This.Item(This.Value)[4]) @ 225,10 grid GridTest2 width 605 height 115; HEADERS {U_HEADERS} WIDTHS {U_WIDTHS}; FONT "Times New Roman" SIZE 14 FONTCOLOR BLUE BACKCOLOR {222,222,222}; on DblClick Test2(This.Item(This.Value)[2]+'; '+; This.Item(This.Value)[3]+' - '+This.Item(This.Value)[4]) END WINDOW DEFINE WINDOW Test2 AT 60,60 WIDTH 460 HEIGHT 600; TITLE 'Второе окно' child FONT "Arial" SIZE 9 NOSHOW ON INTERACTIVECLOSE {|| This.Hide , .F.} @ 10,10 label dType1 transparent bold size 12 value "AAA"; fontcolor {0,0,100} width 300 END WINDOW uData={{'ВИД 1','Парадиз','Вася','хороший','1999'},; {'ВИД 2','Анимир','Дуся','плохая','1990'},; {'ВИД 3','Харе Кришна','Миша','мутный','1989'},; {'ВИД 4','Комода','Изя','просто мутант','1893'},; {'ВИД 5','Мироед','Света','плохая','1981'},; {'ВИД 6','Гоп секс','Грета','хорошая','1950'},; } for i=1 to 3 DoMethod('Test_form','GridTest1','AddItem',uData[ i ]) next i for i=4 to 6 DoMethod('Test_form','GridTest2','AddItem',uData[ i ]) next i ACTIVATE WINDOW Test_form, Test2 test2.Release return proc Test2() Test2.dType1.Value := "Сюда значение из гриды пишем" Test2.Show return

gfilatov2002: Haz пишет: Второе окошко нужно активировать раньше Да, это решает проблему См. рабочий пример ниже [pre] #include "minigui.ch" #define U_HEADERS 'Вид','Организация','Директор','Характеристика','Год основания' #define U_WIDTHS 80,150,100,150,130 proc test() Kadry2Row:=Kadry2Col:=100 DEFINE WINDOW Test_form AT Kadry2Row,Kadry2Col WIDTH 660 HEIGHT 600; TITLE 'Первое окно' main FONT "Arial" SIZE 9 @ 30,50 label lGridTest value 'Можно здесь нажать' width 400; size 12 fontcolor {0,0,100} backColor {180,180,180}; bold height 20 on click MsgInfo('Нажали') @ 75,10 grid GridTest1 width 605 height 115; HEADERS {U_HEADERS} WIDTHS {U_WIDTHS}; FONT "Times New Roman" SIZE 14 FONTCOLOR BLUE BACKCOLOR {222,222,222}; on DblClick Test2(This.Item(This.Value)[2]+'; '+; This.Item(This.Value)[3]+' - '+This.Item(This.Value)[4]) @ 225,10 grid GridTest2 width 605 height 115; HEADERS {U_HEADERS} WIDTHS {U_WIDTHS}; FONT "Times New Roman" SIZE 14 FONTCOLOR BLUE BACKCOLOR {222,222,222}; on DblClick Test2(This.Item(This.Value)[2]+'; '+; This.Item(This.Value)[3]+' - '+This.Item(This.Value)[4]) END WINDOW DEFINE WINDOW Test2 AT 60,60 WIDTH 460 HEIGHT 600; TITLE 'Второе окно' child FONT "Arial" SIZE 9 ON INTERACTIVECLOSE {|| This.Hide , .F.} @ 10,10 label dType1 transparent bold size 12 value "AAA"; fontcolor {0,0,100} width 300 END WINDOW uData={{'ВИД 1','Парадиз','Вася','хороший','1999'},; {'ВИД 2','Анимир','Дуся','плохая','1990'},; {'ВИД 3','Харе Кришна','Миша','мутный','1989'},; {'ВИД 4','Комода','Изя','просто мутант','1893'},; {'ВИД 5','Мироед','Света','плохая','1981'},; {'ВИД 6','Гоп секс','Грета','хорошая','1950'},; } for i=1 to 3 DoMethod('Test_form','GridTest1','AddItem',uData[ i ]) next i for i=4 to 6 DoMethod('Test_form','GridTest2','AddItem',uData[ i ]) next i ACTIVATE WINDOW ALL Test2.Release return proc Test2(par) /* if (lw:=_IsWindowDefined('Test2')) //уже было открыто SetProperty('Test2','dType1','Value',par) DoMethod('Test2','SetFocus') else //не было открыто DEFINE WINDOW Test2 AT 60,60 WIDTH 460 HEIGHT 600; TITLE 'Второе окно' child FONT "Arial" SIZE 9 @ 10,10 label dType1 transparent bold size 12 value par; fontcolor {0,0,100} width 300 END WINDOW endif //было/не было окно открыто if !lw ACTIVATE WINDOW Test2 endif */ Test2.dType1.Value := par Test2.Show return [/pre]

AM: Спасибо, товарищи, завтра на работе попробую. Получается, всегда надо так делать? Тогда все окошки, к которым обращаются неоднократно, должны быть определены заранее? Но тогда, если их много, то будут много памяти потреблять, нет разве? К тому же у меня второе окно может вызываться не только из первого, а и ещё из одного, по крайней мере. Когда первое может быть не открыто. Тогда, значит, все такие окошки надо определять в самом начале программы?



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