Delphi・メソッド

【ファイル関連メソッド】
■FileExists
ファイル存在チェック
if FileExists(edtPath.Text) then //ファイルが存在すればTrue

■CopyFile
ファイルのコピー
CopyFile(PChar(sFromName), PChar(sToName), bExist)
 sFromName コピー元ファイル
 sToName コピー先ファイル
 bExist コピー先にファイル存在時の処理
 (true:異常終了しコピーしない、false:正常終了し上書きコピー

■DeleteFile
ファイルの削除
DeleteFile(const FileName: string)

■ChangeFileExt
ファイルの拡張子変更
単純に拡張子を変更するだけならこれが便利。
例)
sFilename := ‘abc.txt’;
sChgExt := ‘csv’;
sWk := ChangeFileExt(sFilename, sChgExt); →sWkの中身 ‘abc.csv’

■ExtractFileDir
FileName のドライブ部分とディレクトリ部分を返却
例)
sFile := ‘C:\dir\test.txt’;
sWk := ExtractFileDir(sFile); //sWk : ‘C:\dir\’

■ExtractFileDrive
ファイル名からドライブ部分を返却
例)
sFile := ‘C:\dir\test.txt’;
sWk := ExtractFileDrive(sFile); //sWk : ‘C:\’

■ExtractFilePath
ファイル名のパス部分を返却
例)
sFile := ‘C:\dir\test.txt’;
sWk := ExtractFilePath(sFile); //sWk : ‘C:\dir\’

■ExtractFileName
ファイル名の名前部分と拡張子部分を返却
(=フルパスのファイル名の、ファイル名部分だけを返す)
例)
sFile := ‘C:\dir\test.txt’;
sWk := ExtractFileName(sFile); //sWk : ‘test.txt’

■ExtractFileExt
ファイル名の拡張子部分を返します。
例)
sFile := ‘C:\dir\test.txt’;
sWk := ExtractFileExt(sFile); //sWk : ‘.stxt’

【フォルダ関連メソッド】
■DirectoryExists(Name: string): Boolean;
フォルダ存在チェック
存在すればtrue

■MkDir(S: string);
フォルダ作成
//フォルダが存在しなければ作成
if not DirectoryExists(sTmpDirName) then
MkDir(sTmpDirName);

■RmDir(S: string);
フォルダ削除
RmDir(sTmpDirName); //フォルダを削除
※必ず存在チェック(DirectoryExists)後に行う。

【Tips】
■ファイル名から拡張子を削除して間に文字列を入れ、別の拡張子に変換する
filename := ExtractFileName(copyFile);
filenameNoext := Copy(filename, 0, (Pos(‘.’, filename) – 1)); //拡張子除去
bkupFile := bkupDir + filenameNoext + ‘_’ + sDay + ‘.txt’;

■拡張子を除去
filenameNoext := Copy(FileNM, 0, (Pos(‘.’, filename) – 1)); //拡張子除去

■ファイル一括削除
procedure deleteXls;
var
srcRc: TSearchRec;
i: integer;
bFlg: boolean;
begin
//エクセルファイル存在チェック
if FindFirst(‘C:\dir\*.XLS’, faAnyFile, srcRc) = 0 then
begin
repeat
DeleteFile(‘C:\dir\’ + srcRc.Name);
i := FindNext(srcRc); //次を検索
until not i = 0
end;
end;

ファイルコピー

Delphiにファイルをコピーする関数はないので、Windows APIのCopyFile関数を使用。

書式:CopyFile(コピー元ファイル名,コピー先ファイル名,フラグ)

フラグ
 Ture: コピー先に同名ファイルがある場合は、処理を中止しFalseを返します。
 False: コピー先に同名ファイルがある場合は、上書きします。

*CopyFile関数はAPI関数の為、ファイル名をString型で与える時は、PChar型にキャストする。

サンプル

uses SysUtils, MMSystem ,WINDOWS;
var
F1,F2:string;
tm:int64;
begin
tm:=timeGettime;
WriteLn(‘◆CopyFileを使用’);
F1:=’input.txt’;
F2:=’output.txt’;
CopyFile(PChar(F1),PChar(F2),false);
WriteLn(‘処理時間:’,inttostr(timeGettime-tm),’ms’);
end.

delphi エラー処理

procedure TForm1.Button1Click(Sender: TObject);
var
LValueA : Integer;
LValueB : Integer;
LExceptRec : PExceptionRecord;
LErrCode : Integer;
begin
Memo1.Lines.Clear;
LValueA := 0;
try
LValueB := 123 div LValueA;
except
on E: Exception do begin
//PExceptionRecordを取得してエラー番号を取得
LExceptRec := EExternal(E).ExceptionRecord;
LErrCode := LExceptRec.ExceptionCode;
//エラーメッセージとエラー番号を表示 Memo1.Lines.Add(E.Message); Memo1.Lines.Add(E.ClassName); Memo1.Lines.Add('$' + IntToHex(LErrCode, 8)); end;
end;
end;

参考URL:http://mrxray.on.coocan.jp/Delphi/Others/RunError.htm

画像回転

type
TRGBArray = array[0 .. 0] of TRGBTriple;
PRGBArray = ^TRGBArray;

// 左回転サンプル
procedure TForm1.Button1Click(Sender: TObject);
var
Src, Dest: TBitmap;
Row, Col: Integer;
SrcRow, DestRow: PRGBArray;
Offset: Integer;
begin
Src := TBitmap.Create;
Dest := TBitmap.Create;

try
// Image1からSrcにハンドルを移す
Src.Handle := Image1.PIcture.Bitmap.ReleaseHandle;
// PixelFormatを24bitに設定
Src.PixelFormat := pf24bit;
Dest.PixelFormat := pf24bit;
// Destへ領域をコピー(幅と高さをクロス)
Dest.Height := Src.Width;
Dest.Width := Src.Height;

try
// Src水平方向のループ
for Row := 0 to Src.Height -1 do
begin
SrcRow := Src.ScanLine[Row];
// Src垂直方向のループ
for Col := 0 to Src.Width -1 do
begin
// Destを下からセットするためのオフセット
Offset := (Dest.Height -1) – Col;
// Destの配列をクロスさせる
DestRow := Dest.ScanLine[Offset];
// 配列をセットする
DestRow[Row].rgbtRed := SrcRow[Col].rgbtRed;
DestRow[Row].rgbtGreen := SrcRow[Col].rgbtGreen;
DestRow[Row].rgbtBlue := SrcRow[Col].rgbtBlue;
end;
end;
// 成功した場合、Destのハンドルを返す
Image1.Picture.Bitmap.Handle := Dest.ReleaseHandle;
except
// 失敗した場合、Srcのハンドルを返す
Image1.Picture.Bitmap.Handle := Src.ReleaseHandle;
end;
finally
Src.Free;
Dest.Free;
end;
end;

// 右回転サンプル
procedure TForm1.Button2Click(Sender: TObject);
var
Src, Dest: TBitmap;
Row, Col: Integer;
SrcRow, DestRow: PRGBArray;
Offset: Integer;
begin
Src := TBitmap.Create;
Dest := TBitmap.Create;
try
// Image1からSrcにハンドルを移す
Src.Handle := Image1.PIcture.Bitmap.ReleaseHandle;
// PixelFormatを24bitに設定
Src.PixelFormat := pf24bit;
Dest.PixelFormat := pf24bit;
// Destへ領域をコピー(幅と高さをクロス)
Dest.Height := Src.Width;
Dest.Width := Src.Height;
try
// Src水平方向のループ
for Row := 0 to Src.Height -1 do
begin
SrcRow := Src.ScanLine[Row];
// Destを右からセットするためのオフセット
Offset := (Dest.Width -1) – Row;
// Src垂直方向のループ
for Col := 0 to Src.Width -1 do
begin
// Destの配列をクロスさせる
DestRow := Dest.ScanLine[Col];
// 配列をセットする
DestRow[Offset].rgbtRed := SrcRow[Col].rgbtRed;
DestRow[Offset].rgbtGreen := SrcRow[Col].rgbtGreen;
DestRow[Offset].rgbtBlue := SrcRow[Col].rgbtBlue;
end;
end;
// 成功した場合、Destのハンドルを返す
Image1.Picture.Bitmap.Handle := Dest.ReleaseHandle;
except
// 失敗した場合、Srcのハンドルを返す
Image1.Picture.Bitmap.Handle := Src.ReleaseHandle;
end;
finally
Src.Free;
Dest.Free;
end;
end;

画像種別変更

use節にJpegを追加

uses Jpeg;

//BmpからJpeg
procedure TForm1.Button1Click(Sender: TObject);
Var
 Jpg : TJpegImage;
 Bmp : TBitMap ;
begin
 Jpg :=TJpegImage.Create;
 Bmp :=TBitmap.Create;

 Bmp.LoadFromFile(‘C:\From.bmp’);
 Jpg.Assign(BMP);
 Jpg.SaveToFile(‘C:\To.jpg’ );

 Bmp.Free ;
 Jpg.Free;
end;

//JpegからBmp
procedure TForm1.Button1Click(Sender: TObject);
var
 Jpg : TJpegImage; 
 Bmp : TBitmap;
begin
 Jpg :=TJpegImage.Create ;
 Bmp :=TBitmap.Create;

Jpg.LoadFromFile(‘From.jpg’);
 Bmp.Assign(JPG);
 Bmp.SaveToFile(‘To.bmp’)

Jpg.Free;
 Bmp.Free ;
end;

 

fastreport-pdf出力

dm.f_PDF.Title := ‘回収予定一覧’;//ファイル名
dm.f_PDF.Subject := ‘回収予定一覧詳細’;//サブタイトル
dm.f_PDF.Producer := ‘株式会社XXXXXXX’;//作成者
dm.f_PDF.FileName := ‘回収予定一覧.pdf’;//ファイル名
dm.f_PDF.Author := k_staff_name;//製作者
dm.f_PDF.Creator := pg_name;//アプリケーション名
dm.f_PDF.OwnerPassword:= ‘123’;//管理者パスワード
dm.f_PDF.UserPassword := ‘123’;//閲覧者パスワード

構造体

private
{ Private 宣言 }
Type
TPersonData = record
fID :Integer;
fName :String;
end;

procedure Tf_basic_l.lbl_titleClick(Sender: TObject);
var
i : Integer;
// arrPsnData :array of TPersonData; //動的配列として
arrPsnData :array[0..9] of TPersonData; //動的配列として
begin
arrPsnData[0].fID := 100;
arrPsnData[0].fName := ‘test’;
arrPsnData[1].fID := 101;
arrPsnData[1].fName := ‘test2’;

i := 0;
while i <= 2 do begin
ShowMessage(arrPsnData[i].fName);
Inc(i);
end;

end;