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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.036 c
9-1084807193
Pirate
2004-05-17 19:19
2004.09.05
3D Движки


3-1092063370
raul
2004-08-09 18:56
2004.09.05
как лечить ошибку таблицы PARADOX header/index corrupt


14-1092804127
olookin
2004-08-18 08:42
2004.09.05
Может ли стандартный компьютер быть двухпроцессорным?


3-1092128046
Sir John
2004-08-10 12:54
2004.09.05
Как передать результат запроса клиенту?


1-1092912806
STARfish
2004-08-19 14:53
2004.09.05
Как обработать клик по ScrollBox, по его полосе прокрутки?





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