Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

cm_mouseleave при MouseDown [D7, WinXP]


iBitmap ©   (2004-08-20 17:18:00) 

Доброе время суток!
Я прочитал тему модернизация TImage.
А у меня такой вопрос, есть ли такоя функиция, как CM_MOUSELEAVE, только при нажатой кнопки мыши?
И еще вопрос, можно ли сделать, чтобы при выполнении procedure TImage1.CMMouseEnter(var Msg: TMessage); в переменную String (назовем ее CName: String) записывалось бы имя компонента.
Заранее благодарен.


Dynamic   (2004-08-23 00:58:00) [1]

http://www.vr-online.ru/php/forum/viewtopic.php?p=30342#30342


iBitmap   (2004-08-22 15:34:00) [2]

Никто не знает ответа? Если нет, то я тогда приступаю к нудному, но работоспособному способу.


iBitmap   (2004-08-21 23:17:00) [3]

^^^^ Добавление к ^^^^
Еще выяснилось, чт0
  Здесь:
    cbssButton:= (Sender as TBSSButton);
   и здесь:
    cbssImage:= (FindComponent(String(Sender) + '_normal') as TImage);
   Присваевается значение nil, что не есть хорошо,
И если прописать сразу все
Application.MainForm.BSSButton1.Picture:= Application.MainForm.Image1.Picture; ТО даже не запускается.


iBitmap   (2004-08-21 23:10:00) [4]

^^ Добавлено к ^^
 Я стер Application.MainForm и оставил просто
cbssButton.Picture:= cbssImage.Picture;
После чего компонент успешно проинсталировался, но на этой строчке все равно запарывается.
Пробовал и эту строчку испавить cbssImage:= (FindComponent(String(Sender) + '_normal') as TImage);
Выяснилось, что он в стринг не правильно переводит я оставил только:
cbssImage:= (FindComponent('_normal') as TImage);
Все равно застревает на той строчке (cbssButton.Picture:= cbssImage.Picture;)


iBitmap   (2004-08-21 22:53:00) [5]

Почти добрался до цели: Вот что получилось (Я просто Sender задал и все):
procedure TBSSButton.MouseEnter(Sender: TObject);
var cbssImage: TImage;
   cbssButton: TBssButton;
begin
 If Assigned(FOnMouseEnter) Then
   begin
     cbssButton:= (Sender as TBSSButton);
     cbssImage:= (FindComponent(String(Sender) + '_normal') as TImage);

     cbssButton.Picture:= Application.MainForm.cbssImage.Picture; //Но на этой строчке дельфи пишет "Undeclared indentifier: 'cbssImage'", хотя все объявлено. Еще пишет "Statement expected, but expression of type 'TPicture' found".
     FOnMouseEnter(Self);
   end;
end;


iBitmap   (2004-08-21 21:26:00) [6]

А если как-нибудь через  (FindComponent((Sender as TBSSButton).name) as TBSSButton).Picture:= Application.MainForm.Image1.Picture; ?
Может есть какой-нибудь такой способ?


Gero   (2004-08-21 19:55:00) [7]


> Странно, в TComponent свойства Name нет.

Ничем не могу помочь.


iBitmap   (2004-08-21 13:38:00) [8]

Точнее ошибочка вышла... Нужно в другую процедуру писать. но все равно не работает. даже пробовал TBSSButton.Name там тоже нет Name. Нужно в эту процедуру писать:
procedure TBSSButton.CMMouseEnter(var Msg: TMessage);
begin
 (FindComponent(TComponent.Name as TBSSButton).Picture:= Application.MainForm.Image1.Picture;
 MouseEnter;
end;

Задача такая, хотя наверное она ясна, но все же напишу, нужно компоненту узнать свое имя, потом найти самого себя (FindComponent), и присвоить такую же картинку, как у Image1.


iBitmap   (2004-08-21 12:59:00) [9]

Странно, в TComponent свойства Name нет. Я так пробовал сделать:
procedure TBSSButton.MouseEnter;
begin
 If Assigned(FOnMouseEnter) Then
   begin
     FOnMouseEnter(Self);
     (FindComponent(TComponent.Nameas TBSSButton).Picture:= Application.MainForm.Image1.Picture;    
   end;
end;

Смысл того, что мне нужно в этой процедуре наврное понятен. осталось только ее исправить, чтобы она работала.


Gero   (2004-08-21 08:03:00) [10]


> iBitmap ©   (21.08.04 01:13)

TComponent.Name


antonn   (2004-08-21 07:12:00) [11]

А ты вставляй все это дело в Design, в инспекторе объектов. При установленном компоненте.


iBitmap   (2004-08-21 01:13:00) [12]

Не имя программы, а вот я компонент на форму добавил и задал ему имя (name), и во время работы программы мне нужно узнать во время выполнения процедуры procedure TBSSButton.MouseEnter;его имя


Gero   (2004-08-21 00:59:00) [13]


> Там вопрос в процедуре procedure TBSSButton.MouseEnter;

Сорри, не увидел.

> как из компонента управлять объектами на главной форме

uses Forms;
...
Application.MainForm

> и как узнать имя компонента, которое я задал при проектировании
> проекта (Name)?

Свойство Name ?


iBitmap   (2004-08-21 00:54:00) [14]

Нет.
Там вопрос в процедуре procedure TBSSButton.MouseEnter;
как из компонента управлять объектами на главной форме.. и как узнать имя компонента, которое я задал при проектировании проекта (Name)?


Gero   (2004-08-21 00:06:00) [15]


> iBitmap ©   (20.08.04 23:53)

Похвастаться решил?


iBitmap   (2004-08-20 23:53:00) [16]

Вот я написал такой код для компонента
unit BSSSButton;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, Dialogs, Graphics;

type
 TBSSButton = class(TImage)
 private
   FOnMouseLeave: TNotifyEvent;
   FOnMouseEnter: TNotifyEvent;
   procedure CMMouseEnter(var MSG: TMessage); Message CM_MOUSEENTER;
   procedure CMMouseLeave(var MSG: TMessage); Message CM_MOUSELEAVE;
 protected
   procedure MouseEnter; Dynamic;
   procedure MouseLeave; Dynamic;
 public
   { Public declarations }
 published
   property OnMouseEnter: TNotifyEvent Read FOnMouseEnter Write FOnMouseEnter;
   property OnMouseLeave: TNotifyEvent Read FOnMouseLeave Write FOnMouseLeave;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents('ActiveX', [TBSSButton]);
end;

procedure TBSSButton.CMMouseEnter(var Msg: TMessage);
begin
 MouseEnter;
end;

procedure TBSSButton.CMMouseLeave(var Msg: TMessage);
begin
 MouseLeave;
end;

procedure TBSSButton.MouseEnter;
begin
 If Assigned(FOnMouseEnter) Then
   begin
     FOnMouseEnter(Self);
     !!!Вот здесь нужно определить имя, которое задано в проекте (Name)
     и как потом самому себе присвоить картинку с формы из image1.picture.!!!
   end;
end;

procedure TBSSButton.MouseLeave;
begin
 If Assigned(FOnMouseLeave) Then
   FOnMouseLeave(Self);
end;

end.


antonn   (2004-08-20 17:32:00) [17]

>чтобы при выполнении procedure TImage1.CMMouseEnter(var Msg: >TMessage); в переменную String (назовем ее CName: String) >записывалось бы имя компонента.

В OnMouseEnter вставляешь
String:= ( Sender as Timage(ну или как там у тебя) ).name;

>А у меня такой вопрос, есть ли такоя функиция, как CM_MOUSELEAVE, только при нажатой кнопки мыши?
Используй переменную - B:boolean;
При OmMouseDown B:=true;
При OnMouseUp B:=false;
А в OnMouseLeave делай проверку


Наверх

Титульная страница Поиск, карта сайта Написать письмо