![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SetWallpaper - помогите вставить картинку !!! [D7, WinXP]
312Kbps © (2005-09-08 01:49:00)SetWallpaper('Имя файла',2) - так подставляется из файла картинка на рабочий стол. Подскажите, пожалуйста, как мне вставить картинку не из файла, а из объекта TImage ???
DesWind (2005-09-08 14:40:00) [1]Ну обшибся малек Btn.ParentWindow:=....;
312Kbps (2005-09-08 14:34:00) [2]Btn.parent:=GetDesktopWindow;
[Error] Unit1.pas(36): Incompatible types: 'TWinControl' and 'HWND'
DesWind (2005-09-08 14:09:00) [3]У меня получилось так
function GetDesktopWindow: HWND; external 'user32.dll';
......
Btn:=TButton.Create(Form1);
Btn.parent:=GetDesktopWindow;
............
312Kbps (2005-09-08 14:07:00) [4]Спасибо !
IceBeerg (2005-09-08 13:54:00) [5]Вот, откопал pas файл от компонента:
unit APIButton;
interface
uses
Windows, Messages, Forms;
type
TAPIButton = class;
TButtonEvent = procedure(Sender: TAPIButton) of object;
TAPIButton = class
protected
// varibles
FHandle:THandle;
FTop,FLeft,FWidth,FHeight:Integer;
FMouseClick:TButtonEvent;
OldWinProc,NewWinProc:Pointer;
FMouse:Boolean;
// for 'Caption' property
function GetCaption:string;
procedure SetCaption(const Value: string);
// for 'Left' property
procedure SetLeft(const Value: Integer);
// for 'Top' property
procedure SetTop(const Value: Integer);
// for 'Width' property
procedure SetWidth(const Value: Integer);
// for 'Height' property
procedure SetHeight(const Value: Integer);
// for 'Visible' property
function GetVisible:Boolean;
procedure SetVisible(const Value: Boolean);
// for 'Enabled' property
function GetEnabledB:Boolean;
procedure SetEnabledB(const Value: Boolean);
// for 'Parent' property
function GetParent:THandle;
procedure SetParent(const Value: THandle);
// for Windows Messages
procedure msgUser(var Msg:TMessage);
published
property Handle: THandle read FHandle default 0;
property Caption:string read GetCaption write SetCaption;
property Left:Integer read FLeft write SetLeft;
property Top:Integer read FTop write SetTop;
property Width:Integer read FWidth write SetWidth;
property Height:Integer read FHeight write SetHeight;
property Visible:Boolean read GetVisible write SetVisible;
property Enabled:Boolean read GetEnabledB write SetEnabledB;
property Parent:THandle read GetParent write SetParent;
property OnMouseClick:TButtonEvent read FMouseClick write FMouseClick;
procedure SetFocus;
procedure SetBounds(ALeft,ATop,AWidth,AHeight: Integer);
constructor Create(ParentControl: THandle);
destructor UnCreate;
end;
implementation
{ TAPIButton }
constructor TAPIButton.Create(ParentControl: THandle);
begin
FHandle:=CreateWindow('Button','APIButton',WS_VISIBLE or WS_CHILD,0,0,72,25,
ParentControl,0,hInstance,nil);
SendMessage(FHandle,WM_CREATE,0,0);
FMouse:=GetSystemMetrics(SM_SWAPBUTTON) = 1;
FLeft:=0;
FTop:=0;
FWidth:=72;
FHeight:=25;
NewWinProc:=MakeObjectInstance(msgUser);
OldWinProc:=Pointer(SetWindowLong(FHandle,GWL_WNDPROC,Cardinal(NewWinProc)));
end;
destructor TAPIButton.UnCreate;
begin
Visible:=False;
SendMessage(FHandle,WM_DESTROY,0,0);
end;
function TAPIButton.GetCaption: string;
var
Buf:string;
L:Integer;
begin
L:=GetWindowTextLength(FHandle) + 1;
SetLength(Buf,L);
GetWindowText(FHandle,PChar(Buf),L);
Result:=PChar(Buf);
end;
function TAPIButton.GetEnabledB: Boolean;
begin
Result:=IsWindowEnabled(FHandle);
end;
function TAPIButton.GetVisible: Boolean;
begin
Result:=IsWindowVisible(FHandle);
end;
procedure TAPIButton.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
FLeft:=ALeft;
FTop:=ATop;
FWidth:=AWidth;
FHeight:=AHeight;
SetWindowPos(FHandle, 0, ALeft, ATop, AWidth, AHeight,0)
end;
procedure TAPIButton.SetCaption(const Value: string);
begin
SetWindowText(FHandle,PChar(Value));
end;
procedure TAPIButton.SetEnabledB(const Value: Boolean);
begin
EnableWindow(FHandle,Value);
end;
procedure TAPIButton.SetFocus;
begin
Windows.SetFocus(FHandle);
end;
procedure TAPIButton.SetHeight(const Value: Integer);
begin
FHeight:=Value;
SetWindowPos(FHandle,0,FLeft,FTop,FWidth,Value,0);
end;
procedure TAPIButton.SetLeft(const Value: Integer);
begin
FLeft:=Value;
SetWindowPos(FHandle,0,Value,FTop,FWidth,FHeight,0);
end;
procedure TAPIButton.SetWidth(const Value: Integer);
begin
FWidth:=Value;
SetWindowPos(FHandle,0,FLeft,FTop,Value,FHeight,0);
end;
procedure TAPIButton.SetTop(const Value: Integer);
begin
FTop:=Value;
SetWindowPos(FHandle,0,FLeft,Value,FWidth,FHeight,0);
end;
procedure TAPIButton.SetVisible(const Value: Boolean);
begin
if Value then
ShowWindow(FHandle,SW_SHOW)
else
ShowWindow(FHandle,SW_HIDE);
end;
function TAPIButton.GetParent: THandle;
begin
Result:=Windows.GetParent(FHandle);
end;
procedure TAPIButton.SetParent(const Value: THandle);
begin
Windows.SetParent(FHandle, Value);
end;
procedure TAPIButton.msgUser(var Msg: TMessage);
procedure RaiseClick;
var
Pnt:TPoint;
begin
GetCursorPos(Pnt);
if Assigned(FMouseClick) and (WindowFromPoint(Pnt) = FHandle) then
FMouseClick(Self);
end;
begin
Msg.Result:=CallWindowProc(OldWinProc,FHandle,Msg.Msg,Msg.WParam,Msg.LParam);
if not FMouse and (Msg.Msg = Wm_LButtonUp) then
RaiseClick
else if FMouse and (Msg.Msg = Wm_RButtonUp) then
RaiseClick;
end;
end.
Попробуй сделать по аналогии...
312Kbps (2005-09-08 12:57:00) [6](23) Извени, но ты не мог бы мне пободдробней объяснить как это делается ? Спасибо !
IceBeerg (2005-09-08 10:16:00) [7]312Kbps (08.09.05 3:03) [14]
будет небольшой мониторинг на рабочем столе !
Так создавай TImage в RunTime и родителем делай рабочий стол и рисуй на этом TImage все, что хочеш...
К сожалению примера не могу дать, был где-то пример как создать кнопку на рабочем столе, но его долго искать...
Antonn (2005-09-08 04:43:00) [8]312Kbps (08.09.05 1:49)
SetWallpaper('Имя файла',2) - так подставляется из файла картинка на рабочий стол.
приведи содержимое SetWallpaper
Defunct (2005-09-08 03:19:00) [9]312Kbps (08.09.05 03:08) [19]
Бредовая задача.
Зачем принимать как константу какую-то чушь. Ты сам подумай. TImage - компонент для отбражения картинок (не для хранения, и тем более не для формирования). Накой из него еще что-то куда-то передавать?
DesWind (2005-09-08 03:10:00) [10]Что такое "рабочий стол"?
312Kbps (2005-09-08 03:08:00) [11]я ещё сам толком не знаю )))
Прмем как константу, что есть объект TImage из которого надо передать картинку на рабочий стол !
DesWind (2005-09-08 03:07:00) [12]312Kbps (08.09.05 03:03) [14]
Объясни толком, что нужно!
312Kbps (2005-09-08 03:06:00) [13](15) потому как туда будет передоваться изображение
Defunct (2005-09-08 03:05:00) [14]312Kbps (08.09.05 03:03) [14]
Гм.. тогда для чего нужен TImage?
DesWind (2005-09-08 03:05:00) [15]Defunct © (08.09.05 03:00) [12]
Есть такая штука - фильмы показывать как обои... Интересно смотриться...
312Kbps (2005-09-08 03:03:00) [16]будет небольшой мониторинг на рабочем столе !
DesWind (2005-09-08 03:01:00) [17]а если будет идти поток картинок
Тогда нада копать IActiveDesktop, вроде...
Defunct (2005-09-08 03:00:00) [18]312Kbps (08.09.05 02:51) [10]
Если будет поток, тогда и сохраняй поток.
Ты что там фильмы собираешься на рабочем столе крутить?
> Без сохранения в файл, напрямую , как это сделать
может ты имеешь в виду под "рабочим столом" экран?
312Kbps (2005-09-08 02:53:00) [19]Или как по другому заменить картинку на рабочем столе из TImage ?
312Kbps (2005-09-08 02:51:00) [20]Если изображение одно, то можно сохранить, а если будет идти поток картинок ! Без сохранения в файл, напрямую , как это сделать ???