Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2007, 12:19   #1
strannik
python developer
Пользователь Подтвердите свой е-майл
 
Аватар для strannik
 
Регистрация: 30.11.2006
Сообщений: 81
Вопрос возобновить появление формы

Товарищи программисты подскажите как реализовать такую задачу - имеется форма - при старте приложения форма появляется - ее нельзя двигать и она имеет определенную позицию на экране - далее если курсор мышки вышел за пределы формы - форма скрывается - теперь сам вопрос - как сделать так чтобы при попадании курсора мышки на ту площадь занимаемую еще видимой формой форма появлялась? Приветствуются любые ответы.
Заранее спасибо.
Границы расширяет тот, кто выходит за них.
strannik вне форума Ответить с цитированием
Старый 14.09.2007, 13:24   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
при старте приложения форма появляется - ее нельзя двигать и она имеет определенную позицию на экране
убери заголовок (BorderStyle:=bsNone) и задай координаты в OnCreate
Цитата:
далее если курсор мышки вышел за пределы формы - форма скрывается
нужно получать сообщение от винды о перемещении мыши и если курсор не на форме, скрыть ее - Form.Hide
Цитата:
как сделать так чтобы при попадании курсора мышки на ту площадь занимаемую еще видимой формой форма появлялась?
точно так же, продолжать проверять координаты мыши, если курсор попал в определенную область, показать окно - Form.Show
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 17.09.2007, 11:44   #3
strannik
python developer
Пользователь Подтвердите свой е-майл
 
Аватар для strannik
 
Регистрация: 30.11.2006
Сообщений: 81
Сообщение

Код:
var
  Form1: TForm1;
  foo:TPoint;
  n:integer =0;
implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
 n:=0;
 AnimateWindow(Handle, 300, AW_SLIDE or AW_HOR_POSITIVE or AW_ACTIVATE);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if (n=0) then
  begin
  if GetCapture = 0 then
    SetCapture(Form1.Handle);
  if not PtInRect(Rect(Form1.Left, Form1.Top, Form1.Left + Form1.Width,
    Form1.Top + Form1.Height), ClientToScreen(Point(x, y))) then
    begin
     AnimateWindow(Handle, 300, AW_HOR_NEGATIVE or AW_SLIDE or AW_HIDE);
     n:=1;
    end;
   end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (n=1) then
  begin
   getcursorpos(foo);
    if (foo.x<=form1.Width) and (foo.y<=form1.Height) then
     begin
     form1.Show;
     application.ProcessMessages;
     showmessage('Hello!');
     end;
  end;
end;
Делаю таким образом - но форма не хочет появлятся повторно. Поскажите где может быть ошибка. Интересно то, что showmessage('Hello!') - показывается. Может можно каким нибудь другим способом реализовать повторное появление формы?
Границы расширяет тот, кто выходит за них.
strannik вне форума Ответить с цитированием
Старый 17.09.2007, 12:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Strannik, А може тебе подойдет вот такой способ?:

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

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
AlphaBlend:=true;
AlphaBlendValue:=250;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var tp:TPoint;
begin
tp:=ScreenToClient(Mouse.CursorPos) ;
if (tp.X<0)or(tp.X>Width)or(tp.Y<-15)or(tp.Y>Height) then begin
AlphaBlendValue:=0;
end else
AlphaBlendValue:=250

end;

end.


Я угадал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.09.2007, 05:51   #5
strannik
python developer
Пользователь Подтвердите свой е-майл
 
Аватар для strannik
 
Регистрация: 30.11.2006
Сообщений: 81
Радость

Stilet ты угадал. Спасибо огромное! С помощью твоего кода переделал свой - вот что получилось:
...
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var tp:TPoint;
begin
 tp:=ScreenToClient(Mouse.CursorPos);
  if (tp.X<-5)or(tp.X>width)or(tp.Y<-25)or(tp.Y>Height) then
   AnimateWindow(Handle, 300, AW_HOR_NEGATIVE or AW_SLIDE or AW_HIDE)
  else
   AnimateWindow(Handle, 300, AW_SLIDE or AW_HOR_POSITIVE or AW_ACTIVATE);
end;


procedure TForm1.FormShow(Sender: TObject);
begin
 AnimateWindow(Handle, 300, AW_SLIDE or AW_HOR_POSITIVE or AW_ACTIVATE);
end;
...
Всё прекрасно - только используя копонент AlphaSkins при повторном и последующих появлениях формы - клиенская область её отображается черной.
Границы расширяет тот, кто выходит за них.
strannik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное появление формы HAMMAN Общие вопросы Delphi 3 15.05.2008 14:20
Появление процесса student_63 Win Api 16 23.04.2008 19:40
Появление формы. Kukkk Общие вопросы Delphi 17 13.09.2007 20:23
Появление подсказки Римма Общие вопросы Delphi 6 20.08.2007 12:22