Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];

Вниз

кнопка прямо на рабочем столе   Найти похожие ветки 

 
Doctor Deejay   (2002-07-02 00:19) [0]

Как добавить кнопку прямо на рабочий стол? И не только кнопку.
Если можно, то сразу с кодом :)


 
Mashinist   (2002-07-02 00:49) [1]

Есть такая беда.
Я тут давеча Уважаемых Мастеров достал с проблемой отсылания главной формы программы "на дно" http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1024255905&n=0
Надо создать форму, растянутую на весь экран, сделать ее прозрачной и отослать "на дно".
Сначала отсылаешь ее назад при onActivate, а потом при каждом onMouseMove. Или как вариант - кидаешь на форму таймер и по таймеру отсылаешь ее "на дно".
Код: сначала кинь на форму кнопку и таймер, а потом замени код на следующий:

unit unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
ExtCtrls, ComCtrls, Buttons;
type
TForm1 = class(TForm)
Timer1: TTimer;
Button1: TButton;

procedure Timer1Timer(Sender: TObject);
protected
procedure RebuildWindowRgn;
procedure Resize; override;
public
constructor Create(AOwner: TComponent); override;
end;
var Form1 : TForm1;
implementation
{$R *.DFM}

constructor TForm1.Create(AOwner: TComponent);
begin inherited;
HorzScrollBar.Visible:= False;
VertScrollBar.Visible:= False;
RebuildWindowRgn;
end;

procedure TForm1.Resize;
begin inherited;
RebuildWindowRgn;
end;
procedure TForm1.RebuildWindowRgn;
var FullRgn, Rgn: THandle; ClientX, ClientY, I: Integer;
begin
ClientX:= (Width - ClientWidth) div 2;
ClientY:= Height - ClientHeight - ClientX;
FullRgn:= CreateRectRgn(0, 0, Width, Height);
Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
for I:= 0 to ControlCount -1 do with Controls[I] do begin
Rgn:= CreateRectRgn(ClientX + Left, ClientY + Top, ClientX + Left +Width, ClientY + Top + Height);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
end;
SetWindowRgn(Handle, FullRgn, True);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
SetWindowPos(Form1.Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE OR SWP_NOSIZE);
end;

end.




 
Mashinist   (2002-07-02 00:51) [2]

P.S. Проверено в Delphi 6


 
Doctor Deejay   (2002-07-02 00:56) [3]

Но ведь это будет жрать ресурсы!


 
Mashinist   (2002-07-02 01:01) [4]

Если комп помощнее Р-75, то и не заметишь.
А так - отсылай форму на дно при событиях onActivate и onMouseMove.
Вот и вся любовь.


 
Doctor Deejay   (2002-07-02 09:41) [5]

А не проще ли просто взя Handle рабочего стола и туда посылать.
На каком принципе тогда основана работа чёртиков, кот бегают по всему экрану, падают с окон и т.п.?


 
Sniffer   (2002-07-02 09:49) [6]

Doctor Deejay ©
Тоже чёртиками балуешься?


 
Игорь Шевченко   (2002-07-02 10:05) [7]

Работа чертиков основана на другом принципе. Для интересующихся - любая поисковая система по ключевому слову ScreenMate


 
Doctor Deejay   (2002-07-02 10:16) [8]

А все-таки. Насчет кнопок, какой вариант наиболее подходящий


 
Игорь Шевченко   (2002-07-02 10:54) [9]

Doctor Deejay © (02.07.02 10:16)


> какой вариант наиболее подходящий


Не рисовать их на рабочем столе


 
Doctor Deejay   (2002-07-02 11:03) [10]

А если нужно их туда впихнуть ?


 
Игорь Шевченко   (2002-07-02 11:10) [11]

А если не секрет, что за задача такая, что потребовалось кнопки именно на рабочий стол пихать, а не на форму размером в кнопку ?


 
Doctor Deejay   (2002-07-02 12:01) [12]

А вот ради прикола захотелось :)


 
Игорь Шевченко   (2002-07-02 12:17) [13]

Doctor Deejay © (02.07.02 12:01)

>А вот ради прикола захотелось :)

Тогда и ответ, скорее всего, надо искать самостоятельно...Заодно и знаний наберетесь :-) Может, с другими поделитесь...



 
Doctor Deejay   (2002-07-02 12:38) [14]

Тогда подскажите мне как поймать handle рабочего стола?


 
Игорь Шевченко   (2002-07-02 12:47) [15]

he GetDesktopWindow function returns the handle of the Windows desktop window. The desktop window covers the entire screen. The desktop window is the area on top of which all icons and other windows are painted.

HWND GetDesktopWindow(VOID)


Parameters

This function has no parameters.

Return Values

The return value is the handle of the desktop window.


 
sdram   (2002-07-02 14:19) [16]

http://delphi.mastak.ru/cgi-bin/download.pl?get=1024183674&n=1


 
Doctor Deejay   (2002-07-02 14:52) [17]

sdram © (02.07.02 14:19)
http://delphi.mastak.ru/cgi-bin/download.pl?get=1024183674&n=1

Там нет исходных текстов. Это нужно реализовать именно програмно!!!


 
Alx2   (2002-07-02 15:00) [18]


procedure TForm1.Button1Click(Sender: TObject);
begin
With TButton.Create(Self) do
begin
Caption := "Test";
Left := Screen.Width div 2;
Top := Screen.Height div 2;
ParentWindow := GetDesktopWindow;
end;
end;

Токмо она нажиматься не будет :)


 
Alx2   (2002-07-02 15:05) [19]

А чтобы нажималась, попробуй на форму кинуть Panel1, на нее SpeedButton (именно типа TSpeedButton) и вот такой код засунь куда-нибудь:

Panel1.Parent := Nil;
Panel1.AutoSize := true;
Panel1.ParentWindow := GetDesktopWindow;


Теперь все нажимается :)



 
Mashinist   (2002-07-07 00:54) [20]

Уважаемый Игорь Швченко сказал ведь, что не надо их рисовать на рабочем столе ...


 
Alx2   (2002-07-08 07:53) [21]

>Mashinist © (07.07.02 00:54)
И как это я ослушался? :))



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

Форум: "Основная";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
1-58042
Dmk
2002-07-06 23:51
2002.07.18
Шрифт в EXE


1-58133
Vilux
2002-07-09 01:17
2002.07.18
TWebBrowser


6-58243
Crypter
2002-05-09 11:15
2002.07.18
Простой вопрос по сокетам


14-58271
Igor_
2002-06-19 18:06
2002.07.18
QReport и принтер


4-58374
n\a
2002-05-17 01:24
2002.07.18
FilePathFromHandle?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский