Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.07.2011, 02:33
Fox Mulder Fox Mulder вне форума
Прохожий
 
Регистрация: 19.01.2011
Сообщения: 16
Репутация: 10
По умолчанию создание компонента на основе TImage с SetFocus

создаю компонент на основе Image. идея компонента - табличный редактор, берет из фаила данные и представляет в виде таблицы. Примерно тот же StringGrid только вся отрисовка данных сделана вручную. Примерно все представляю как и что, но есть и загвоздки. Мне нужно чтобы моему компоненту можно было передать фокус, как Edit'у или Memo. Чтобы можно было написать NewComponent.SetFocus. и после этого он обрабатывал бы все нажатия кнопок и тд. к примеру мне нужно чтобы он реагировал на прокрутку колесика мыши. если я правильно понимаю то после передачи ему фокуса это не составит труда, а так пробовал хуки, но все они либо вообще не работаю либо работают в какой то определенный момент. стоит мне шелкнуть на FileListBox например и все, мой компонент уже не ловит события от мыши. Но как создать свойство SetFocus у компонента. который отродясь им не обладает, я понятия не имею. Если кто знает подскажите плиз.
Ответить с цитированием
  #2  
Старый 08.07.2011, 02:50
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Посмотри как реализовано это свойство у TWinControl и по аналогии создай своё.
Ответить с цитированием
  #3  
Старый 08.07.2011, 09:34
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

наследуйся от TCustomControl - как раз для таких целей. может и фокус получать и Paint с Canvas есть.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 10.07.2011, 23:51
Fox Mulder Fox Mulder вне форума
Прохожий
 
Регистрация: 19.01.2011
Сообщения: 16
Репутация: 10
По умолчанию

спасибо за ответы. попробовал TCustomControl, вроде бы подходит. только ни одного события, все надо прописывать
Ответить с цитированием
  #5  
Старый 11.07.2011, 09:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ну естественно нужные тебе методы переопределить.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 31.07.2011, 02:33
Fox Mulder Fox Mulder вне форума
Прохожий
 
Регистрация: 19.01.2011
Сообщения: 16
Репутация: 10
По умолчанию

Конечно мне этот TCustomControl решив проблемы с фокусом создал много других проблем. Ему нельзя задать Popumenu. Как создать это свойство у него?
Прописал ему событие OnMouseDown, но без координат.
У меня :
Код:
procedure TForm1.MyComponent1MouseDown(Sender: TObject);
а должно быть соответствено:
Код:
procedure TForm1.MyComponent1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
как добавить x,y, button ?
Ответить с цитированием
  #7  
Старый 31.07.2011, 02:49
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Ему нельзя задать Popumenu
Что то путаешь, смотрим производные от TCustomControl. К примеру:
TCustomControl->TCustomPanel->TPanel->published->PopupMenu
разбирайся где накосячил.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 31.07.2011, 22:14
Fox Mulder Fox Mulder вне форума
Прохожий
 
Регистрация: 19.01.2011
Сообщения: 16
Репутация: 10
По умолчанию

ктото из нас двоих чтото непонимает.
Цитата:
Что то путаешь, смотрим производные от TCustomControl. К примеру:
TCustomControl->TCustomPanel->TPanel->published->PopupMenu
так это ПРОИЗВОДНЫЕ ОТ TCustomControl.

если наследоваться от TCustomControl, то у компонента нету в инспекторе объектов Popupmenu, где можно указать какое popupmenu вызывать по щелчку мыши. наследоватьтся же от TPanel не имеет смысла так как у него нету Canvas, а он мне жизнено необходим.
попробовал наследоваться от TCustomPanel, popupmenu тоже нету
Ответить с цитированием
  #9  
Старый 31.07.2011, 22:24
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
так это ПРОИЗВОДНЫЕ ОТ TCustomControl.
Производные, наследники в данном случае одно и тоже. Я просто привёл пример первого попавшегося мне контрола унаследованного от TCustomControl и у которого имеется PopupMenu, поэтому и говорю, что где то напутано. Код представь.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 31.07.2011, 23:19
Fox Mulder Fox Mulder вне форума
Прохожий
 
Регистрация: 19.01.2011
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Производные, наследники в данном случае одно и тоже
это я понял.

очевидно свойство Popupmenu добавлено в TPanel. почему его использовать я не могу я уже написал.
а чего код то.. создаю новый компонент ( Delphi 2007. через Component > New VCL Component ) , выбираю TCustomControl, сохраняю, инсталирую в среду. открываю форму, ставлю компонент, смотрю свойсвтва Popupmenu НЕТУ.

попробуйте сами создать компонент от TCustomControl и если у него будет Popupmenu - я дятел

Последний раз редактировалось Fox Mulder, 31.07.2011 в 23:21.
Ответить с цитированием
  #11  
Старый 31.07.2011, 23:45
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я же говорил, посмотри как сделано в 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  
Старый 01.08.2011, 12:24
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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  
Старый 01.08.2011, 14:07
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ненужное усложнение, добавка в published достаточна.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #14  
Старый 01.08.2011, 14:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

angvelem , это про что сейчас было?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #15  
Старый 01.08.2011, 14:38
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Про это:
Код:
  published
    { Published declarations }
    property PopupMenu;
больше ничего добавлять не требуется.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter