Рейтинговые книги
Читем онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 55 56 57 58 59 60 61 62 63 ... 123

type TForm1 = class(TForm)

 lb: TListBox;

 Memo1: TMemo;

 Button1: TButton;

 Button2: TButton;

 procedure FormCreate(Sender: TObject);

 procedure Button1Click(Sender: TObject);

 procedure Button2Click(Sender: TObject);

private

 procedure WMDropFiles(var M: TMessage); message WM_DROPFILES;

 { Private declarations }

public

 { Public declarations }

end;

var Form1: TForm1;

implementation

Var

 CountFiles: integer;

 SizeName  : integer;

 cch       : integer;

Var

 hDrop: integer;

 Point: TPoint;

 lpszFile: PChar;

{$R *.DFM}

procedure TForm1.WMDropFiles(var M: TMessage);

Var i: integer;

begin

 hDrop:= M.WParam;

 DragQueryPoint(hDrop, Point);

 CountFiles:= DragQueryFile(hDrop, $FFFFFFFF, nil, cch);

 for i:=0 to CountFiles-1 do begin

  SizeName:=  DragQueryFile(hDrop, i, nil, cch);

  GetMem(lpszFile, SizeName+1);

  DragQueryFile(hDrop, i, lpszFile, SizeName+1);

  lb.Items.Add(lpszFile);

  FreeMem(lpszFile, SizeName+1);

 end;

 DragFinish(hDrop);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 DragAcceptFiles(Handle,True);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 lb.Items.Clear;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

 ShellAbout(Handle, 'Anton Saburov', 'APSystems', 0);

end;

end.

Рабочий стол 

Как програмным путем задавать координаты ярлыкам на рабочем столе?

Рабочий стол перекрыт сверху компонентом ListView. Вам просто необходимо взять хэндл этого органа управления. Пример:

function GetDesktopListViewHandle: THandle;

var S: String;

begin

 Result := FindWindow('ProgMan', nil);

 Result := GetWindow(Result, GW_CHILD);

 Result := GetWindow(Result, GW_CHILD);

 SetLength(S, 40);

 GetClassName(Result, PChar(S), 39);

 if PChar(S) <> 'SysListView32' then Result := 0;

end;

После того, как Вы взяли тот хэндл, Вы можете использовать API этого ListView, определенный в модуле CommCtrl, для того, чтобы манипулировать рабочим столом. Смотрите тему «LVM_xxxx messages» в оперативной справке по Win32.

К примеру, следующая строка кода:

ListView_SetItemPosition(GetDesktopListViewHandle, i, x, y); {Не забудьте в uses добавить CommCtrl}

ярлыку с индексом i, задаст координаты (x,y). К примеру Мой компьютер имеет индекс 0, т.е i:=0;

С наилучшими пожеланиями, Сергей.

E-mail: [email protected]

Nomadic дополняет:

К примеру, следующая строка кода:

SendMessage(GetDesktopListViewHandle, LVM_ALIGN, LVA_ALIGNLEFT, 0);

разместит иконки рабочего стола по левой стороне рабочего стола Windows. 

Как я могу использовать анимированный курсор?

Из советов Nomadic'a:

Сперва Вы должны взять хэндл курсора Windows и присвоить его одному из элементов массива Cursors обьекта Screen.

Предопределенные курсоры имеют отрицательный индекс, а определенные пользователем (Вами) курсоры получают положительные индексы.

Ниже пример формы, использующей анимированный курсор:

procedure TForm1.Button1Click(Sender: TObject);

var h: THandle;

begin

 h:= LoadImage(0, 'C:TheWallMagic.ani', IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE  or LR_LOADFROMFILE);

 if h = 0 then ShowMessage('Cursor not loaded')

 else begin

  Screen.Cursors[1] := h;

  Form1.Cursor := 1;

 end;

end

Как узнать текущее разрешение экрана?

Из советов Nomadic'a :

Советуем ознакомиться с Help topic относительно глобального обьекта Screen типа TScreen. У этого обьекта есть свойства Width и Height.

{ Example }

begin

 iScreenWidth := Screen.Width;

end;

Заодно и другие свойства могут Вас заинтересовать, например, Fonts и Cursors.

Как изменить изображение кнопки `Пуск`

The_Sprite советует:

Пример из серии "Что можно сделать с рабочим столом". В общем, это обычный трюк с кнопкой "Пуск" (Start).

Совместимость: все версии Delphi

{ объявляем глобальные переменные }

var

 Form1: TForm1;

 StartButton: hWnd;

 OldBitmap: THandle;

 NewImage: TPicture;

{ добавляем следующий код в событие формы OnCreate }

procedure TForm1.FormCreate(Sender: TObject);

begin

 NewImage := TPicture.create;

 NewImage.LoadFromFile('C:WindowsCircles.BMP');

 StartButton := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil);

 OldBitmap := SendMessage(StartButton, BM_SetImage, 0, NewImage.Bitmap.Handle);

end;

{ Событие OnDestroy }

procedure TForm1.FormDestroy(Sender: TObject);

begin

 SendMessage(StartButton, BM_SetImage, 0, OldBitmap);

 NewImage.Free;

end;

Как программно заменить обои на рабочем столе? III

Igor Nikolaev aKa The Sprite советует:

program wallpapr;

uses Registry, WinProcs;

procedure SetWallpaper(sWallpaperBMPPath: String; bTile: boolean);

var reg : TRegIniFile;

begin

 // Изменяем ключи реестра

 // HKEY_CURRENT_USER

 //   Control PanelDesktop

 //     TileWallpaper (REG_SZ)

 //     Wallpaper (REG_SZ)

 reg := TRegIniFile.Create('Control PanelDesktop');

 with reg do begin

  WriteString('', 'Wallpaper', sWallpaperBMPPath);

  if (bTile) then begin

   WriteString('', 'TileWallpaper', '1');

  end else begin

   WriteString('', 'TileWallpaper', '0');

 end;

end;

reg.Free;

// Оповещаем всех о том, что мы изменили системные настройки

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Nil,

 {Эта строка – продолжение предыдущей} SPIF_SENDWININICHANGE);

end;

// пример установки WallPaper по центру рабочего стола

SetWallpaper('c:winntwinnt.bmp', False);

//Эту строчку надо написать где-то в программе. 

Как программно заменить обои на рабочем столе? IV

Владимир Рыбант пишет:

Советы «Как програмно заменить обои на рабочем столе» I, II, III не изменяют обои, если в Windows работает в режиме Active Desktop

Нужно использовать следующее: 

uses ComObj,  ShlObj;

procedure ChangeActiveWallpaper;

const CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';

var ActiveDesktop: IActiveDesktop;

begin

 ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;

 ActiveDesktop.SetWallpaper('c:windowsforest.bmp', 0);

 ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);

end;

Этим способом можно также изменять обои картинками jpg и gif. 

А как поместить свою иконку на taskbar, там где часы и переключатель клавиатуры?

Nomadic советует:

A: В библиотеке rxLib есть компонент TrxTrayIcon. Заметьте, что для корректного завершения работы операционной системе вам потребуется обрабатывать сообщение WM_QUERYENDSESSION. 

Как ограничить перемещение курсора мыши какой-либо областью экрана?

Одной строкой 

Nomadic отвечает:

A: ClipCursor(). Учтите, что использование этой функции – плохой тон. 

Диалоги 

Использование InputBox и InputQuery

Тема: Использование InputBox, InputQuery и ShowMessage

Данная функция демонстрирует 3 очень мощных и полезных процедуры, интегрированных в Delphi.

Диалоговые окна InputBox и InputQuery позволяют пользователю вводить данные.

Функция InputBox используется в том случае, когда не имеет значения что пользователь выбирает для закрытия диалогового окна – кнопку OK или кнопку Cancel (или нажатие клавиши Esc). Если вам необходимо знать какую кнопку нажал пользователь (OK или Cancel (или нажал клавишу Esc)), используйте функцию InputQuery.

ShowMessage – другой простой путь отображения сообщения для пользователя. 

procedure TForm1.Button1Click(Sender: TObject);

var

 s, s1: string;

 b: boolean;

begin

 s := Trim(InputBox('Новый пароль', 'Пароль', 'masterkey'));

1 ... 55 56 57 58 59 60 61 62 63 ... 123
На этой странице вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров бесплатно.

Оставить комментарий