Добро пожаловать,
Поиск
У нас ест форма, на ней Image1 и Timer1, и на диске в одной папке содержатся рисунки. Попытаемся поочередно показывать эти рисунки в image1,
Код unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Timer1: TTimer;
foto: TListBox;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1; i:word;
implementation
uses ShellAPI, ShlObj;// Нужны для работы с диалогом выбора
{$R *.dfm}
procedure FillBMPFileList(Folder: string; sl: TStrings);// процедура добавления файлов в список
var Rec : TSearchRec;
begin
sl.Clear;
if SysUtils.FindFirst(Folder + '*.bmp', faAnyFile, Rec) = 0 then
try
repeat
sl.Add(Folder+Rec.Name);
until SysUtils.FindNext(Rec) <> 0;
finally
SysUtils.FindClose(Rec);
end;
end;
function BrowseDialog(const Title: string; const Flag: integer): string;// вывод диалога выбора файлов
var
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
Result:='';
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
with BrowseInfo do begin
hwndOwner := form1.Handle;
pszDisplayName := @DisplayName;
lpszTitle := PChar(Title);
ulFlags := Flag;
end;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then begin
SHGetPathFromIDList(lpItemID, TempPath);
Result := IncludeTrailingBackslash(TempPath);
GlobalFreePtr(lpItemID);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);// запуск ункции вывода файлов
var fs : string;
begin
fs := BrowseDialog('Выберите папку с BMP файлами', BIF_RETURNONLYFSDIRS);
if fs = '' then Exit;
FillBMPFileList(fs, foto.Items);
timer1.Enabled:=true
end;
procedure TForm1.Timer1Timer(Sender: TObject);// вывод картинок на image
begin
if i= foto.Count-1 then exit;
image1.Picture.LoadFromFile(foto.Items.strings[i]);
inc(i);
end;
end
Все данные о регионе храняться в структуре RGNDATA. Упоминалась также и функция, позволяющая эту структуру получить: GetRegionData. У этой функции есть приятная особенность: если в третий параметр передать nil, то она вернёт размер памяти, необходимый для сохранения региона.
Код procedure SaveRegion (FileName: string);
var
s: TStream;
size: cardinal;
data: pointer;
begin
s := TFileStream.Create (FileName, fmCreate);
try
size := GetRegionData (fRgn, SizeOf (RGNDATA), nil);
data := GlobalAllocPtr(GPTR, size);
try
GetRegionData(fRgn, size, data);
s.Write(data^, size);
finally
GlobalFreePtr(data);
end;
finally
s.Free;
end;
end;
Аналогичным образом можно и прочитать записанный на диск регион:
Код function LoadRegion (FileName: string): hRGN;
var
data: PRgnData;
s: TStream;
begin
s := TFileStream.Create (FileName, fmOpenRead);
try
data := GlobalAllocPtr(GPTR, s.size);
try
s.Read(data^, s.Size);
Result := ExtCreateRegion(nil, s.Size, data^);
finally
GlobalFreePtr(data);
end;
finally
s.Free;
end;
end;
Вот на этом, пожалуй, можно закончить этот обзор, отнюдь не претендующий на исчерпываемость.
Хочется надеятся, что кого-то сей опус подвигнет на создание чего-нить хорошего, или просто сэкономит несколько часов ползанья по Win32 SDK.
Внимание! Если у вас не получилось найти нужную информацию, используйте
рубрикатор или воспользуйтесь
поиском .
книги по программированию исходники компоненты шаблоны сайтов C++ PHP Delphi скачать