Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с компонентом TRichEdit  (Прочитано 18137 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« : 18-01-2010 17:30 » 

Доброго времени суток! Хочу задать вот какие вопросы:

1) Как в компоненте TRichEdit отключить звуковой сигнал, когда в пустом текстовом поле с помощью стрелок на клаве определяются, я так понимаю, границы заполненного или пустого поля??

2) Можно-ли как-нибудь отключить возможность удаления загруженного текста в TRichEdit'e с помощью клавиши BackSpace, тобишь проше говоря - как отключить клавишу BackSpace только для компонента TRichEdit??
Записан

Краткость - сестра таланта, некраткость - сам талант!
elenatt
Интересующийся

ru
Offline Offline
Пол: Женский

« Ответ #1 : 19-01-2010 05:44 » 

2)
Код:
void __fastcall TForm1::RichEdit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
      if( Key == 8)
     Key='\0';

}
Записан
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 19-01-2010 13:05 » new

elenatt, спасибо большое! Первую проблему решил идентично:

Код:
void __fastcall TForm1::RichEdit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{

if (Key == VK_LEFT) {

  Key = '\0';

 }
 else if (Key == VK_RIGHT) {

   Key = '\0';

  }

}

Тобишь просто отключил клавиши! Тогда возникает вопрос в дополнение к первому: А можно, не отключая клавишу(-и), отключить звуковой сигнал? Есть кто знает на него ответ или такого ответа нет?
Записан

Краткость - сестра таланта, некраткость - сам талант!
elenatt
Интересующийся

ru
Offline Offline
Пол: Женский

« Ответ #3 : 20-01-2010 08:39 » 


Код:
void __fastcall TForm1::RichEdit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{

    int y = RichEdit1->SelStart;

    int r = RichEdit1->Text.Length();

    if ((Key == VK_LEFT || Key == VK_UP) && y == 0 ) {
        Key = '\0';
    }

    if ((Key == VK_RIGHT || Key == VK_DOWN) && y == r ) {
        Key = '\0';
    }
}


Записан
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 20-01-2010 13:05 » 

elenatt, спасибо! Очень ценю вашу помощь!
Записан

Краткость - сестра таланта, некраткость - сам талант!
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 21-01-2010 00:53 » 

Возникли ещё такие вопросы:
Как подсчитать кол-во загруженный байт информации в компоненте? И что оптимальнее подсчитать: кол-во байт или строк, чтобы потом использовать эту информацию для проверки валидности открываемого файла?
Записан

Краткость - сестра таланта, некраткость - сам талант!
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 21-01-2010 01:32 » 

В дополнение хочу вот что сказать:
Код:
int x_size;

x_size = My_Rich_Edit_1 -> Lines -> Count;
В проверке валидности файла сильно не поможет, поэтому хочется подсчитать количество символов в открытом файле, но причём выделить это в отдельный обработчик события. Т.е. чтобы пользователь мог проверить какой-то один загруженный файл некой базы данных. Кол-во символов я буду хранить для каждого отдельного файла прям в программе.

Следовательно, я оставляю только один вопрос:
Можно-ли средствами TRichEdit'а подсчитать кол-во символов в тексте загруженном из файла данных и как это лучше всего осуществить?
Записан

Краткость - сестра таланта, некраткость - сам талант!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 21-01-2010 04:22 » 

Суммарный размер. Возможно речь об этом...

Код:
int size = 0;

for (n = 0; n < My_Rich_Edit_1->Lines->Count; n++)
    size += My_Rich_Edit_1->Lines[n].Length();
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 21-01-2010 05:31 » 

RXL, нет.
Я глянул, для Lines не определены дополнительные св-ва и функции в данном контексте. Как это обойти, не имею понятия!?

Update:
Мало сплю, поэтому дописался. Извиняюсь. Улыбаюсь Но код всё равно не работает, вот ошибка:
Цитата
[BCC32 Error] Unit_1.cpp(136): E2316 'Length' is not a member of 'TStrings'
« Последнее редактирование: 21-01-2010 14:50 от Dr.CODE » Записан

Краткость - сестра таланта, некраткость - сам талант!
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 21-01-2010 05:48 » 

В принципе, я думаю и о том, что можно используя строковую переменную подсчитать текущее кол-во байтов в тексте, но вспомнил, что есть Length. Попробовал, не получилось. Я не проверял, но думаю что в Builder'e 2009 такая штука бы прокатила, но возникает другой вопрос - что противопоставлено свойству - Length теперь. Должно же что-то быть? Или я что-то не учитываю?
Записан

Краткость - сестра таланта, некраткость - сам талант!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 21-01-2010 07:14 » 

Dr.CODE, я тебя не понимаю совсем. Перечитай свои посты внимательно и поправь.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 21-01-2010 14:53 » 

Цитата: RXL
Dr.CODE, я тебя не понимаю совсем. Перечитай свои посты внимательно и поправь.
Поправил.
Записан

Краткость - сестра таланта, некраткость - сам талант!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 21-01-2010 22:48 » 

Вот именно, что дописался...

Lines[n].Length()

Внимательнее надо! И спи побольше Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 22-01-2010 13:17 » 

RXL, вот как я решил сделать:
Код:
int Validate_Text[ ] = {360}; // пока в памяти хранится кол-во символов из одного файла
// но кол-во файлов, пусть даже будет расти не стремительно,
// в итоге со временем придётся всё равно изменить алгоритм их валидации на более серьёзный
// и этого пока достаточно

 int n,x_size,mas_valid_size;
 bool Valid;
 String Str_Full_Text;

 Valid = false;
 mas_valid_size = sizeof(Validate_Text);

 Str_Full_Text = My_Rich_Edit_1 -> Text;
 x_size = Str_Full_Text.Length();

  if (x_size != 0) {

 for (int i = 0; i < mas_valid_size; i++) {

if (x_size == Validate_Text[i]) {

  My_Status_Bar_1 -> Panels -> Items[0] -> Text = Str_Valid_Full;
  Valid = true;

}

 }

 if (!Valid) {

My_Status_Bar_1 -> Panels -> Items[0] -> Text = Str_Valid_Not;

 }

  }
  else MessageDlg("Файл данных не открыт!", mtInformation, TMsgDlgButtons() << mbOK, NULL);
Но сразу возник логичный вопрос:
Как узнать максимольно возможный размер строки - Str_Full_Text, т.е. максимальное кол-во символов, которые можно поместить в неё без выделения дополнительной памяти? Что-то типа: MaxCharSize? Просто в Builder'e 2010 я похожего не нашёл..
« Последнее редактирование: 22-01-2010 18:45 от Dr.CODE » Записан

Краткость - сестра таланта, некраткость - сам талант!
Dr.CODE
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 09-02-2010 18:12 » 

Возник животрепещущий вопрос! Можно-ли *.rtf файл считывать построчно и подгружать каждую считанную строку на поле компонента RichEdit? И если да, то как это можно быстро реализовать?
Записан

Краткость - сестра таланта, некраткость - сам талант!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 10-02-2010 09:51 » 

Э...
Не знаю как пацаны, а я не возражаю - считывай построчно (c)
Ага

В чем проблема то? Ты проверил сперва, что TRichEdit такое допускает?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines