0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 12
1

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

04.04.2011, 21:17. Показов 946. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2011, 21:17
Ответы с готовыми решениями:

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

Как создать свой компонент, на основе стандартного?
Как создать свой компонент на основе стандартного. Например, хочу сделать свой компонент на основе...

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

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

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

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

P.S. Кому интересно ...
Я использовал несколько компонентов внутри компонента TWinControl и таким образом я получал фокус не в самом компоненте TWinControl, а в другом компоненте.
Этот подход дал мне возможность взглянуть на свою задачу иначе и понять некоторые моменты по поводу TWinControl. Ну и решить свою задачу
А вся интересность в том, что когда сам докапаешься до решения проблем - оно всегда "в сто крат" лучше, чем за тебя решат проблему.
Да я и не просил решать проблему - я просто попросил подказать и направить в нужное направление
Дай Бог каждому из Вас аналогичной помощи в Ваших проблемах
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2011, 22:16

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

Свой компонент
В программе будет использоваться большое количество Edit'ов и нужно во всех сделать так чтобы в них...

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

Свой компонент в Netbeans
Здравствуйте. Пишу в IDE Netbeans. Создал наследника от Jpanel в отдельном файле, добавил файл (add...

Создать свой компонент
Здравствуйте!Нужно реализовать визуальный компонент( светофор) для отображения реального объекта и...

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


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

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

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