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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2012, 11:01   #1
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию запуск программы, окно было возле трея

Доброго времени суток! Подскажи, как с помощью этой фкнкции:
Цитата:
Код:
var
  HTaskbar, HTrayWnd: HWND;
begin
  HTaskbar := FindWindow('Shell_TrayWnd', nil);
  if HTaskbar <> 0 then
  begin
    HTrayWnd := FindWindowEx(HTaskbar, 0, 'TrayNotifyWnd', nil);
    if HTrayWnd <> 0 then
SetWindowPos(GetActiveWindow,?,?,?,?,?);
реализовать, чтоб при запуске программы окно было возле трея, как трейконтрол AIMP3 при первом запуске, .... или как правильно реализовать?
beegl вне форума Ответить с цитированием
Старый 14.08.2012, 11:10   #2
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию

Типа в углу экрана или в самом трее?
DelhiProgramer вне форума Ответить с цитированием
Старый 14.08.2012, 11:13   #3
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

в углу экрана:
beegl вне форума Ответить с цитированием
Старый 14.08.2012, 11:17   #4
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию

Код:
var
 HTaskbar, HTrayWnd: HWND;
 pzrect: TRect;
 hh: integer;
begin
hh:=FindWindow('Shell_TrayWnd',''); //ищем панель задач чтобы получить ширину
GetWindowRect(hh,pzrect);
  HTaskbar := FindWindow('Shell_TrayWnd', nil);  //Это твой код
  if HTaskbar <> 0 then
  begin
    HTrayWnd := FindWindowEx(HTaskbar, 0, 'TrayNotifyWnd', nil);
    if HTrayWnd <> 0 then
SetWindowPos(GetActiveWindow,HWND_BOTTOM,Screen.Width-200,Screen.Height-200-(pzrect.Bottom-pzrect.Top),200,200,SWP_SHOWWINDOW);//Здесь за размеры формы взял 200х200, отнял 200 от ширины экрана, и 200 + ширина панели задач от высоты экрана
end;
end;

Последний раз редактировалось Stilet; 14.08.2012 в 11:26.
DelhiProgramer вне форума Ответить с цитированием
Старый 14.08.2012, 11:18   #5
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Можно так

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
AppBarData : TAppBarData;
R : TRect;
begin
AppBarData.hWnd := FindWindow('Shell_TrayWnd', nil);
AppBarData.cbSize := SizeOf(AppBarData);
GetWindowRect(AppBarData.hWnd, R);
Form1.Left := Screen.Width-Form1.Width;
Form1.Top := R.Top-Form1.Height;
end;
dolphin705 вне форума Ответить с цитированием
Старый 14.08.2012, 11:29   #6
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

dolphin705, DelhiProgramer спасибо, вот что получилось)
Вложения
Тип файла: rar YaNa.rar (440.8 Кб, 17 просмотров)
beegl вне форума Ответить с цитированием
Старый 14.08.2012, 12:00   #7
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

а как такое реализовать?

вот пример, ....... а как укротить код, или есть такой компонент?
Вложения
Тип файла: rar Desk source.rar (159.7 Кб, 12 просмотров)
beegl вне форума Ответить с цитированием
Старый 14.08.2012, 12:15   #8
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию

Написал криво и не помню как определить что мышка вне окна
var
Form1: TForm1;
b: boolean;
l: TPoint;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
b:=true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if b=true then timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if form1.Left<=screen.Width-form1.Width then exit;
form1.Left:=form1.Left-10;
if form1.Left=screen.Width-form1.Width then begin timer1.Enabled:=false; b:=false; end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
getcursorpos(l);
if {определить что мышка не на форме} then begin timer1.Enabled:=false; b:=true; end;
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
if (b=true) and (form1.Left<screen.width-80) then form1.Left:=form1.Left+10;
end;
DelhiProgramer вне форума Ответить с цитированием
Старый 14.08.2012, 12:44   #9
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от DelhiProgramer Посмотреть сообщение
Код:
Написал криво и не помню как определить что мышка вне окна
var
  Form1: TForm1;
  b: boolean;
  l: TPoint;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
b:=true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if b=true then timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if form1.Left<=screen.Width-form1.Width then exit;
form1.Left:=form1.Left-10;
if form1.Left=screen.Width-form1.Width then begin timer1.Enabled:=false; b:=false; end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
getcursorpos(l);
if {определить что мышка не на форме} then begin timer1.Enabled:=false; b:=true; end;
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
if (b=true) and (form1.Left<screen.width-80) then form1.Left:=form1.Left+10;
end;
хороший пример, есть ещё варианты?
beegl вне форума Ответить с цитированием
Старый 14.08.2012, 12:50   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

а ваши варианты где? Вы только чужой код берете.
Далее с библой BilleniumEffects все получится.
Человек_Борща вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как расположить дочернее окно поверх родительского, но так, чтобы можно было работать с родительским окном? ivan.tiran Общие вопросы Delphi 2 17.05.2012 23:46
редактируемое окно что бы можно было менять текст Николай_Kolumb Помощь студентам 5 25.04.2012 18:00
Чтоыб окно другой программы было поверх остальных kakawkin Общие вопросы Delphi 2 08.10.2009 19:45
Как сделать так чтобы окно формы всегда было поверх остальных окон? HelloZAPOR Общие вопросы Delphi 5 23.07.2007 08:05
Эти программы полезно было бы написать Asain-Asa Софт 3 05.12.2006 22:21