Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 X := ListBox1.ItemIndex;

 Edit1.Text := ListBox1.Items[X];

 Edit1.Font.Style := [LookUpTable[ListBox1.ItemIndex+1].Data];

end;

Перетащи и брось (Drag and Drop) 

Как получить список файлов, которые были перенесены на мою форму, например, из Проводника?

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

Развлекался когда-то — вот, осталось:

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, Grids, StdCtrls;

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: ssa_sss@mail.ru

Nomadic дополняет:

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

SendMessage(GetDesktopListViewHandle, LVM_ALIGN, LVA_ALIGNLEFT, 0);

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

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

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

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

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

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

procedure TForm1.Button1Click(Sender: TObject);

Поделиться с друзьями: