IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> использование методов при наследовании
Rian
сообщение 31.05.2011 18:58
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


пробую сделать объект с наследованием от Tpanel
и передавать ссылку от одного объекта другому, по драг дроп
ток не срабатывает метод dragover почему-то


type Tperson= class (TPanel)
public
id:integer;
own:Tperson;

//vis components
head:TLabel;
img:TImage;
canv:TCanvas;
constructor Create(aowner:Tcomponent);
procedure setCanvas(const link:TCanvas);
procedure place();
procedure DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure DragDrop(Sender, Source: TObject; X, Y: Integer);

end;

implementation
constructor Tperson.Create(aowner: Tcomponent);
begin
inherited create(Aowner);
Height:=100;
head:=TLabel.Create(self);
head.Caption:='555';
head.Parent:=self;
DragMode:=dmAutomatic;

img:=TImage.Create(self);
img.Width:=40;
img.Height:=40;
img.Top:=40;
img.Parent:=self;
img.Canvas.LineTo(20,40);
end;

procedure Tperson.DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
inherited DragOver(source,x,y,state,accept);
Accept:=true;
end;



и как перемещать Tperson обрабатывая img.mousemove
ЗЫ это понял
procedure Tperson.imageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
self.Left:=self.Left+1;
end;


Сообщение отредактировано: Rian - 31.05.2011 19:22


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 31.05.2011 21:16
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Стоп... Что значит "неизвестная"? Вот так:

Прикрепленное изображение

очень даже известная, компилируется без вопросов...

Цитата
а где я буду писать обратчик OnDragOver?
Обработчик события - это не метод. Ты в классе реализуешь метод DragOver. Создаешь компонент. Пользователь хочет работать с Drag-n-Drop. Его устраивает от функционал, который ты заложил в компонент - ничего не надо делать, все работает по умолчанию (при наступлении события). Не устраивает - он дабл-кликает на нужное событие, и пишет обработчик OnDragOver...

Еще раз: не путай метод и событие. Когда наступает событие. Когда наступает событие OnSomething выстреливается метод Something. Вот тебе пример. Знаешь, что такое Interceptor-класс, да? Это тот класс, который пишется перед классом формы для "открытия" каких-то частных или защищенных свойств/методов. Очень частая практика. Вот смотри:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

// Вот это и есть Interceptor-класс
type
TButton = class(StdCtrls.TButton)
public
procedure Click; override; // переопределим метод Click у кнопки
end;

type
TForm1 = class(TForm)
Button1: TButton; // Положим на форму только одну кнопку
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

// Это то, что мы хотим сделать
procedure TButton.Click;
begin
ShowMessage('Oops! How it worked???')
end;

end.
И теперь, не назначая никаких обработчиков событий OnClick, ничего вообще не делаем, сразу запускаем код на выполнение и жмем кнопку. Что произошло? Ага!!! Событие OnClick наступило, и сработал метод Click... Чувствуешь разницу?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.06.2025 16:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"