Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / как определить, что текущий компонент класса TEdit / 13 сообщений из 13, страница 1 из 1
18.11.2004, 17:09
    #32789822
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
как определить, что текущий активный компонент editom
...
Рейтинг: 0 / 0
18.11.2004, 17:51
    #32789950
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
см. C++ RTTI (run-time type information)
...
Рейтинг: 0 / 0
19.11.2004, 11:07
    #32790754
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
Да просто может мне кто-то ответить есть ли в BCB операторы as или is,
т.е. их аналоги. Короче как в си будет следующий код:
Код: plaintext
if (ActiveControl is TEdit) ...
...
Рейтинг: 0 / 0
19.11.2004, 11:22
    #32790804
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
GetClassName можно попробовать... это из Win32API
...
Рейтинг: 0 / 0
19.11.2004, 11:30
    #32790827
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
...
Рейтинг: 0 / 0
19.11.2004, 12:05
    #32790942
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
funikovyuri
Код: plaintext
1.
2.
   if (dynamic_cast<TEdit*>(ActiveControl) != null ) ...


Спасибо это работает, но почему так не лаконично?!
В Delphi этот код выглядит попроще...
...
Рейтинг: 0 / 0
19.11.2004, 12:25
    #32791010
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
А каким на Delphi будет такой код

Код: plaintext
1.
2.
3.
4.
5.
 
TEdit *myEdit = dynamic_cast<TEdit*>(ActiveControl);
if (myEdit!= null ) 
  myEdit.Value = "some text"


Я это к тому что dynamic_cast делает не совсем то что is. IS просто сообщает о принадлежности к типа, тогда как dynamic_cast возвращает указатель на нужный тип или null если к этому типа указатель привести нельзя... Т.е. в вашей ситуации is лаконичней, а в приведенной мной - лаконичей dynamic_cast
...
Рейтинг: 0 / 0
19.11.2004, 13:11
    #32791194
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
Почему у меня виснет при появлении формы. Первый активный компонент -
TMaskEdit. Виснет в строке int CurPos = obj->SelStart;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
//если компонент класса TEdit или TMaskEdit
 if ((dynamic_cast <TEdit*>(ActiveControl) != NULL)||
     (dynamic_cast <TMaskEdit*>(ActiveControl) != NULL))
{//000-1
 TEdit * obj = (TEdit*)Sender;//объект - TEdit
 int CurPos = obj->SelStart;
 if (Key == VK_LEFT) CurPos--;
 if (Key == VK_RIGHT) CurPos++;

 //если нажата "->" и "<-" для TEdit и курсор в начале или конце текста, то Tab  
 if ((Key == VK_RIGHT)&&(!Shift.Contains(ssShift))&&(!Shift.Contains(ssCtrl))&&
     (CurPos > obj->Text.Length()))
  {
   Key = '\0';
   SelectNext(ActiveControl, true, true);
   //FindNextControl(ActiveControl,true,true,false)->SetFocus();
  }
  else if ((Key == VK_LEFT)&&(!Shift.Contains(ssShift))&&(!Shift.Contains(ssCtrl))&&
     (CurPos <  0 ))
  {
   Key = '\0';
   SelectNext(ActiveControl, false, true);
  }
}
}
...
Рейтинг: 0 / 0
19.11.2004, 13:17
    #32791215
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
что значит "виснет"? Exception какой появляется?

А TEdit и TMaskEdit связаны наследованием и верно ли что TMaskEdit это потомок TEdit?
...
Рейтинг: 0 / 0
19.11.2004, 13:50
    #32791341
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
Да вот таблички с ошибкой нет! А вместо TEdit * obj = (TEdit*)Sender;
я писал и TMaskEdit * obj = (TMaskEdit*)Sender; - результат тот же.
А когда прописываю вместо int CurPos = obj->SelStart;

int CurPos = Edit1->SelStart; - то работает, но это же только для
одного edita, а для других ....
...
Рейтинг: 0 / 0
19.11.2004, 14:43
    #32791538
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
funikovyur i можно определить класс объекта и так

Код: plaintext
if (String(Sender->ClassName()) == "TEdit") ...
Этот вопрос разрешен. А вот как организовать определение
положения курсора в TEdit или TMaslEdit? Причем, чтобы этот
способ был универсальным.
...
Рейтинг: 0 / 0
19.11.2004, 15:07
    #32791622
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
Код: plaintext
if (String(Sender->ClassName()) == "TEdit") ...


Этот способ будет работать только для VCL-классов!
...
Рейтинг: 0 / 0
19.11.2004, 17:54
    #32792144
SCORPION Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как определить, что текущий компонент класса TEdit
funikovyuri
Код: plaintext
if (String(Sender->ClassName()) == "TEdit") ...


Этот способ будет работать только для VCL-классов!
1)Да похоже это правда.

2)Свою финкцию я переписал из FormKeyDown в EditKeyDown и теперь
зависаний нет. Вот только положение курсора кривовато определяется -
особенно для маскированных Edit-ов.
3)Есть ли способ выделить весь текст Edit-а, но при этом чтобы
в нем не "мерцал" курсор.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / как определить, что текущий компонент класса TEdit / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]