Haruyuki Mohri Blog(Delphi)

毛利春幸のブログ

スポンサーサイト

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

ForceDirectories()必要に応じて親ディレクトリも作成

DelphiにはForceDirectoriesと言うフォルダを作成し必要に応じて親ディレクトリも作成する便利な関数があるのだが
.NETのSystem.IO.Directory.CreateDirectory()はForceDirectoriesと同じ事ができてしまう。
テストしたがSystem.IO.Directory.CreateDirectory("....testdir")こんな事もできた。
VCL.NETではMkDir()もForceDirectories()も中身は
System.IO.Directory.CreateDirectoryでprocedureかfunctionかの差だけだった。
VCL.NETで他にもそんなんありそう。

スポンサーサイト

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

  1. 2005/09/30(金) 13:00:33|
  2. Delphi

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

タイトルバーの「×」を使えなくする


procedure TForm1.Button2Click(Sender: TObject);
procedure EnableMenuItemChange(const byEnable : Byte; const stCap : String);
begin
EnableMenuItem(GetSystemMenu(Handle,false), SC_CLOSE, MF_BYCOMMAND or byEnable);
TButton(Sender).Caption := stCap;
end;
begin
if TButton(Sender).Caption = 'on' then
EnableMenuItemChange(MF_DISABLED, 'off')
else
EnableMenuItemChange(MF_ENABLED, 'on');
end;

[Alt]+[F4]は使えるので、これも使えなくしないといけない。

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

  1. 2005/09/20(火) 12:53:01|
  2. Delphi

IDEの設定がPIOモードになってしまう。

My VAIO TypeFがノートンアンチウィルスのスキャン後
起動に10分もかかるようになってしまった。
あまりにも遅いので、HDスキャンやデフラグをやってみたが一向に
変わらない状態だった。

いろいろ調べていくとデバイスマネージャーのIDE転送モードが
PIOになってしまっている事がわかった。
マイクロソフトサポートオンラインを見ると
タイムアウトまたはCRC エラーが6回の発生すると
転送モードを一段ずつ下げるらしい。その後もCRCエラーが
出るとPIO モードまで下げる仕様になっている。
詳細はhttp://support.microsoft.com/default.aspx?scid=kb;ja;817472

一度PIOになってしまうとレジストリを直接いじる以外手は無いらしい。

IDE Primaryの場合レジストリの↓を見る
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass{4D36E96A-E325-11CE-BFC1-08002BE10318}�001

その中ので
MasterDeviceTimingMode=マスタ
SlaveDeviceTimingMode=スレーブ
0x2010 = UltraDMAモード2(Ultra ATA/33)
0x8010 = UltraDMAモード4(Ultra ATA/66)
0x10010 = UltraDMAモード5(Ultra ATA/100)
0x12010 = UltraDMAモード6(Ultra ATA/133)
それ以外でその数字以下ならPIOモードになってしまっているので、
変更する。

それでもPIOモードになってしまう場合は
MasterDeviceTimingModeAllowedの内容を見て
0xffffffffになっているか確認する。なっていなければ変更

ドライバパフォーマンスを改善する場合の処置その2
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionDrivers32
「aux = mmdrv.dll」にしてみるといいらしい。

この処置をしてMy VAIOはUltra DMA Mode5に治った。




テーマ:パソコン関連お役立ち情報 - ジャンル:コンピュータ

  1. 2005/09/05(月) 12:48:56|
  2. トラブル

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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。