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


Спасибо это работает, но почему так не лаконично?!
В Delphi этот код выглядит попроще...
...
Рейтинг: 0 / 0
как определить, что текущий компонент класса TEdit
    #32791010
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А каким на 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
как определить, что текущий компонент класса TEdit
    #32791194
SCORPION Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему у меня виснет при появлении формы. Первый активный компонент -
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
как определить, что текущий компонент класса TEdit
    #32791215
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что значит "виснет"? Exception какой появляется?

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

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

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


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


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

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


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