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

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

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

PS Собственно к вопросу подтолкнул другой вопрос - как увеличить высоту (RowHeight) ячеек в гриде визуально - понятно. Но если в ячейке 200 сиволов текста, инфа все равно идет в одну строку по средине ячейки. Скажем то что мне нужно бы было - это свойство WordWrap, но у текстбокса такого не имеется и я подумал про EditBox... Но у него свои заморочки - в него нельзя тулить нетекстовую инфу...
И тут уже возникает некая другая затея - скажем, если в ячейке текстовая инфа, но по ширине ячейки она вся не вмещается, заменяем текстбокс на едитбокс. Если во время расширения такой ячейки текст помещается по ширине - обратно ставим текстбокс, ну и обратно. Хотя бредовая идея ваще-то и менингитная - считай ширину каждого символа по размеру шрифта, просчет умещения текста надо вести по всему столбцу и тд и тп... Можно проще - скажем если колонке принадлежит текстовое поле размером больше 50 символов - ставим едитбокс...
...
Рейтинг: 0 / 0
06.07.2008, 00:29
    #35413221
x1x1x1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
CTAC-KOТ.е. в данной ситуации на 1 ячейку создается уже 2 объекта - сначала стандартный, затем свой.
.RemoveObject("Text1")
...
Рейтинг: 0 / 0
06.07.2008, 01:55
    #35413252
1010100021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
А без этого гемора никак?
...
Рейтинг: 0 / 0
06.07.2008, 08:34
    #35413293
Dag
Dag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
Можно, но с другим
http://]http://forum.foxclub.ru/read.php?32,177187,177202#msg-177202
...
Рейтинг: 0 / 0
06.07.2008, 11:38
    #35413346
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
x1x1x1 CTAC-KOТ.е. в данной ситуации на 1 ячейку создается уже 2 объекта - сначала стандартный, затем свой.
.RemoveObject("Text1")
сенксь, вчера до этого же сам дошел :)
...
Рейтинг: 0 / 0
06.07.2008, 12:06
    #35413352
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
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
06.07.2008, 14:00
    #35413413
x1x1x1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
CTAC-KO...а я про класс. У меня грид на форме без колонок...
Я, когда отвечал, так и догадался! ;)
Сам делал нечто похожее - есть табличка, с помощью которой юзер сам выбирает поля, которые хочет видеть. Но форме - грид без колонок, которые потом формируются, исходя из пожеланий юзера. Получилось удобно в сопровождении для себя, а пользователи просто счастливы!
...
Рейтинг: 0 / 0
06.07.2008, 14:12
    #35413424
Dag
Dag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
СТАС-КОно ведь где-то же прописано, что нужно вставлять именно текстбокс, а не комбо там или еще что!

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

Вообще, в фоксовском гриде мне не хватает только одного: возможности делать разную высоту строк :)
...
Рейтинг: 0 / 0
07.07.2008, 14:32
    #35415066
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
короче, как я понял, другого способа чем убить текстбокс(необязательно), затем вставить свой контролл и указать колонке на него - нет? и задать использование собственного текстбокса по умолчанию, кроме как изложенным способом тоже не существует?
ЗЫ. У Климова в его смартгриде собственный текстбокс тоже вставляется именно таким способом...
...
Рейтинг: 0 / 0
07.07.2008, 16:37
    #35415618
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
Если грид формируется программно - можно что угодно, а вот в IDE не знаю
...
Рейтинг: 0 / 0
07.07.2008, 18:16
    #35415988
_Гость___
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в классе Grid заменить ячеечный объект Text1 на свой?
СТАС-КОкороче, как я понял, другого способа чем убить текстбокс(необязательно), затем вставить свой контролл и указать колонке на него - нет? и задать использование собственного текстбокса по умолчанию, кроме как изложенным способом тоже не существует?
Если у Вас девятка, то как указывает 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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как в классе Grid заменить ячеечный объект Text1 на свой? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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