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

Вниз

Прозрачность формы   Найти похожие ветки 

 
OH   (2007-07-02 10:31) [0]

Такой вопрос - есть форма - полупрозрачная. Надо принаведении курсора мышки уменьшить прозрачность, а при "убирании - увеличить. Уменьшение прозрачности прописал в OnMouseMove, а увеличение где прописать?


 
homm ©   (2007-07-02 10:41) [1]

http://www.softhelp.ru/delphi/osferum/n.php?x=add_event_onmouseleave


 
DagOT-R ©   (2007-07-05 04:21) [2]

Используй свойство Mouse.CursorPos чтобы определить, над формой курсор или нет. Также, если тебе так важна эта затея, создай Таймер, поставь свойство Interval где-то в районе 50 (самое то), свойство Enabled=true;
Потом пропиши на OnTimer:
Procedure Timer1OnTimer(Sender: TObject);
begin
If (mouse.cursorpos.x>form1.left)and(mouse.cursorpos.x<form1.left+form1.width)
and(mouse.cursorpos.y>form1.top)and(mouse.cursorpos.y<form1.top+form1.height)and(form1.alphablendvalue=110)  then form1.alphablendvalue:=210 else form1.alphablendvalue:=110;
end;

> Здесь число 110-коэф. прозр. при "уходе" курсора за пределы
> окна, 210-при наведении. Ещё один плюс: условие ...and(form1.
> alphablendvalue=110) ... позволит сэкономить на оперативке(а
> то на слабых машинах окно может "нездорово мерцать").


 
iXT ©   (2007-07-05 09:47) [3]


> DagOT-R ©   (05.07.07 04:21) [2]
>
>

Сэр, не засоряйте автору мозги бредовыми идеями!


 
exactly   (2007-07-05 09:54) [4]

OnMouseEnter и OnMouseLeave


 
homm_ro   (2007-07-05 11:18) [5]

> [3] iXT ©   (05.07.07 09:47)
> Сэр, не засоряйте автору мозги бредовыми идеями!

+1


 
ПЛОВ ©   (2007-07-05 12:40) [6]


> DagOT-R ©   (05.07.07 04:21) [2]

Лучше через ADO :)


 
Inco   (2007-07-05 13:15) [7]


> DagOT-R ©   (05.07.07 04:21) [2]


Можно еще написать сервис, который будет загружаться при старте системы и отслеживать положение мышки.


 
Инс ©   (2007-07-05 13:34) [8]


> Можно еще написать сервис, который будет загружаться при
> старте системы и отслеживать положение мышки.


Ооо! Мсье понимает толк в извращениях!..


> OH   (02.07.07 10:31) [0]


Можно еще глянуть TrackMouseEvent + WM_MOUSEHOVER + WM_MOUSELEAVE в MSN


 
{RASkov} ©   (2007-07-05 14:07) [9]

Зря вы так...
> OnMouseEnter и OnMouseLeave

Они не всегда срабатывают. Т.е. криво работают.... правда я не знаю про [8] - может оно и то что надо, но в данном случае сделал бы так:
......
   procedure Timer1Timer(Sender: TObject);
   procedure SetAlphaVal(const Value: Integer);
 private
   FAlphaVal: Integer;
   property AlphaVal: Integer read FAlphaVal write SetAlphaVal;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SetAlphaVal(const Value: Integer);
var N: Integer;
begin
 if FAlphaVal = Value then Exit;
 if FAlphaVal>Value then
  for N := FAlphaVal downto Value do begin
   AlphaBlendValue:=N;
  end
 else
  for N := FAlphaVal to Value do begin
   AlphaBlendValue:=N;
  end;
 FAlphaVal := Value;
end;

procedure TForm1.Timer1Timer(Sender: TObject); //Interval=<250
begin
 if PtInRect(BoundsRect, Mouse.CursorPos) then AlphaVal:=255 else AlphaVal:=100;
end;

end.


 
Инс ©   (2007-07-05 14:20) [10]


> {RASkov} ©   (05.07.07 14:07) [9]


Вот зачем таймер фигачить, там где он не нужен? Из-за лени заглянуть в MSDN?


 
Инс ©   (2007-07-05 14:43) [11]

Для ленивых:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
   procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
 private
   { Private declarations }
   procedure WMMouseHover(var Message: TMessage); message WM_MOUSEHOVER;
   procedure WMMouseLeave(var Message: TMessage); message WM_MOUSELEAVE;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMMouseHover(var Message: TMessage);
begin
 Caption:="&#207;&#240;&#232;&#248;&#235;&#224;";
end;

procedure TForm1.WMMouseLeave(var Message: TMessage);
begin
 Caption:="&#211;&#248;&#235;&#224;";
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var
 tme: tagTRACKMOUSEEVENT;
begin
 tme.cbSize:=SizeOf(tagTRACKMOUSEEVENT);
 tme.dwFlags:=TME_LEAVE or TME_HOVER;
 tme.hwndTrack:=Handle;
 tme.dwHoverTime:=1;
 TrackMouseEvent(tme);
end;

end.


 
homm_ro   (2007-07-05 14:56) [12]

> tme.cbSize:=SizeOf(tagTRACKMOUSEEVENT);
> tme.dwFlags:=TME_LEAVE or TME_HOVER;
> tme.hwndTrack:=Handle;
> tme.dwHoverTime:=1;
> TrackMouseEvent(tme);

Здрасти, а что это в onMuseMove делает?


 
{RASkov} ©   (2007-07-05 15:23) [13]

> [10] Инс ©   (05.07.07 14:20)
> > {RASkov} ©   (05.07.07 14:07) [9]
>
> Вот зачем таймер фигачить, там где он не нужен? Из-за лени заглянуть в MSDN?

Ага :) Там еще и разобраться нужно в английских словах....

> [11] Инс ©   (05.07.07 14:43)

Действительно... эта "штука" работает.... и работает лучше чем VCL"вские аналоги Leave и Enter...

> [12] homm_ro   (05.07.07 14:56)
> Здрасти, а что это в onMuseMove делает?

Посылает те самые сообщения(WM_MOUSEHOVER и WM_MOUSELEAVE), походу.... Т.е. WM_MOUSEHOVER всегда, пока мышь "елозит" по форме, а WM_MOUSELEAVE - когда ее(форму) покидает... Что замечательно, так - WM_MOUSELEAVE - всегда приходит. Потестил тут 5 мин....Все вроде ОК пока...:)



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

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

Наверх




Память: 0.5 MB
Время: 0.028 c
15-1183099714
hgd
2007-06-29 10:48
2007.07.29
Алгоритм Magic wand


15-1183027152
Ega23
2007-06-28 14:39
2007.07.29
Class vs Record


1-1175271189
Углук
2007-03-30 20:13
2007.07.29
Как окрасить TChartSeries?


15-1182975866
c0deRR
2007-06-28 00:24
2007.07.29
Вот значит у меня с одним человеком есть на пару web проект


15-1182871267
oldman
2007-06-26 19:21
2007.07.29
Ну... поскольку недавно сбрил бороду и усы...