|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
создание компонента на основе TImage с SetFocus
создаю компонент на основе Image. идея компонента - табличный редактор, берет из фаила данные и представляет в виде таблицы. Примерно тот же StringGrid только вся отрисовка данных сделана вручную. Примерно все представляю как и что, но есть и загвоздки. Мне нужно чтобы моему компоненту можно было передать фокус, как Edit'у или Memo. Чтобы можно было написать NewComponent.SetFocus. и после этого он обрабатывал бы все нажатия кнопок и тд. к примеру мне нужно чтобы он реагировал на прокрутку колесика мыши. если я правильно понимаю то после передачи ему фокуса это не составит труда, а так пробовал хуки, но все они либо вообще не работаю либо работают в какой то определенный момент. стоит мне шелкнуть на FileListBox например и все, мой компонент уже не ловит события от мыши. Но как создать свойство SetFocus у компонента. который отродясь им не обладает, я понятия не имею. Если кто знает подскажите плиз.
|
#2
|
||||
|
||||
Посмотри как реализовано это свойство у TWinControl и по аналогии создай своё.
|
#3
|
||||
|
||||
наследуйся от TCustomControl - как раз для таких целей. может и фокус получать и Paint с Canvas есть.
Пишу программы за еду. __________________ |
#4
|
|||
|
|||
спасибо за ответы. попробовал TCustomControl, вроде бы подходит. только ни одного события, все надо прописывать
|
#5
|
||||
|
||||
ну естественно нужные тебе методы переопределить.
Пишу программы за еду. __________________ |
#6
|
|||
|
|||
Конечно мне этот TCustomControl решив проблемы с фокусом создал много других проблем. Ему нельзя задать Popumenu. Как создать это свойство у него?
Прописал ему событие OnMouseDown, но без координат. У меня : Код:
procedure TForm1.MyComponent1MouseDown(Sender: TObject); Код:
procedure TForm1.MyComponent1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
#7
|
||||
|
||||
Цитата:
TCustomControl->TCustomPanel->TPanel->published->PopupMenu разбирайся где накосячил. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#8
|
|||
|
|||
ктото из нас двоих чтото непонимает.
Цитата:
если наследоваться от TCustomControl, то у компонента нету в инспекторе объектов Popupmenu, где можно указать какое popupmenu вызывать по щелчку мыши. наследоватьтся же от TPanel не имеет смысла так как у него нету Canvas, а он мне жизнено необходим. попробовал наследоваться от TCustomPanel, popupmenu тоже нету |
#9
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#10
|
|||
|
|||
Цитата:
очевидно свойство Popupmenu добавлено в TPanel. почему его использовать я не могу я уже написал. а чего код то.. создаю новый компонент ( Delphi 2007. через Component > New VCL Component ) , выбираю TCustomControl, сохраняю, инсталирую в среду. открываю форму, ставлю компонент, смотрю свойсвтва Popupmenu НЕТУ. попробуйте сами создать компонент от TCustomControl и если у него будет Popupmenu - я дятел Последний раз редактировалось Fox Mulder, 31.07.2011 в 23:21. |
#11
|
||||
|
||||
Я же говорил, посмотри как сделано в TPanel, ну ладно: ты забыл добавить в published свойство PopupMenu ручками
Код:
unit MyCmpnt_vcl; interface uses SysUtils, Classes, Controls; type TCustomControl1 = class(TCustomControl) private { Private declarations } protected { Protected declarations } public { Public declarations } published { Published declarations } property PopupMenu; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TCustomControl1]); end; end. х/ф "Отроки во Вселенной" Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 01.08.2011 в 00:03. |
#12
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TPopupCustomControl = class(TCustomControl) private procedure DoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); public constructor Create(AOwner: TComponent); override; published property PopupMenu; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TPopupCustomControl } constructor TPopupCustomControl.Create(AOwner: TComponent); begin inherited Create(AOwner); OnMouseDown:=DoMouseDown; end; procedure TPopupCustomControl.DoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ShowMessage(IntToStr(X)+', '+IntToStr(Y)); end; { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin with TPopupCustomControl.Create(Self) do begin Parent:=Self; Width:=100; Height:=100; end; end; end. Пишу программы за еду. __________________ |
#13
|
||||
|
||||
Ненужное усложнение, добавка в published достаточна.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#14
|
||||
|
||||
angvelem , это про что сейчас было?
Пишу программы за еду. __________________ |
#15
|
||||
|
||||
Про это:
Код:
published { Published declarations } property PopupMenu; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |