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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KBEPTMEH
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 12
#1

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

04.04.2011, 21:17. Просмотров 666. Ответов 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);
  ...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2011, 21:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Свой компонент на основе TWinControl (C++):

Пример использование стека на основе массива и на основе двунаправленного списка - C++
здраствуте, можете привести примеры использывания стека на основе массива(1 код) и стек на основе двунаправленного списка(2...

Создать свой компонент в c++builder6 (на основе TStringGrid)? - C++ Builder
Построить класс - потомок класса TStringGrid, объект которого при нажатии клавиши F11 выводит в отдельном окне сообщения о своих параметры:...

Дочернее окно на основе TWinControl - Delphi
Всем привет. Какое то время программировал на mfc, там можно было создать к примеру дочернее окно на основе cview. Хотелось бы и в...

.NET 2.x Свой компонент от ListBox. Не могу задать свой тип для Items - C#
День добрый господа. Нуждаюсь в вашей помощи. Суть такова, что я желаю создать свой компонент на базе ListBox. На данный момент меня...

Можно ли создать компонент на основе класса TMemo, чтобы компонент был в виде геометрической фигуры? - Delphi
Требуется создать компонент на основе класса TMemo, так чтобы вид компонента был в виде геометрической фигуры. Пример: компонент в виде...

Свой хостинг на основе Nginx - nginx
Здравствуйте! Мы сейчас арендуем выделенный сервер, на основе (Read Hat, CentOS, Njinx), платим не мало! Исходя из этого задумались...

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

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

P.S. Кому интересно ...
Я использовал несколько компонентов внутри компонента TWinControl и таким образом я получал фокус не в самом компоненте TWinControl, а в другом компоненте.
Этот подход дал мне возможность взглянуть на свою задачу иначе и понять некоторые моменты по поводу TWinControl. Ну и решить свою задачу
А вся интересность в том, что когда сам докапаешься до решения проблем - оно всегда "в сто крат" лучше, чем за тебя решат проблему.
Да я и не просил решать проблему - я просто попросил подказать и направить в нужное направление
Дай Бог каждому из Вас аналогичной помощи в Ваших проблемах
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2011, 22:16
Привет! Вот еще темы с ответами:

свой ГИС на основе Яндекс карт - Web
Планирую создать небольшую ГИС локального массштаба на основе Яндекс карт. Как должно работать: Пользователь регистрируется. ...

Свой компонент в Netbeans - Java
Здравствуйте. Пишу в IDE Netbeans. Создал наследника от Jpanel в отдельном файле, добавил файл (add to pallete), добавляю его на фрейм, но...

Свой браузер на основе элемента управления WebBrowser - C#
Создал простенький WebBrowser. Вот код: public partial class Form1 : Form { public Form1() { ...

Сделать свой VCL-компонент - C++ Builder
- Здравствуйте Завсегдатаи! Хочу попросить Вашего совета в одном вопросе. Конструирую свой VCL-компонент (TmyListBox) на основе...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru