Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.005 c