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

Вниз

cm_mouseleave при MouseDown   Найти похожие ветки 

 
iBitmap ©   (2004-08-20 17:18) [0]

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


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

>чтобы при выполнении 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 делай проверку


 
iBitmap ©   (2004-08-20 23:53) [2]

Вот я написал такой код для компонента
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.


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


> iBitmap ©   (20.08.04 23:53)

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


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

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


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


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

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

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

uses Forms;
...
Application.MainForm

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

Свойство Name ?


 
iBitmap ©   (2004-08-21 01:13) [6]

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


 
antonn ©   (2004-08-21 07:12) [7]

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


 
Gero ©   (2004-08-21 08:03) [8]


> iBitmap ©   (21.08.04 01:13)

TComponent.Name


 
iBitmap ©   (2004-08-21 12:59) [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;

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


 
iBitmap ©   (2004-08-21 13:38) [10]

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

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


 
Gero ©   (2004-08-21 19:55) [11]


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

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


 
iBitmap ©   (2004-08-21 21:26) [12]

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


 
iBitmap ©   (2004-08-21 22:53) [13]

Почти добрался до цели: Вот что получилось (Я просто 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 23:10) [14]

^^ Добавлено к ^^
 Я стер 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 23:17) [15]

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


 
iBitmap ©   (2004-08-22 15:34) [16]

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


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

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



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

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

Наверх




Память: 0.51 MB
Время: 0.05 c
3-1091686198
ligor
2004-08-05 10:09
2004.09.05
Компонент для доступа к Clarion 2.X


1-1092955213
RaPToR_1
2004-08-20 02:40
2004.09.05
обновления экрана


1-1092813867
race1
2004-08-18 11:24
2004.09.05
tmediaplayer


14-1092859865
Cobalt
2004-08-19 00:11
2004.09.05
Знатокам английского


3-1091035657
Ceval
2004-07-28 21:27
2004.09.05
проблема с удалением записей в dbf