Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690

Сделать окно прозрачным когда курсор находится в его области

02.03.2012, 15:51. Показов 2703. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как то можно выполнить?). В интернете было пару примеров на выявление того, мышь над формой или нет, но они как оказалось, не работают

Добавлено через 1 минуту
Ой ой ой, ребят, наоборот. Я в теме перепутал все - нужно чтобы окно было прозрачно когда в его области курсора нету, а когда курсор в области - чтоб окно было непрозрачным
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.03.2012, 15:51
Ответы с готовыми решениями:

Отслеживать с помощью события TrackMouseEvent, когда курсор находится над окном и когда его покидает
Здравствуйте. Пишу приложение по работе с мышью и клавиатурой. Требуется чтобы приложение отслеживало события когда курсор находится на...

Определить, находится ли курсор внутри определенной области
Товарищи, подскажите, пожалуйста, как выполнить следующее условие: Если курсор мыши находится внутри, например квадрата: Rectangle(hdc,...

Убрать (сделать прозрачным) или заменить курсор в SMFL
Есть ли в SFML возможность убрать, сделать прозрачным или заменить стандартный курсор?

10
Житель Земли
 Аватар для DenNik
3004 / 3025 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
02.03.2012, 16:38
вот примерно так (на Вин98 не сработает )
установи у формы свойство AlphaBlendValue = 40 (еле видно будет)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  TForm1 = class(TForm)
  private
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
procedure TForm1.CMMouseEnter(var Msg: TMessage);
begin
  inherited;
  AlphaBlend:= false;
end;
 
procedure TForm1.CMMouseLeave(var Msg: TMessage);
begin
  inherited;
  AlphaBlend:= true;
end;
 
end.
вот только если мышку быстро убрать с поверхности формы, иногда не срабатывает
1
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
03.03.2012, 08:33  [ТС]
Цитата Сообщение от DenNik Посмотреть сообщение
вот примерно так (на Вин98 не сработает )
установи у формы свойство AlphaBlendValue = 40 (еле видно будет)

....

вот только если мышку быстро убрать с поверхности формы, иногда не срабатывает
В общем то у меня задумка была такова, что если мышь в области окна, то окно плавно появляется, типо

Delphi
1
2
3
4
5
For i:=1 to 200 do
  begin
    form1.AlphaBlendValue:=i;
    sleep(1);
  end;
Если пользоваться твоим примером, то что то не получается . Во первых при включении окно непрозрачное(курсора над ним нет). Далее когда курсор в первый раз попадает на область окна, то как будто срабатывают сразу две процедуры - сначало на миг окно становиться не видимым, а потом начинает проявлятся (типо по коду выше ) . После того как окно проявиться, если курсор с окна убрать, то окно исчезает, но при повторном наведении окно так и не появляется . Подскажи как можно переписать код, чтобы моя задумка работала
0
Житель Земли
 Аватар для DenNik
3004 / 3025 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
03.03.2012, 10:26
при разработке приложения установи свойства формы
AlphaBlend = true
AlphaBlendValue = 40

затем переделай процедуры

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
  private
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.CMMouseEnter(var Msg: TMessage);
var
  i: byte;
begin
  inherited;
  for i:= 40 to 255 do
    AlphaBlendValue:= i;
end;
 
procedure TForm1.CMMouseLeave(var Msg: TMessage);
var
  i: byte;
begin
  inherited;
  for i:= 255 downto 40 do
    AlphaBlendValue:= i;
end;
 
end.
1
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
03.03.2012, 11:16  [ТС]
Спасибо . А можно такое же сделать только для картинки(картинка на форме)
0
Житель Земли
 Аватар для DenNik
3004 / 3025 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
03.03.2012, 11:35
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
Спасибо . А можно такое же сделать только для картинки(картинка на форме)
стандартными средствами, думаю, нет.
0
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
04.03.2012, 04:26  [ТС]
Цитата Сообщение от DenNik Посмотреть сообщение
стандартными средствами, думаю, нет.
Жаль..
Слушай, а узнать, находится ли курсор в какой либо части экрана (не формы, а просто области экрана) можно?
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
04.03.2012, 04:28
Delphi
1
2
3
4
5
var
  p: TPoint;
begin
  GetCursorPos(p);
end;
1
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
05.03.2012, 11:09  [ТС]
Вообщем, недавно у меня была задача сделать окно непрозрачным, когда в его области курсор (через alphablendvalue) и прозрачным, когда курсора в области нет. Мне дали такой код (спасибо DenNik) :

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
  private
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.CMMouseEnter(var Msg: TMessage);
var
  i: byte;
begin
  inherited;
  for i:= 40 to 255 do
    AlphaBlendValue:= i;
end;
 
procedure TForm1.CMMouseLeave(var Msg: TMessage);
var
  i: byte;
begin
  inherited;
  for i:= 255 downto 40 do
    AlphaBlendValue:= i;
end;
 
end.
Но, как оказалось в таком коде есть большой косяк- если на форме есть любые элементы (кнопки, лэйблы, едиты и т.п.) то окно постоянно мерцало, если водить курсором по этим элементам (т.е. срабатывали процедуры). Я немного изменил эти процедуры, и теперь при передвижении по элементам формы, последняя не мерцает. Вот код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    RadioButton1: TRadioButton;
  private
     procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  i:byte;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
procedure TForm1.CMMouseEnter(var Msg: TMessage);
begin
  inherited;
    if form1.AlphaBlendValue=1 then
    for i:=1 to 255 do
      form1.AlphaBlendValue:=i;
end;
 
procedure TForm1.CMMouseLeave(var Msg: TMessage);
var pos:Tpoint;
begin
  inherited;
  getcursorpos(pos);
   if (pos.X<=form1.Left) or (pos.X>=form1.Left+form1.Width) or (pos.y<=form1.top) or (pos.y>=form1.top+form1.height) then
    for i:=255 downto 1 do
      form1.AlphaBlendValue:=i;
end;
 
end.
p.s. изначальное значение AlphaBlendValue у формы должно быть равно 1

Добавлено через 28 минут
Выложил сюда потому что вдруг кому надо будет
0
05.03.2012, 11:15
 Комментарий модератора 
Чтобы не засорять раздел, я просто объединил эти темы. К тому же, так будет логичнее
1
05.03.2012, 11:18  [ТС]

Не по теме:


Цитата Сообщение от deathNC Посмотреть сообщение
Чтобы не засорять раздел, я просто объединил эти темы. К тому же, так будет логичнее :)
Ок ;)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2012, 11:18
Помогаю со студенческими работами здесь

Вывод static текста, когда курсор находится НАД контролом. как?
нужно научиться получать сообщения когда курсор находится над каком нибудь из контролов. пример во вложении. мышка над едитбоксом,...

Рамки полей платежной формы отображаются только, когда курсор находится в поле
Здравствуйте! У меня возникла проблема. Я подключил на своем сайте прием Яндекс.Денег и разместил на одной из веб-страниц платежную форму...

Как сделать окно прозрачным по краям?
Здравствуйте, специалисты по Windows Forms. Подскажите - возможно ли сделать окно - которое было бы прозрачно по краям ? То есть...

Можно ли окно, созданное OpenWindow, сделать прозрачным?
Вопрос в теме.

Как сделать чтобы окно было прозрачным
Извините за нубский вопрос


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru