Поиск:

Ответ в темуСоздание новой темы Создание опроса
> события у компонентов 
:(
    Опции темы
artsb
Дата 24.12.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Всем привет.
Бывают такие случаи, когда на форме очень много одинаковых компонентов (например, Edit'ы), и при определённых событиях нужно выполнять однообразный код. Например,
Код

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if((Key>='0')&&(Key<='9')) return;
if(Key==VK_BACK) return;
if(Key==VK_DELETE) return;
Key=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
if((Key>='0')&&(Key<='9')) return;
if(Key==VK_BACK) return;
if(Key==VK_DELETE) return;
Key=0;
}
// и т.д.

Так вот, я подумал, может можно написать какую-то функцию, которая будет вызываться. А в ней прописать всё, что нужно. А в качестве параметров передавать объект над которым производятся действия и ещё что-нибудь, что нужно.
Кто-нибудь знает как это сделать?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mrbrooks
Дата 24.12.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



В твоем случае имхо - выделяешь все свои эдиты с помощью shift - переходишь на вкладку событий и выбираешь тебе нужное. Например тот же KeyPress - и будет этот обработчик для всех выделенных эдитов   smile 
PM MAIL   Вверх
artsb
Дата 24.12.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Да нет, это я знаю.
А вот если внутри обработчика Edit1Change нужно написать так:
Код

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Edit1->Text=...;
}

Если этот обработчик назначить остальным компонентам, то будет изменяться только Edit1. Нужно что-то универсальное...


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
dumb
Дата 25.12.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Код

void __fastcall TForm1::EditXChange(TObject *Sender)
{
  TEdit *edit = dynamic_cast<TEdit*>(Sender);
  if (!edit) return;
  edit->Text=...;
}

PM MAIL   Вверх
artsb
Дата 25.12.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



dumb спасибо. А ты не мог бы объяснить что тут происходит:
Код

dynamic_cast<TEdit*>(Sender)



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Lazin
Дата 25.12.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



параметр TObject *Sender это адрес компонента - источника события
dynamic_cast<TEdit*>(Sender) - приводит Sender к типу TEdit, если это не получается сделать возвращает 0
этот код сработает для любого эдита на форме...
PM MAIL Skype GTalk   Вверх
artsb
Дата 25.12.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Спасибо с этим понятно.
А как быть в такой ситуации:
Код

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Button1->Caption=Edit1->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
Button2->Caption=Edit2->Text;
}
// и т.д.

Насчёт Edit'ов понятно, а как быть с Button'ами?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
dumb
Дата 26.12.2007, 04:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(artsb @  25.12.2007,  23:00 Найти цитируемый пост)
а как быть с Button'ами?
лехко. и со всеми остальными - по аналогии.

Код

  TEdit *edit = dynamic_cast<TEdit*>(Sender);
  if (!edit) return;
  AnsiString bname = edit->Name;
  bname = StringReplace(bname, "Edit", "Button", TReplaceFlags());
  TButton *button = dynamic_cast<TButton*>(FindComponent(bname));
  if (!button) return;
  button->Caption = edit->Text;


PM MAIL   Вверх
artsb
Дата 26.12.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Спасибо всем. Буду теперь пробовать.

Вопрос не по теме: где можно узнать о FloatToStrF() и ей подобных функциях. В справке Билдера, почему-то нет информации о ней.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Lazin
Дата 26.12.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



не может этого быть, 

Цитата

Class 
AnsiString 

Syntax 


[C++] AnsiString FloatToStrF (long double value, AnsiString::TStringFloatFormat format, int precision, int digits);


Description 
The format parameter controls the format of the resulting string. The precision parameter specifies the precision of the given value. It should be 7 or less for values of type float, 15 or less for values of type double, and 18 or less for values of type Extended. The meaning of the digits parameter depends on the particular format selected. 
The possible values of the format parameter, and the meaning of each, are described below.
   Value  Meaning 
 sffGeneral 
 General number format. The value is converted to the shortest possible decimal string using fixed or scientific format. Trailing zeros are removed from the resulting string, and a decimal point appears only if necessary. The resulting string uses fixed point format if the number of digits to the left of the decimal point in the value is less than or equal to the specified precision, and if the value is greater than or equal to 0.00001. Otherwise the resulting string uses scientific format, and the digits parameter specifies the minimum number of digits in the exponent (between 0 and 4).
 
 sffExponent
 Scientific format. The value is converted to a string of the form "-d.ddd...E+dddd". The resulting string starts with a minus sign if the number is negative, and one digit always precedes the decimal point. The total number of digits in the resulting string (including the one before the decimal point) is given by the precision parameter. The "E" exponent character in the resulting string is always followed by a plus or minus sign and up to four digits. The digits parameter specifies the minimum number of digits in the exponent (between 0 and 4).
 
 sffFixed
 Fixed point format. The value is converted to a string of the form "-ddd.ddd...". The resulting string starts with a minus sign if the number is negative, and at least one digit always precedes the decimal point. The number of digits after the decimal point is given by the digits parameter--it must be between 0 and 18. If the number of digits to the left of the decimal point is greater than the specified precision, the resulting value will use scientific format.
 
 sffNumber
 Number format. The value is converted to a string of the form "-d,ddd,ddd.ddd...". The sffNumber format corresponds to the sffFixed format, except that the resulting string contains thousand separators.
 
 sffCurrency
 Currency format. The value is converted to a string that represents a currency amount. The conversion is controlled by the CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, and DecimalSeparator global variables, all of which are initialized from the Currency Format in the International section of the Windows Control Panels. The number of digits after the decimal point is given by the Digits parameter--it must be between 0 and 18.
 

For all formats, the actual characters used as decimal and thousand separators are obtained from the DecimalSeparator and ThousandSeparator global variables.
 
If the given value is a NAN (not-a-number), the resulting string is 'NAN'. If the given value is positive infinity, the resulting string is 'INF'. If the given value is negative infinity, the resulting string is '-INF'.

PM MAIL Skype GTalk   Вверх
artsb
Дата 26.12.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Lazin как ты нашёл, если не секрет?  smile 
Я ввёл FloatToStrF(), поставил на неё курсор и нажал F1.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Lazin
Дата 26.12.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 18
Всего: 154



Я запустил ихний браузер документации и ввел в строку поиска имя ф-ии.
PM MAIL Skype GTalk   Вверх
artsb
Дата 26.12.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Точно! Нашёл. Спасибо. А как узнать все варианты конвертирования (например, IntToStr, StrToInt - какие ещё?)


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.