Haruyuki Mohri Blog(Delphi)

毛利春幸のブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Delphi VCL.NET で SHBrowseForFolderを使ってみる

Delphi VCLに付いてるFileCtrl.SelectDirectoryでも良いが
見た目ちょっとって感じなんで
SHBrowseForFolder を使ってみる

usesにShlObj, System.Runtime.InteropServices;を追加する


procedure T***.FormCreate(Sender: TObject);
begin
Label1.Caption := Self.SelectDirectory('フォルダを選択してください');
end;

function T***.SelectDirectory(const stTitle: String): String;
var
hres: HResult;
ip0,
ip1: IntPtr;
bi: TBrowseInfo;
lpBuffer : IntPtr;
rs: String;
begin
hres := SHGetSpecialFolderLocation(Application.Handle, CSIDL_DESKTOP, ip0);
if FAILED(hres) Then Begin
Exit;
end;
SetLength(rs, MAX_PATH);
bi.hwndOwner := Handle;
bi.pidlRoot := ip0;
bi.lpszTitle := stTitle;
bi.ulFlags := 0;
bi.lpfn := Nil;
bi.lParam := 0;
ip1 := SHBrowseForFolder(bi);
if not (ip1 = nil) then
begin
lpBuffer := Marshal.StringToHGlobalAnsi(rs);
if SHGetPathFromIDList(ip1,lpBuffer) then
begin
if not(lpBuffer = nil) then
Result := Marshal.PtrToStringUni(lpBuffer);
end;
end;
end;


スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2006/04/20(木) 13:17:02|
  2. Delphi.NET

Delphi.NET でShift_JIS文字をファイルに書き出す

普通にTStringList.SaveToFileとかでも良いが

procedure T****.Save(const stFileName, stContents: String);
var
sw: StreamWriter;
begin
sw := StreamWriter.Create(stFileName, False, Encoding.GetEncoding(932));
try
sw.Write(stContents);
sw.Close();
finally
sw.Free;
end;
end;

上記のようなprocedureを作成してもいいかも

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2006/04/08(土) 13:15:13|
  2. Delphi.NET

Delphi.NETでTIdHTTPを使わない方法

Delphi.NETでTIdHTTP使わないでHTTPにGETしにいく方法
function TGetHttpContents.GetHttp(const stUrl: String): String;
var
WebClient0 : System.Net.WebClient;
Buff : TBytes;
begin
WebClient0 := System.Net.WebClient.Create;
try
Buff := WebClient0.DownloadData(stUrl);
Result := Encoding.Default.GetString(Buff);
finally
FreeAndNil( WebClient0 );
end;
end;


テーマ:プログラミング - ジャンル:コンピュータ

  1. 2005/10/04(火) 13:04:17|
  2. Delphi.NET

VCL.NETでTIdHTTP(Indy10)を使う場合

Delphi2005 VCL.NETでTIdHTTPを使った場合
TIdHTTP.Get(AURL: string): string; overload;を使えばURL上の本文を
取ってこれるがVCL.NETでは文字化けしてしまう。
TidHTTPにはprocedure Get(AURL: string; AResponseContent: TStream); overload;などが
overloadされているので、これを利用する。
文字化けしないfunctionの作り方


function TForm1.GetHttpToStr(const stUrl: String): String;
var
Enc : Encoding;
FIdHttp : TIdHTTP;
ms : TMemoryStream;
ba : TBytes;
begin
Enc := Encoding.Default;//←URLのテキスト本文がShiftJisの場合
//Enc := Encoding.UTF8;//←URLのテキスト本文がutf-8の場合
ms := TMemoryStream.Create;
FIdHttp := TIdHTTP.Create;
try
FIdHttp.Get(stUrl, ms);
ms.Position := 0;
SetLength(ba, ms.Size);
ms.Read(ba, 0, ms.Size);
Result := Enc.GetString(ba);
finally
FIdHttp.Free;
Enc.Free;//←いらないかも
ms.Free;
end;

end;
//↓functionを呼んで使う場合
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Text := GetHttpToStr('http://127.0.0.1/cgi-bin/test.exe');
end;


残念ながら今のところEUCには対応していない。

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2005/09/28(水) 12:58:16|
  2. Delphi.NET

VCL.NETでのFormatDateTime()

Delphi7まで確認していたのだが、
FormatDateTime()でhhの後にmがあればそれは「分」と判断するっと
言う仕様だったので、時間表示する場合だいたい「hh:mm」としていた。
VCL.NETからは「hh:mm」っと言う分での判断はできないようだった。
確かにFormatDateTime()の「分」は「nn」なので仕方ないのだが、
「mm」の方がわかりやすかったので使っていた。
VCL.NETからは「hh:mm:ss」が使えないのか...。
.netなので、直接System.String.Format('{0:HHmmss}', now);でもいいかもしれない。

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2005/09/01(木) 12:45:19|
  2. Delphi.NET

Profile

Twitter...

最近の記事

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。