Форум программистов, компьютерный форум CyberForum.ru

Свой компонент на основе TWinControl - C++

Восстановить пароль Регистрация
 
KBEPTMEH
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 12
04.04.2011, 21:17     Свой компонент на основе TWinControl #1
И сново здравствуйте

На этот раз пишу к Вам с небольшой проблемкой, касательно компонентов.

У меня появилась потребность создания своего поля ввода данных (как компонент Edit), который нужно реализовать на TWinControl.
Компоненты TMemo, TEdit, TCSpinEdit реализованы на TCustomEdit, а TCustomEdit в свою очередь реализован на TWinControl.

К чему это я все?
Дело в том, что создание компонента, его дальнейшее размещение, а так же добавление новых свойств и обработчиков - не вызывает проблемы.

Проблема в другом: Я никак не могу понять - Как заставить TWinControl "Ловить" и "Терять" фокус и отображать (прорисовывать) вводимый текст?

То есть к примеру, если создать компонент на основе TCustomEdit, то компонент сразу появляется в виде поля ввода и есть возможность вводить, копировать, вырезать и вставлять данные в поле ввода.
А если создать компонент на основе TWinControl, то появляется простой прямоугольник заданного размера и цвета фона (Свойство Brush, Класса TControl) и никаких действий с ним невозможно выполнить - то есть нельзя "в него" текст набирать и "из него" этот текст вырезать или копировать.

Как я понял, мне необходимо переопределять и заново обрабатывать сообщения:

C++
1
2
3
4
5
6
7
private:
  ...
  MESSAGE void __fastcall CMEnter(TWMNoParams &Message);
  MESSAGE void __fastcall CMExit(TWMNoParams &Message);
  MESSAGE void __fastcall WMPaste(TWMNoParams &Message);
  MESSAGE void __fastcall WMCut(TWMNoParams &Message);
  ...
Но с другой стороны, если их не переопределять и не обрабатывать самостоятельно, то эти сообщения будут определены и обработаны непосредственно "родителем" (Parent-ом), а именно TWinControl.

Так же, как я понимаю, мне необходимо руками рисовать Border компоненту, задавать область (TRect), в которую можно будет вводить текст, непосредственно прорисовывать данный текст и так далее ...

Но я не могу понять, как придать фокус своему компоненту на TWinControl

P.S. Нужно создать именно на TWinControl ...

Если подобная тема поднималась на форуме - "ткните мордой" пожалуйста
Сам искал по форуму похожие темы, перелистал много, но ничего похожего не нашел

Всем заранее огромное спасибо.

Добавлено через 10 минут
Так же есть мнение (в данный момент проверяю) - что фокусировка задается при помощи указания параметров:

C++
1
2
3
4
protected:
  ...
  virtual void __fastcall CreateParams( TCreateParams &Params );
  ...
Добавлено через 18 минут
Хм, накопал, что у компонента за фокусировку отвечает:

C++
1
2
3
4
5
6
7
public:
  ...
  DYNAMIC bool __fastcall Focused(void);
  DYNAMIC bool __fastcall CanFocus(void);
  ...
  virtual void __fastcall SetFocus(void);
  ...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2011, 21:17     Свой компонент на основе TWinControl
Посмотрите здесь:

C++ свой strcpy()
Свой класс String C++
Свой класс string C++
C++ свой контейнерный класс
Свой класс в С++ C++
Строки свой класс C++
Записать в файл S сначала компонент файла F, затем компонент файла G с сохранением порядка C++
C++ Записать в файл S сначала компонент файла F, затем компонент файла G, с сохранением порядка

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KBEPTMEH
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 12
06.04.2011, 22:16  [ТС]     Свой компонент на основе TWinControl #2
Все, вопрос решился альтернативным подходом к задаче, но при использовании все того же TWinControl

Спасибо "всем", кто решил поучаствовать в обсуждении

P.S. Кому интересно ...
Я использовал несколько компонентов внутри компонента TWinControl и таким образом я получал фокус не в самом компоненте TWinControl, а в другом компоненте.
Этот подход дал мне возможность взглянуть на свою задачу иначе и понять некоторые моменты по поводу TWinControl. Ну и решить свою задачу
А вся интересность в том, что когда сам докапаешься до решения проблем - оно всегда "в сто крат" лучше, чем за тебя решат проблему.
Да я и не просил решать проблему - я просто попросил подказать и направить в нужное направление
Дай Бог каждому из Вас аналогичной помощи в Ваших проблемах
Yandex
Объявления
06.04.2011, 22:16     Свой компонент на основе TWinControl
Ответ Создать тему
Опции темы

Текущее время: 20:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru