powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Программное создание Grid'а ...
22 сообщений из 22, страница 1 из 1
Программное создание Grid'а ...
    #34566036
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в следующем.
Создаю класс My_Container, способный отображать свое содержимое в виде «одна запись» и в виде «все записи» (через Grid). Некоторые вопросы по этому поводу я уже здесь задавал, теперь – о программном создании Grid’а. Не получается привязать его к данным в том порядке, как мне нужно. Имеется в виду, что не все поля «закрепленной» за контейнером dbf-таблицы подлежат отображению через Grid.
Для иллюстрации проблемы я создал форму специально с «разно-классовыми» контроллами и прикрепил к ней наспех сделанную dbf-таблицу с разными типами полей. По замыслу, Grid должен заместить собой поле контейнера, как только юзер сделает щелчок правой клавишей мыши на свободном от контроллов участке контейнера. Если заблокировать строки кода в классе My_Container, где присваивается значение свойствам ControlSource и создаются текущие контроллы, отличные от дефолтных TextBox’ов, то все вроде работает, правда – не в нужном порядке следуют колонки и не через нужные CurrentControll’ы отображается информация. Но в том и соль, что надо, чтобы Grid создавался не в полустихийном режиме, а – управляемо. Как решить данную проблему?
Класс и форму с таблицей прилагаю в архиве. Гляньте, пожалуйста.
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34566698
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. макроподстановка - зло


Код: plaintext
1.
2.
3.
if DODEFAULT() and USED(This.Name )
 USE IN select(This.Name)
ENDIF

Код: plaintext
1.
2.
3.
 CREATE CURSOR (NamCont)  ....
 INSERT INTO (NamCont)
 SELECT * from (NamCont) ORDER BY  15 , 16  INTO CURSOR (NamCont1) NOFILTER

2. используйте венгерскую нотацию.

3. грида не увидел,
наверное нужно положить его в контейнер (трудно догадаться, где Вы его желаете увидеть)

4. прикладываю пример подъема грида из строки-описания с опред.разделителями для вфп9.
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34566704
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага, нашел,
но странный способ
по правой кнопке светить грид, и упираться наверное чтобы убрать
видимые контролы

наверное проще положить
пейджик с двумя закладками

одна закладка - список
2-я - детализация записи


в одну закладку положить Ваши контролы,
в другую - грид
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34566718
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в моем примере увидите,как поднять грид

уберите макроподстановки - дурдом
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34566740
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 select (NamCont)
 i= 0 
 Local loColumn
 Scan && Перебираем информацию о контроллах, подлежащих включению в Grid, и формируем соответствующие контроллы в его составе
 	i=i+ 1  && Переменная для отслеживания номера текущей колонки Grid'а
 	dhl=Alltrim(CntrlSrc) && Вспомогательная переменная для хранения информации об источнике данных для текущего формируемого контролла и для колонки в целом (CntrlSrc - поле вспомогательного курсора, имя которого содержится в NamCont)
 	loColumn =  This.GridMain.Columns[i]
 	With loColumn
 		Do Case
 		Case Klas='EDITBOX'
 			.AddObject("Edit1","EDITBOX")
 			.CurrentControl = "Edit1"
 			.ControlSource=dhl && Вот тут и возникают проблемы, а как правильно сделать?
 			.Edit1.Visible = .T.
 		Case Klas='COMBOBOX'
 			.AddObject("Combo1","COMBOBOX")
 			.CurrentControl = "Combo1"
 			.ControlSource=dhl && Вот тут и возникают проблемы, а как правильно сделать?
 			.Combo1.Visible = .T.
 		Case Klas='CHECKBOBOX'
 			.AddObject("Check1","CHECKBOBOX")
 			.CurrentControl = "Check1"
 			.ControlSource=dhl && Вот тут и возникают проблемы, а как правильно сделать?
 			.Check1.Visible = .T.
 		Case Klas='SPINNER'
 			.AddObject("Spin1","SPINNER")
 			.CurrentControl = "Spin1"
 			.ControlSource=dhl && Вот тут и возникают проблемы, а как правильно сделать?
 			.Spin1.Visible = .T.
 		Otherwise
 			.CurrentControl = "Text1"
 			.ControlSource=dhl
 			.Text1.Visible = .T.
 		Endcase
 		&& This.GridMain.Columns[i].ControlSource=&dhl && Здесь тоже возникают проблемы... А нужно ли вообще задавать ControlSource для колонки, если он уже задан для ее CurrentControll'а?
 		.Sparse = .F.
 	Endwith
 Endscan
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34566745
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все плохо,нет культуры письма,
делайте выводы

наверное варитесь в своем соку,
нужно с кем-нить пообщаться и поучиться
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34566756
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в Вашей-же библиотеке

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCAL lcBaseClass

IF this.lRelease
	NODEFAULT
	RETURN .F.
ENDIF
this.lRelease=.T.
lcBaseClass=LOWER(this.BaseClass)
this.oHost=.NULL.
this.ReleaseObjRefs
IF NOT INLIST(lcBaseClass+" ","form ","formset ","toolbar ")
	RELEASE this
ENDIF

совершенно другой стиль,
наверное содрали откуда-то

ну вот и подсмотрите
что-же огород-то городить в сам-то деле ...
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34567431
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To alex11100:
Спасибо за помощь, настолько задолбался с .ControlSource=..., что уже и не верится, что что-то получится. Сейчас попробую ваш вариант. А насчет стиля письма и макроподстановок - я сам от этого далеко не балдею, но - горбатого могила исправит. Пробовал когда-то переучиться - так перестали работать даже те коды, что нормально работали раньше. Сейчас же руководствуюсь правилом: главное - конечный результат. Если стиль письма и макроподстановки усложняют его достижение, это, конечно, плохо, но, если он в конце концов достигнут - сойдут и макроподстановки, и стиль письма :))
Насчет закладок - я ими и так загрузил форму, для которой и разрабатывал этот контейнер. Так что - не хотелось бы ими злоупотреблять. Ибо злоупотребления макроподстановками пользователь не заметит, а от чрезмерного количества закладок у него в глазах рябит :))
А насчет последнего - "умного" фрагмента кода из "моей" библиотеки - выводы не верные. Это - библиотека из состава VFP7, я просто туда добавил свой класс, чтобы не возиться потом с подключением отдельных библиотечных файлов.
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34567567
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор главное - конечный результат

еще раз.

макроподстановка - зло, особенно там где она сто лет не нужна,
если конечно головой думать

тормоз и тяжело отлаживать


учитесь правильно писать - затем умучитесь свой код лопатить,
а если он кому-нить достанется, то пипец тому человеку


можете пейджефрейм сделать без пейджиков,
просто пейджефрейм - это уже контейнер с подконтейнерами

(или развернуть закладки влево или вправо)
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34567738
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ура, заработало!
Спасибо, alex11100. И - будет вам насчет макроподстановок-то! Я ж не возражаю, что они - зло. И по вашему примеру поубирал их уже из кода. Просто, когда писал - забыл про такую возможность, как WITH-ENDWITH. Код мой точно никому не достанется - слишком закрытое учреждение, похлеще подводной лодки :)) А сам свои каракули - я разбираю с полоборота. Приложенный вами материал я еще не разобрал, но, думаю, там не все можно будет мне позаимствовать - 9>7 все-таки...
Главное, что я почерпнул из ваших советов (правда, пришлось все равно очередность команд переделывать):
при внедрении CurrentControll'ов - сначала Grid должен быть привязан к нужному файлу через RecordSource, затем - текущая анализируемая колонка должна быть привязана к своему полю этого файла через ее ControlSource, затем - внедряется и назначается текущим Control нужного класса с соблюдением допустимого типа данных для него, а уже в конце - визуализация с обновлением. При такой последовательности команд все начало работать, как и было задумано. Теперь осталось только запрограмить рациональный подбор ширины колонок и высоты строки, да еще автоматизирповать назначение RecordSource для внедренных в Grid ComboBox'ов, но с этим я, надеюсь, справлюсь :))
Для меня кажется удивительным, что правильно срабатывает последовательность:
dhl=Alltrim(CntrlSrc)
.ControlSource=dhl
ведь dhl в данном случае представляет только строчное имя поля, а не ссылку на его содержимое, но раз это нормально срабатывает - не буду над этим и заморачиваться :))
Еще раз - спасибо за помощь!
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34568959
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To alex11100:
Точно, мой VFP7 споткнулся о TRY...Catch и некоторые другие девяточные навороты. Но сам подход и логику кода - я уразумел. Спасибо.
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34568969
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуйте
уйти на 9-ку

смысла сидеть на 7-ке нет
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34569294
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет. 9-ка мне не подходит. Убедился. 7-ка лучше, хоть и наворотов поменьше.
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34571019
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторУбедился. 7-ка лучше

интересно, чем?

тем, что у Вас отсутствуют большинство новых классов, функций и др.новшеств?
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34573537
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да тут много суждений по этому поводу уже приводилось. В общем и целом суть сводится к следующему: чаще всего прогресс в целом и самолет в частности - лучше, чем предыдущая ступень развития в целом и лошадь в частности. Но - остаются некоторые, пусть и немногие ситуации, когда лошадь - больше подходит, а самолет - вовсе неприменим.
Скажем такие доводы в пользу VFP7:
- более простая система является более устойчивой и надежной (хук слева);
- меньший размер скомпилированных файлов и меньшее количество необходимых библиотек (хук справа);
- еще парочка таких же не во всем неубедительных доводов (удар под дых);
- невозможность РАЗРАБАТЫВАТЬ под версиями ОС ниже ХР(2000) (удар ниже пояса, VFP9 падает и корчится). Иногда - это нужно пока.
Прошу не расценивать это как консерватизм - просто у меня, действительно, похожая ситуация.
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34574030
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полнейшая ерунда

изв., но мне лень клавиши давить, чтобы Вас переубедить
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34576326
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самое главное вы так и не поняли - переубеждать и не надо, я давно уже переубежден.
Попробуйте-ка переубедить комп с Win98 или с Миллениумом - думаю, пупок развяжется.
Надеюсь, про "обстоятельства сильнее нас" слышали?
У меня - правда! - есть необходимость оперативно корректировать код и компилить заново, не перемещаясь между компами с 98, МЕ и ХР.
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34576332
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и субъективный момент:
SET ENGINEBEHAVIOR 70 | 80 - повергает меня в дикую депрессию, ибо уже самим фактом своего существования предполагает наличие варианта создания SQL-запроса по логике, альтернативной нормальному здравому смыслу . Только не говорите о том, что обязательность перечисления всех полей в GROUP BY - может также считаться НОРМАЛЬНЫМ требованием, а то меня стошнит :))
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34576373
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
CREATE CURSOR test (f1 I, f2 I, f3 I)
INSERT INTO test VALUES ( 1 , 1 , 1 )
INSERT INTO test VALUES ( 1 , 2 , 3 )

SELECT f1, f2, SUM(f3) FROM test GROUP BY f1

Какое значение поля f2 в результирующей выборке Вы считаете "нормальным" и "правильным"?

Только не говорите, что у Вас в подобных случаях все значения поля f2 одинаковые. Откуда ДО выполнения запроса это известно? А ведь синтаксический разбор (создание плана выполнения запроса) происходит именно ДО выполнения собственно выборки. Налицо - неопределенность результата. Непонятно что именно, какое значение, из возможных вариантов необходимо отобразить в результате.

Если Вам все-равно, какое это будет значение (или они все одинаковые), то какие проблемы обернуть это поле в MAX() или MIN()?
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34576448
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так то ж еще "оборачивать" надо ... Само по себе это не тяжело, но если прошляпить, да еще в много-многострочном коде - потом мозги перестраивать приходится: почему сегодня прога матерится на то, что еще вчера круто работало?..
С помощью нормального (в моем понимании) поведения GROUP BY довольно просто решается задача сохранения нужной части структуры входного файла в результирующем файле, при этом (нечасто, правда) ни максимальное значение, ни минимальное (тем более, если это 0) - не весьма устраивает. Кому-то это покажется похожим на отговорки, но я так и поясняю - "субъективный момент". И выглядит он, имхо, не более неуклюже, чем, скажем, оператор := в некоторых языках программирования. Сиречь - имеет право на существование.
А вот с объективными препятствиями типа 98 и МЕ - бороться гораздо трудней.
Но самое главное, ВладимирМ - с мэтрами я не спорю. Посему все вышеизложенное просю трактовать НЕ как контрдоводы и отстаивание своей точки зрения, а как робкие попытки оправдания, типа - детского лепета :)
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34576763
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
приложения fpv9 прекрасно работают на win98 и winME

SET ENGINEBEHAVIOR 70 | 80 реализовано специально для совместимости
и для тех кому тошнит

авторболее простая система является более устойчивой и надежной
в 9-ке исправлено более 100 ошибок, тянувшихся с ранних версий
для меня наиболее критичной была простановка неверного колич-ва записей
в заголовке транзакционных таблиц

авторменьший размер скомпилированных файлов и меньшее количество необходимых библиотек

полная ерунда, - докажите
(и если и даже, странно, и Вам не безразличнен лишний мегабайт?)
все зависит от того что Ваше приложение будет делать, извините
думаю ехе с одной строчкой будет весить одинаково
библиотеки рантама тяжелее?? так извю 9-ка больше умеет,
и ставятся один раз
...
Рейтинг: 0 / 0
Программное создание Grid'а ...
    #34577741
VFP7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я ж по русски написал: речь идет не о необходимости РАБОТЫ приложения на 98-МЕ, а о необходимости правки кода и последующей перекомпиляции, а это уже, извиняюсь, тянет на РАЗРАБОТКУ, а не просто РАБОТУ.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Программное создание Grid'а ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]