Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];

Вниз

Как применить общее свойство к 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.011 c
14-1134672016
YurikGL
2005-12-15 21:40
2006.01.15
Друг попросил задачку решить


14-1135018408
Санёк
2005-12-19 21:53
2006.01.15
Visual C++ 2005 Express Edition


14-1135314402
inew
2005-12-23 08:06
2006.01.15
Компьютерный супермаркет


3-1132639929
Ega23
2005-11-22 09:12
2006.01.15
Многопоточность и DB-компоненты


2-1135245919
Вт
2005-12-22 13:05
2006.01.15
Как установить в заданную позицию DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский