Форум программистов, компьютерный форум, киберфорум
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. Показов 1514. Ответов 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
6857 / 3790 / 1025
Регистрация: 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
6857 / 3790 / 1025
Регистрация: 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
6857 / 3790 / 1025
Регистрация: 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
6857 / 3790 / 1025
Регистрация: 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
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru