![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
создаю компонент на основе 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 разбирайся где накосячил. |
|
#8
|
|||
|
|||
|
ктото из нас двоих чтото непонимает.
Цитата:
если наследоваться от TCustomControl, то у компонента нету в инспекторе объектов Popupmenu, где можно указать какое popupmenu вызывать по щелчку мыши. наследоватьтся же от TPanel не имеет смысла так как у него нету Canvas, а он мне жизнено необходим. попробовал наследоваться от TCustomPanel, popupmenu тоже нету |
|
#9
|
||||
|
||||
|
Цитата:
|
|
#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.х/ф "Отроки во Вселенной" Последний раз редактировалось 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 достаточна.
|
|
#14
|
||||
|
||||
|
angvelem , это про что сейчас было?
|
|
#15
|
||||
|
||||
|
Про это:
Код:
published
{ Published declarations }
property PopupMenu; |