Главная страница
    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.014 c
6-1127837051
maVladimir
2005-09-27 20:04
2006.01.15
Многопоточная закачка файлов


2-1135497257
Kot_
2005-12-25 10:54
2006.01.15
Вставка авто суммы в MS Word


3-1132404671
redlord
2005-11-19 15:51
2006.01.15
оказ в обслуживании MSSQL server


6-1128355039
Evil Spirit
2005-10-03 19:57
2006.01.15
FTP через TClientSocket


8-1123614825
Ландграф Павел
2005-08-09 23:13
2006.01.15
Зацените програмку для копирования mp3





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский