Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SetWallpaper - помогите вставить картинку !!! [D7, WinXP]


Страницы:   1 2

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]

Если изображение одно, то можно сохранить, а если будет идти поток картинок ! Без сохранения в файл, напрямую , как это сделать ???


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо