Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

Как применить общее свойство к N обьектам?   Найти похожие ветки 

 
Brack   (2005-07-13 02:37) [0]

Можно ли присвоить определенному количеству компонентов определенные переменные либо процедуру, которая будет одинаковой для всех в главном модуле программы?
 К примеру есть несколько преобразованных компонентов Tlabel, и нужно чтобы при наведении на какой-либо из них мышью, в окне TEdit1 показывалось его имя, т.е. выполнялась процедура в главном модуле программы вызывающаяся при наведении на любой компонент Tlabel.


 
Юрий Зотов ©   (2005-07-13 02:46) [1]

> Можно ли присвоить определенному количеству компонентов
> определенные переменные

Присвоить компоненту переменную? Это как так?

> либо процедуру, которая будет одинаковой для всех в главном
> модуле программы?

Обработчик события? Можно.

> выполнялась процедура в главном модуле программы вызывающаяся
> при наведении на любой компонент Tlabel.

CM_MOUSEENTER или OnMouseMove.


 
Brack   (2005-07-13 03:07) [2]

Присвоить компоненту переменную:
к примеру:
uses Tlabel;
...
any:integer;
...
только чтобы этот any становился равен anу1 в главном модуле программы при обработке события label(n).MouseMove

вот как такое "как так" можно сделать?


 
Юрий Зотов ©   (2005-07-13 03:24) [3]

> uses Tlabel;
Это как так?

> чтобы этот any становился равен anу1
Что такое any1?


 
Brack   (2005-07-13 03:47) [4]

точнее:
uses label
применятся пока как модуль, но он есть преобразованный Tlabel.

any - это переменная находящаяся в модуле label
any1 - это переменная находящаяся в главном модуле.

ЗЫ: Я понимаю, что не настолько разбираюсь в терминах ООП, и в его принципах. Поэтому разъясняюсь как могу, и считаю что -  более-менее понятно. А если нету желания помочь то попрошу не писать подобных замечаний.


 
Просто Джо ©   (2005-07-13 04:18) [5]


> и считаю что -  более-менее понятно.

Вы ошибочно так считаете. Я, например, тоже не понял. Думаю, того, что вы хотели сказать, не поймет и 0.1% форумцев.


 
Юрий Зотов ©   (2005-07-13 04:19) [6]

> uses label
Зачем писать придумки вместо реального кода? Чтобы Вас было еще труднее понять? Модуля с таким именем быть не может, в Паскале Label - зарезервированное слово.

> считаю что -  более-менее понятно.
Совершенно непонятно. Вы используете термины настолько произвольно, что они просто теряют смысл. Поэтому давайте без терминов, без переменных и без модулей - просто опишите, что Вы хотите получить, обычными русскими словами.

> попрошу не писать подобных замечаний.
Вам не нужны подсказки, где сделаны ошибки?


 
Brack   (2005-07-13 14:24) [7]

Вот такая вот задача:
Все операции проводятся на форме Form1.
Существует N преобразованных компонентов TLabel, называются они TMetka. Также они создаются в ходе работы программы.
Нужно чтобы при наведении на них мышью, в окне Edit1 появлялось имя N-ого компонента, на который и был наведен курсор.
Как осуществить эту задачу с помощью FindComponent и Timer`a я разобрался. Но с конструктивной точки зрения это не эффективно.
Проще можно было бы сделать если бы эти компоненты создавались заранее на форме. И тогда бы в каждом свойстве Metka(N)MouseMove прописать Edit1.text:=Metka(N).Caption
Но как поступить с нашей задачей, когда компоненты не создаются заранее?


 
Digitman ©   (2005-07-13 15:49) [8]


> TMetka


Metka := TMetka.Create(..); //создаем объект в ран-тайм
Metka.OnMouseMove := DoOnMouseMove; //назначаем единый обработчик события


 
Юрий Зотов ©   (2005-07-13 16:11) [9]


unit MyLabel;

interface

uses
 Messages, Classes, Controls, StdCtrls;

type
 TNotifyLabel = class(TLabel)
 private
   FOnMouseEnter: TNotifyEvent;
   FOnMouseLeave: TNotifyEvent;
   procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
   procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
 protected
   procedure MouseEnter; dynamic;
   procedure MouseLeave; dynamic;
 published
   property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
   property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
 end;

 TMyLabel = class(TNotifyLabel)
   FEdit: TCustomEdit;
   procedure SetEdit(const Value: TCustomEdit);
 protected
   procedure MouseEnter; override;
   procedure MouseLeave; override;
   procedure Notification(AComponent: TComponent; Operation: TOperation); override;
   procedure SetEditText(const AText: string);
 published
   property Edit: TCustomEdit read FEdit write SetEdit;
 end;

implementation

{ TNotifyLabel }

procedure TNotifyLabel.CMMouseEnter(var Message: TMessage);
begin
 inherited;
 MouseEnter
end;

procedure TNotifyLabel.CMMouseLeave(var Message: TMessage);
begin
 inherited;
 MouseLeave
end;

procedure TNotifyLabel.MouseEnter;
begin
 if Assigned(FOnMouseEnter) then
   FOnMouseEnter(Self)
end;

procedure TNotifyLabel.MouseLeave;
begin
 if Assigned(FOnMouseLeave) then
   FOnMouseLeave(Self)
end;

{ TMyLabel }

procedure TMyLabel.MouseEnter;
begin
 SetEditText(Caption);
 inherited
end;

procedure TMyLabel.MouseLeave;
begin
 SetEditText("");
 inherited
end;

procedure TMyLabel.Notification(AComponent: TComponent; Operation: TOperation);
begin
 inherited;
 if (Operation = opRemove) and (AComponent = FEdit) then
   FEdit := nil
end;

procedure TMyLabel.SetEdit(const Value: TCustomEdit);
begin
 if FEdit <> Value then
 begin
   if FEdit <> nil then
     RemoveFreeNotification(FEdit);
   FEdit := Value;
   if FEdit <> nil then
     FreeNotification(FEdit)
 end
end;

procedure TMyLabel.SetEditText(const AText: string);
begin
 if (FEdit <> nil) and not (csDesigning in ComponentState) then
   FEdit.Text := AText
end;

end.

Вашу задачу решает компонент TMyLabel. Просто назначаете ему свойство Edit, а все остальное он сделает сам.



Страницы: 1 вся ветка

Текущий архив: 2006.01.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.049 c
3-1132313834
Карелин Артем
2005-11-18 14:37
2006.01.15
Numeric... Decimal... А отличия есть в них?


6-1127815341
Rentgen
2005-09-27 14:02
2006.01.15
Закрыть порт


2-1135259435
kotbazilio
2005-12-22 16:50
2006.01.15
SQL запрос к MS ACCESS


14-1134712989
syte_ser78
2005-12-16 09:03
2006.01.15
Премодерация


14-1134921013
Nic
2005-12-18 18:50
2006.01.15
Какие ассоциации у Вас...