KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Валентин Озеров, "Советы по Delphi. Версия 1.4.3 от 1.1.2001" бесплатно, без регистрации.
Перейти на страницу:

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'));

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*