Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как установить многострочность у реквизита строка? (число прочтений - 11288 )
kti
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 06. Декабря 2012
Как установить многострочность у реквизита строка?
06. Декабря 2012 :: 14:44
Печать  
Программно создаю поле ввода, типа строка:

Атрибут = ФормаРасш.ДобавитьАтрибут(ИД_поле_ввода, 2, "Строка");

присваиваю значение
Атрибут.Значение = "очень длинная строка..";
Как у него сделать многострочность? Чтобы текст переносился

Пробовал через стили, не помогло. Появляются полосы прокрутки (скролбары), а текст не переносится
  
Наверх
 
IP записан
 
kti
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 06. Декабря 2012
Re: Как установить многострочность у реквизита строка?
Ответ #1 - 08. Декабря 2012 :: 11:43
Печать  
Никто не хочет помочь моему горю  Плачущий
Делаю чат (по типу например mail agent'a), закладки добавляются динамически, для каждого юзера с кем общаешься, на ней (тоже динамически) 2 memo и кнопка отправить, уже все работает как надо, только переписка не многострочная ..
тут кто-то писал, что с помощью стилей вроде решил эту проблему, но у меня не получается, помогите
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Как установить многострочность у реквизита строка?
Ответ #2 - 09. Декабря 2012 :: 16:37
Печать  
Положи на форму обычный стандартный многосточный реквизит и сделай его невидимым. А при необходимости присваивай ему нужные данные и делай видимым.
  
Наверх
 
IP записан
 
kti
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 06. Декабря 2012
Re: Как установить многострочность у реквизита строка?
Ответ #3 - 10. Декабря 2012 :: 02:26
Печать  
я не могу его сделать в конфигураторе, закладки создаются (добавляются) динамически (программно), и элементы на ней тоже. Все нормально работает, только текст в нем не переносится.

Придется, наверно, делать сразу 10 элементов на форме, и при переключении закладки, делать видимым нужный, а остальные гасить, и присваивать нужные значения
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Как установить многострочность у реквизита строка?
Ответ #4 - 10. Декабря 2012 :: 03:27
Печать  
элемент формы можно сделать видимым даже если слой, которому он принадлежит - скрыт.

Т.е. у тебя есть 2 элемента формы типа "многострочная строка".
При активизации закладки ты присваиваешь им значения чата выбранного пользователя из аккумуляторов.
В какой-то момент (или при смене закладки или сразу после изменения) значения чата текущего пользователя записываешь во внутренные аккумуляторы.


Собственно, слои, как таковые, даже и не нужны становятся.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3396
Зарегистрирован: 08. Октября 2007
Re: Как установить многострочность у реквизита строка?
Ответ #5 - 10. Декабря 2012 :: 05:10
Печать  
(0) проще Tbox использовать в таком случае.. там что угодно и как угодно
  
Наверх
 
IP записан
 
kti
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 06. Декабря 2012
Re: Как установить многострочность у реквизита строка?
Ответ #6 - 10. Декабря 2012 :: 05:38
Печать  
Цитата:
элемент формы можно сделать видимым даже если слой, которому он принадлежит - скрыт.

Да, это я знаю, просто так было-бы красивее, написал юзер сообщение, добавилась закладка, создались элементы.. а так приходится в цикле все элементы гасить, а нужные проявлять

Цитата:
Т.е. у тебя есть 2 элемента формы типа "многострочная строка".
При активизации закладки ты присваиваешь им значения чата выбранного пользователя из аккумуляторов.
В какой-то момент (или при смене закладки или сразу после изменения) значения чата текущего пользователя записываешь во внутренные аккумуляторы.

Да, именно так! На этой закладке есть кнопка закрыть, с формулой
Код
Выбрать все
Атрибут.Формула="УдалитьЗакладку(" +НоваяЗакладка_ИД + ")"; 


при ее нажатии, слой удаляется, данные записываются (для истории), можно и не записывать..
Когда приходит сообщение, закладка создается (но не открывается), и заголовок моргает (через      ФормаРасш.ПодсветкаЗакладки(i, 0)Подмигивание

Цитата:
Собственно, слои, как таковые, даже и не нужны становятся.

в принципе, да. Можно просто кнопки наставить и управлять видимостью.
  
Наверх
 
IP записан
 
kti
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 06. Декабря 2012
Re: Как установить многострочность у реквизита строка?
Ответ #7 - 10. Декабря 2012 :: 05:40
Печать  
Цитата:
(0) проще Tbox использовать в таком случае.. там что угодно и как угодно

можно поподробнее  Смущённый
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3396
Зарегистрирован: 08. Октября 2007
Re: Как установить многострочность у реквизита строка?
Ответ #8 - 10. Декабря 2012 :: 05:50
Печать  
программно создай кнопку и повешай на неё активикс "Forms.TextBox.1"... всё собственно, там есть усё что хочешь
  
Наверх
 
IP записан
 
kti
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 06. Декабря 2012
Re: Как установить многострочность у реквизита строка?
Ответ #9 - 10. Декабря 2012 :: 06:24
Печать  
Цитата:
повешай на неё активикс "Forms.TextBox.1"

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

простите за мою наглость..
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Как установить многострочность у реквизита строка?
Ответ #10 - 10. Декабря 2012 :: 07:49
Печать  
Код
Выбрать все
Перем НашаСтрока;
//=========================
Процедура Видимый()
	Форма.ИдНашРеквизит.Видимость(1);
	НашаСтрока = СокрП(ИдНашРеквизит);
	Сообщить(НашаСтрока);
КонецПроцедуры
//=========================
Процедура НеВидымый()
	Форма.ИдНашРеквизит.Видимость(0);
	НашаСтрока = СокрП(ИдНашРеквизит);
	Сообщить(НашаСтрока);
КонецПроцедуры
//=========================
Процедура ПрисвоитьНовоеЗначение()
	НашаСтрока = "Здравствуй, Мир!";
	ИдНашРеквизит  = НашаСтрока;
КонецПроцедуры
//=========================
Процедура ПриОткрытии()
	Видимый();
КонецПроцедуры
//=========================
 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3396
Зарегистрирован: 08. Октября 2007
Re: Как установить многострочность у реквизита строка?
Ответ #11 - 10. Декабря 2012 :: 08:33
Печать  
kti писал(а) 10. Декабря 2012 :: 06:24:
Цитата:
повешай на неё активикс "Forms.TextBox.1"

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

простите за мою наглость..


на форме кнопочка под активикс, в модуле формы:

Код
Выбрать все
Перем textBox1;

Процедура ПослеСозданияФормы()
	АтрФормы = СоздатьОбъект("АктивИкс");
	АтрФормы.УстановитьАтрибут(Форма,"КонтролТекста");
	textBox1=АтрФормы.СоздатьЭУ("Forms.TextBox.1");
    textBox1.Multiline = 1;
	textBox1.EnterKeyBehavior =1;
	textBox1.Locked =0;
	//textBox1.AutoWordSelect =1;
	textBox1.Enabled =1;
	//textBox1.MaxLength =100;
	textBox1.Text="Вася лошпед";
	textBox1.ScrollBars =2;
	textBox1.SpecialEffect  =0;
	textBox1.DragBehavior =1;
КонецПроцедуры
//======================================================================
Функция КонтролТекста_KeyPress(Кей)
	старт = textBox1.SelStart;
	стр = textBox1.text;
	начало = Лев(стр,старт+textBox1.CurLine);
	1.CurLine);
	textBox1.SelStart=старт+СтрДлина(Симв(Кей.value));
КонецФункции  




можно и через ДобавитьАтрибут слепить..
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Как установить многострочность у реквизита строка?
Ответ #12 - 10. Декабря 2012 :: 08:33
Печать  
Для TextBox
Код
Выбрать все
Перем АктивИкс,НашаСтрока;
//=========================
Процедура Видимый()
	Форма.ИдНашРеквизит.Видимость(1);
	Если ПустоеЗначение(АктивИкс) = 0 Тогда
		НашаСтрока = СокрП(АктивИкс.Объект.Text);
	КонецЕсли;
	Сообщить(НашаСтрока);
КонецПроцедуры
//=========================
Процедура НеВидымый()
	Форма.ИдНашРеквизит.Видимость(0);
	Если ПустоеЗначение(АктивИкс) = 0 Тогда
		НашаСтрока = СокрП(АктивИкс.Объект.Text);
	КонецЕсли;
	Сообщить(НашаСтрока);
КонецПроцедуры
//=========================
Процедура ПрисвоитьНовоеЗначение()
	НашаСтрока = "Здравствуй,
	|Мир!";
	АктивИкс.Объект.Text  = НашаСтрока;
КонецПроцедуры
//=========================
Процедура ПриОткрытии()
	Видимый();
КонецПроцедуры
//=========================
Процедура ПослеСозданияФормы()
	АктивИкс = СоздатьОбъект("АктивИкс");

	АктивИкс.УстановитьАтрибут(Форма,"ИдНашРеквизит");
	АктивИкс.СоздатьЭУ("Forms.TextBox.1");
	АктивИкс.Объект.MultiLine = -1;
	АктивИкс.Объект.Text = НашаСтрока;
	АктивИкс.УстановитьФокус();
КонецПроцедуры // ПослеСозданияФормы
//=========================
Процедура ИдНашРеквизит_KeyPress(KeyAscii)
	Символ = Симв(KeyAscii.Value);
	БуферОбмена = СоздатьОбъект("БуферОбмена");
	БуферОбмена.Установить(Символ);
	АктивИкс.Объект.Paste();
КонецПроцедуры
//=========================
Процедура ИдНашРеквизит_KeyUp(KeyCode, Shift)
	Если KeyCode.Value = 13 Тогда
		ПереносКаретки = "
		|";
		БуферОбмена = СоздатьОбъект("БуферОбмена");
		БуферОбмена.Установить(ПереносКаретки);
		АктивИкс.Объект.Paste();
	КонецЕсли;
КонецПроцедуры //
//=========================
 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3396
Зарегистрирован: 08. Октября 2007
Re: Как установить многострочность у реквизита строка?
Ответ #13 - 10. Декабря 2012 :: 08:36
Печать  
от блин.. про Paste() не увидал.. начал лисапед городить..
Печаль

ЗЫ: только не понял, нафига там объект буфер обмена в коде ?

От жешь, с буфером обмена хитро.
« Последняя редакция: 10. Декабря 2012 :: 10:03 - Eprst »  
Наверх
 
IP записан
 
kti
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 06. Декабря 2012
Re: Как установить многострочность у реквизита строка?
Ответ #14 - 10. Декабря 2012 :: 09:40
Печать  
АктивИкс = СоздатьОбъект("АктивИкс");

Это из области 1срр? У меня он конфликтует с FormEx'ом
да и подключать библиотеку, из-за одного textBox1 не хочется
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать