Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Унаследовать свойство компонента Edit и использовать в ValueListEditor

11.07.2014, 14:06. Показов 1529. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Ребята, подскажите, по такому вопросу. У компонента Edit есть свойство CharCase, которое отвечает за регистр. Так вот как можно унаследовать это свойство в компоненте ValueListEditor и использовать в некоторых его строках к примеру 3 или 5 строке?

Заранее благодарен за ответ
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.07.2014, 14:06
Ответы с готовыми решениями:

Сделать свойство Modified для компонента ValueListEditor
Ребята, подскажите по такому вопросу. Можно лисделать свойство Modified такое как в Memo, только для компонента ValueListEditor для...

Как использовать свойство составного элемента компонента?
Всем здравствуйте. Как правило компоненты состоят из нескольких более простых компонентов. Как выяснить из каких, сколько их, как...

Установка фокуса ячейки компонента ValueListEditor
По списку идет запись значений переменных в массив посредством Cells.ToDouble() . В случае ошибки перевода вылетит MessageBox. Вопрос:...

19
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
11.07.2014, 14:21
А чем событие OnSetEditText не устраивает? Лень сейчас лезь в исходники, но во-первых не факт, что там вообще используются экземпляры TEdit, а во-вторых, судя по списку свойств и методов, доступа к элементам ввода все равно нет.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.07.2014, 14:25  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
А чем событие OnSetEditText не устраивает?
И как оно мне интересно поможет?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
11.07.2014, 14:27
Цитата Сообщение от Sasha Посмотреть сообщение
И как оно мне интересно поможет?
Вам нужно автоматически поднимать в верхний регистр вводимую строку?
Это событие возникает при изменении содержимого ячейки. Введенное значение передается в обработчик, делайте с ним что хотите и пишите обратно в ячейку.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.07.2014, 14:32  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
А чем событие OnSetEditText не устраивает?
И как оно мне интересно поможет?

Вот такой код выбивает ошибку выполнения, которую я даже не смог запечатлеть
C++
1
2
InsertandUpdate1->ValueListEditor1->Cells[1][1] = InsertandUpdate1->ValueListEditor1->Cells[1][1].UpperCase();
InsertandUpdate1->ValueListEditor1->Cells[1][9] = InsertandUpdate1->ValueListEditor1->Cells[1][9].UpperCase();
0
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
11.07.2014, 14:36
Цитата Сообщение от Sasha Посмотреть сообщение
Вот такой код выбивает ошибку выполнения, которую я даже не смог запечатлеть
Скорее всего у вас бесконечная рекурсия вышла. Некоторые компоненты при присвоении нового значения из кода не вызывают обработчик изменения, а некоторые вызывают. В результате при первом же присвоении у вас снова вызывается обработчик, который снова присваивает и снова вызывает и так пока стек не кончится. В таких случаях нужно или временно отключать обработчик перед присвоением нового значения, или проверять, не соответствует ли уже существующее значение присваиваемому, и ничего не делать, если все уже и так в верхнем регистре.
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.07.2014, 14:44
Если тупо для ячейки 1:1 при прорисовке__
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::ValueListEditor1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
   
  if (ACol==1 && ARow==1 && ValueListEditor1->Cells[1][1].UpperCase() !=
       ValueListEditor1->Cells[1][1] )
    ValueListEditor1->Cells[1][1]=ValueListEditor1->Cells[1][1].UpperCase() ;
}
правда без наследования...
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.07.2014, 14:44  [ТС]
Решил проверить на пустоту перед вводом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TMainForm::InsertandUpdate1ValueListEditor1SetEditText(TObject *Sender,
          int ACol, int ARow, const UnicodeString Value)
{
 if(!InsertandUpdate1->ValueListEditor1->Cells[1][1].IsEmpty())
 {
  InsertandUpdate1->ValueListEditor1->Cells[1][1] = InsertandUpdate1->ValueListEditor1->Cells[1][1].UpperCase();
 }
 if(!InsertandUpdate1->ValueListEditor1->Cells[1][9].IsEmpty())
 {
  InsertandUpdate1->ValueListEditor1->Cells[1][9] = InsertandUpdate1->ValueListEditor1->Cells[1][9].UpperCase();
 }
 
}
Компонент уже начал показываться, но при вводе в первое поле Вылетает ошибка Stack Overflow

Странно что нельзя достучаться до свойств компонента Edit((((((((((((((((
0
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
11.07.2014, 14:53
Цитата Сообщение от Sasha Посмотреть сообщение
Компонент уже начал показываться, но при вводе в первое поле Вылетает ошибка Stack Overflow
Проверяйте не на пустоту, а на неравенство с InsertandUpdate1->ValueListEditor1->Cells[x][y].UpperCase()
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.07.2014, 15:01  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
Если тупо для ячейки 1:1 при прорисовке__
C++
1
2
3
4
5
6
7
void __fastcall TForm1::ValueListEditor1DrawCell(TObject *Sender, int ACol,
    int ARow, TRect &Rect, TGridDrawState State)
{
if (ACol==1 && ARow==1 && ValueListEditor1->Cells[1][1].UpperCase() !=
     ValueListEditor1->Cells[1][1] )
   ValueListEditor1->Cells[1][1]=ValueListEditor1->Cells[1][1].UpperCase() ;
}
правда без наследования...
nick42, это событие мне в корне не подходит потому как оно не сразу при вводе переводит буквы в верхний регистр, а мне нужно сразу чтобы это делало. С таким успехом как у Вас я использовал код вот так вот и в таком событии OnValidate Но оно тоже не подходит по тем же причинам потому как не сразу переводит вв ерхний регистр, а переводит после того как фокус снимается с этой строки

Вот этот код

C++
1
2
3
4
5
6
7
void __fastcall TMainForm::InsertandUpdate1ValueListEditor1Validate(TObject *Sender,
          int ACol, int ARow, const UnicodeString KeyName, const UnicodeString KeyValue)
 
{
InsertandUpdate1->ValueListEditor1->Cells[1][1] = InsertandUpdate1->ValueListEditor1->Cells[1][1].UpperCase();
InsertandUpdate1->ValueListEditor1->Cells[1][9] = InsertandUpdate1->ValueListEditor1->Cells[1][9].UpperCase();
}
Добавлено через 7 минут
Цитата Сообщение от quwy Посмотреть сообщение
Проверяйте не на пустоту, а на неравенство с InsertandUpdate1->ValueListEditor1->Cells[x][y].UpperCase()
Сделал вот

C++
1
2
3
4
5
6
7
8
9
void __fastcall TMainForm::InsertandUpdate1ValueListEditor1SetEditText(TObject *Sender,
          int ACol, int ARow, const UnicodeString Value)
{
if(InsertandUpdate1->ValueListEditor1->Cells[1][1]!=InsertandUpdate1->ValueListEditor1->Cells[1][1].UpperCase())
 {
  InsertandUpdate1->ValueListEditor1->Cells[1][1] = InsertandUpdate1->ValueListEditor1->Cells[1][1].UpperCase();
 }
 
}
Всё равно ошибка StackOverflow
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.07.2014, 15:02
Цитата Сообщение от Sasha Посмотреть сообщение
оно не сразу при вводе переводит буквы в верхний регистр, а мне нужно сразу чтобы это делало
Ну так при вводе можно зашарахать__
C++
1
2
3
4
5
6
void __fastcall TForm1::ValueListEditor1KeyPress(TObject *Sender,
      char &Key)
{
    if (ValueListEditor1->Col==1)
      if (islower(Key)) Key = toupper(Key) ;
}
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.07.2014, 15:33  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
C++
1
2
3
4
5
6
void __fastcall TForm1::ValueListEditor1KeyPress(TObject *Sender,
    char &Key)
{
   if (ValueListEditor1->Col==1)
    if (islower(Key)) Key = toupper(Key) ;
}
С таким кодом английский шрифт он выводит в верхнем регистре, а с русским почему-то в нижнем
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.07.2014, 17:20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  ValueListEditor1->Strings->Add("a=b");
  ValueListEditor1->Strings->Add("c=d");
  ValueListEditor1->Strings->Add("e=f");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ValueListEditor1Validate(TObject *Sender, int ACol,
      int ARow, const AnsiString KeyName, const AnsiString KeyValue)
{
    if(ACol==1 && (ARow==1||ARow==3) )
    {
      ValueListEditor1->Strings->Values[KeyName]= KeyValue.UpperCase();
    }
}
//---------------------------------------------------------------------------
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
11.07.2014, 17:47
Цитата Сообщение от Sasha Посмотреть сообщение
английский шрифт он выводит в верхнем регистре, а с русским почему-то в нижнем
Естественно; кириллица ж в отрицательном поле... .
Если не заморачиваться с юни и идти прямым дилетантским путем, то так __
C++
1
2
3
4
5
void __fastcall TForm1::ValueListEditor1KeyPress(TObject *Sender,
      char &Key)
{
    if (ValueListEditor1->Row==2) Key &= ~0x20; 
}
обычно срабатывает.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.07.2014, 01:09  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent  Owner)
        : TForm(Owner)
{
  ValueListEditor1->Strings->Add("a=b");
  ValueListEditor1->Strings->Add("c=d");
  ValueListEditor1->Strings->Add("e=f");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ValueListEditor1Validate(TObject  Sender, int ACol,
      int ARow, const AnsiString KeyName, const AnsiString KeyValue)
{
    if(ACol==1 && (ARow==1||ARow==3) )
    {
      ValueListEditor1->Strings->Values[KeyName]= KeyValue.UpperCase();
    }
}
//---------------------------------------------------------------------------
Эфект от этого кода такой как и раньше, то есть при покидании строки тогда переврдится к верхнему регистру, а так чтоб сразу выводил в верхнем регистре, то нет

Добавлено через 2 минуты

Цитата Сообщение от nick42 Посмотреть сообщение
C++
1
2
3
4
5
void __fastcall TForm1::ValueListEditor1KeyPress(TObject  Sender,
      char &Key)
{
    if (ValueListEditor1->Row==2) Key &= ~0x20; 
}
обычно срабатывает.
Этим кодом не все рууские буквы переводятся к верхнему регистру
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.07.2014, 01:31
Цитата Сообщение от Sasha Посмотреть сообщение
Эфект от этого кода такой как и раньше, то есть при покидании строки тогда переврдится к верхнему регистру, а так чтоб сразу выводил в верхнем регистре, то нет
Ясень пень, перевод осуществляется после окончания редактирования.
Цитата Сообщение от Sasha Посмотреть сообщение
Этим кодом не все рууские буквы переводятся к верхнему регистру
Пробуй так:

C++
1
2
3
4
5
void __fastcall TForm1::ValueListEditor1KeyPress(TObject *Sender,
      char &Key)
{
    if (ValueListEditor1->Row==2) Key = AnsiString(Key).UpperCase().c_str(); 
}
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.07.2014, 01:47  [ТС]
C++
1
2
3
4
5
6
oid __fastcall TMainForm::InsertandUpdate1ValueListEditor1KeyPress(TObject *Sender,
          System::WideChar &Key)
{
if (InsertandUpdate1->ValueListEditor1->Row==1)   Key = AnsiString(Key).UpperCase().c_str();
 
}
ошибка тут походу надо преобразовать правда не знаю как

[bcc32 Error] Unit1.cpp(1345): E2034 Cannot convert 'char *' to 'wchar_t'
Full parser context
Unit1.cpp(1344): parsing: void _fastcall TMainForm::InsertandUpdate1ValueListEdit or1KeyPress(TObject *,wchar_t &)

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Ясень пень, перевод осуществляется после окончания редактирования.
Мне надо чтобы он во время редактирования осуществлялся
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.07.2014, 01:47
Sasha, AnsiString замени на String в приведенном коде
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.07.2014, 01:54  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Sasha, AnsiString замени на String в приведенном коде
Ничё не помогло сейчас дало такую ошибку

[bcc32 Error] Unit1.cpp(1345): E2034 Cannot convert 'wchar_t *' to 'wchar_t'
Full parser context
Unit1.cpp(1344): parsing: void _fastcall TMainForm::InsertandUpdate1ValueListEdit or1KeyPress(TObject *,wchar_t &)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.07.2014, 02:02
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

C++
1
2
3
4
5
void __fastcall TMainForm::InsertandUpdate1ValueListEditor1KeyPress(TObject *Sender,
          System::WideChar &Key)
{
    if (ValueListEditor1->Row==1)   Key = String(Key).UpperCase()[1];
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2014, 02:02
Помогаю со студенческими работами здесь

Вставка слов в ValueListEditor из Edit
Привет программистам помогите плиз мне надо чтоб из Memo1 каждое слово вставлялось в ValueListEditor и количество этого слова встречающего...

Переход по клавиши Enter на каждую строку столбца Value компонента ValueListEditor
Добрый день ребята подскажите по такому вопросу! 1)Как можно реализовать переход по строкам столбца Value компонента ValueListEditor...

Как заставить свойство "Text" компонента Label забиндиться на свойство TheChar из пользовательского класса
Здравствуйте, не получается заставить свойство "Text" компонента Label забиндиться на свойство TheChar из моего класса, основанного на...

Изменить свойство компонента
Создал проект, кинул TextBox на форму, пишу в функции main его имя - подсвечивается красным, вроде его нет. Почему?

Не выводится свойство компонента
Добрый день. Проблема такая: есть компонент выводящий список линеек продукции. Для этого компонента я создал свойство типа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru