Форум: "Начинающим";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
ВнизПрозрачность формы Найти похожие ветки
← →
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:="Ïðèøëà";
end;
procedure TForm1.WMMouseLeave(var Message: TMessage);
begin
Caption:="Óøëà";
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c