powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как в классе Grid заменить ячеечный объект Text1 на свой?
12 сообщений из 12, страница 1 из 1
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35413159
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Стало интересно как заменить в Grid-е объект-"носитель" ячеек на любой свой. Там по умолчанию вставляется всегда стандартный TextBox. А если я хочу там свой TextBox или, скажем, стандартный EditBox, причем так, чтобы стандартный даже не добавлялся, чтобы мой стал стандартным - как это сделать?

Я находил решение в ктором был прописан метод Init своей колонки для своего грида, и суть там сводилась к тому, что помимо стандартного TextBox-a добавлялся еще один, свой, и на него указывалось Column.CurrentControl. Т.е. в данной ситуации на 1 ячейку создается уже 2 объекта - сначала стандартный, затем свой.

PS Собственно к вопросу подтолкнул другой вопрос - как увеличить высоту (RowHeight) ячеек в гриде визуально - понятно. Но если в ячейке 200 сиволов текста, инфа все равно идет в одну строку по средине ячейки. Скажем то что мне нужно бы было - это свойство WordWrap, но у текстбокса такого не имеется и я подумал про EditBox... Но у него свои заморочки - в него нельзя тулить нетекстовую инфу...
И тут уже возникает некая другая затея - скажем, если в ячейке текстовая инфа, но по ширине ячейки она вся не вмещается, заменяем текстбокс на едитбокс. Если во время расширения такой ячейки текст помещается по ширине - обратно ставим текстбокс, ну и обратно. Хотя бредовая идея ваще-то и менингитная - считай ширину каждого символа по размеру шрифта, просчет умещения текста надо вести по всему столбцу и тд и тп... Можно проще - скажем если колонке принадлежит текстовое поле размером больше 50 символов - ставим едитбокс...
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35413221
x1x1x1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KOТ.е. в данной ситуации на 1 ячейку создается уже 2 объекта - сначала стандартный, затем свой.
.RemoveObject("Text1")
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35413252
1010100021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А без этого гемора никак?
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35413293
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, но с другим
http://]http://forum.foxclub.ru/read.php?32,177187,177202#msg-177202
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35413346
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1x1x1 CTAC-KOТ.е. в данной ситуации на 1 ячейку создается уже 2 объекта - сначала стандартный, затем свой.
.RemoveObject("Text1")
сенксь, вчера до этого же сам дошел :)
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35413352
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DagМожно, но с другим: сцылко
это про дизайнер - там понятно. а я про класс. У меня грид на форме без колонок. Когда загружается в него курсор, тогда и колонки появляются, тогда же в колонках автоматом втуляются стандартные текстбоксы. По ходу я сделал так:
Код: 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.
*-- Класс колонки для Grid
DEFINE CLASS MyColumn AS Column

  PROCEDURE ControlSource_Assign
    LPARAMETERS tcControlSource
    LOCAL lcControlSource
    
    IF !EMPTY(m.tcControlSource)
	* если формат присвоения сурся колонке не содержит имени таблицы - добавляем
	IF AT('.',m.tcControlSource= 0  AND NOT EMPTY(this.Parent.RecordSource)
	   tcControlSource = this.Parent.RecordSource + '.' + m.tcControlSource
	ENDIF
    
       lcControlSource = UPPER(SUBSTR(m.tcControlSource,RAT('.',m.tcControlSource)+ 1 ))
    ENDIF

   *сначала присвоим ControlSource иначе при вставке EditBox - Invalid Data Type
   this.ControlSource = m.tcControlSource

    * для символьных/текстовых полей длиною более  50  символов ставим едитбокс
    IF NOT EMPTY(m.tcControlSource);
    AND VARTYPE(EVALUATE(m.lcControlSource))='C';
    AND FSIZE(m.lcControlSource)> 50 

		WITH THIS
			.RemoveObject('Text1')
			.AddObject("Edit1", "EditBox")
			.CurrentControl = "Edit1"
			.Sparse = .F.
		ENDWITH
   
    ENDIF

  ENDPROC
ENDDEFINE
но ведь где-то же прописано, что нужно вставлять именно текстбокс, а не комбо там или еще что!
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35413413
x1x1x1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KO...а я про класс. У меня грид на форме без колонок...
Я, когда отвечал, так и догадался! ;)
Сам делал нечто похожее - есть табличка, с помощью которой юзер сам выбирает поля, которые хочет видеть. Но форме - грид без колонок, которые потом формируются, исходя из пожеланий юзера. Получилось удобно в сопровождении для себя, а пользователи просто счастливы!
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35413424
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СТАС-КОно ведь где-то же прописано, что нужно вставлять именно текстбокс, а не комбо там или еще что!

ИМХО, это нигде не написано, просто текстбокс наиболее универсальный контрол-поэтому он и выбран для использования по умолчанию.
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35413441
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KO
но ведь где-то же прописано, что нужно вставлять именно текстбокс, а не комбо там или еще что!
У грида есть св-ва MemberClass, MemberClassLibrary, которые указывают на класс колонки, используемый для грида. А уже в своём классе колонки творите что угодно, например editbox вместо textbox.

Вообще, в фоксовском гриде мне не хватает только одного: возможности делать разную высоту строк :)
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35415066
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче, как я понял, другого способа чем убить текстбокс(необязательно), затем вставить свой контролл и указать колонке на него - нет? и задать использование собственного текстбокса по умолчанию, кроме как изложенным способом тоже не существует?
ЗЫ. У Климова в его смартгриде собственный текстбокс тоже вставляется именно таким способом...
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35415618
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если грид формируется программно - можно что угодно, а вот в IDE не знаю
...
Рейтинг: 0 / 0
Как в классе Grid заменить ячеечный объект Text1 на свой?
    #35415988
_Гость___
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СТАС-КОкороче, как я понял, другого способа чем убить текстбокс(необязательно), затем вставить свой контролл и указать колонке на него - нет? и задать использование собственного текстбокса по умолчанию, кроме как изложенным способом тоже не существует?
Если у Вас девятка, то как указывает XAndy - используйте свойства MemberClass, MemberClassLibrary грида. Это будет примерно так - в MemberClass прописываем имя класса колонки - "eColumn", в MemberClassLibrary - имя prg-файла с описанием класса, допустим "myColumn.prg". Содержимое myColumn.prg приблизительно такое:

DEFINE CLASS eColumn as Column
ADD OBJECT Header1 as eHeader WITH Caption = "Столбец"
ADD OBJECT eTextBox1 as eGridTxtBox WITH ControlSource=this.ControlSource,Format=this.Format,InputMask=this.InputMask

ENDDEFINE

DEFINE CLASS eHeader AS Header
Alignment = 2
WordWrap = .T.

PROCEDURE Click()
this.Parent.Parent.SetTableOrder(this)
ENDPROC
ENDDEFINE

DEFINE CLASS eGridTxtBox as eTextBox OF myBaseForm.vcx
ENDDEFINE

Здесь при добавлении колонок в грид будет добавлятся свой хидер и свой текстбокс.
Естественно такой грид оформляем как пользовательский класс
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как в классе Grid заменить ячеечный объект Text1 на свой?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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