2chで解決したDelphi質問をFAQ収集するスレ

このエントリーをはてなブックマークに追加
1DELG:01/10/31 13:06
ちらばっているので。
しかも技術版ないで解決したものってどこにも
ログとって無いし。
2デフォルトの名無しさん:01/10/31 13:08
定期コピペ
= = = = = = =
Q.ツールメニューにエクスプローラを登録し、編集中のプロジェクを開く
A. http://piza2.2ch.net/tech/kako/1001/10010/1001039863.html
>>206

Q. コンパイルに必要な全ファイルを知りたい
A. http://piza2.2ch.net/tech/kako/1001/10010/1001039863.html
>>8

Q. 画像ファイルをドラッグ&ドロップすると、その画像が表示されるようなプログラム作りたい
A. http://piza2.2ch.net/tech/kako/1001/10010/1001039863.html
>>47

Q. 実行ファイルの末尾についているデータを読み出したい
A. http://piza2.2ch.net/tech/kako/1001/10010/1001039863.html
>>107 >>131 >>133 >>144-146

Q. 自分自身を削除したい
A. http://piza2.2ch.net/tech/kako/1001/10010/1001039863.html
>>108 >>125 >>138

Q. 起動中プログラムの実行ファイルを知りたい
A. http://piza2.2ch.net/tech/kako/1001/10010/1001039863.html
>>148

3デフォルトの名無しさん:01/10/31 13:08
Q. 起動する時のパラメータによって起動するフォームを変えたい
A. http://piza2.2ch.net/tech/kako/1001/10010/1001039863.html
>>346

Q. Char 型配列をゼロで初期化したい
A. http://piza2.2ch.net/test/read.cgi/tech/999482946/130
http://piza2.2ch.net/test/read.cgi/tech/999482946/144

Q. アーカイバを作りたい
A. http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999663627

Q. vbのcall命令みたいな物は? 質問詳細→http://piza2.2ch.net/test/read.cgi/tech/999482946/182
A. http://piza2.2ch.net/test/read.cgi/tech/999482946/183

Q. OpenDialog 系で、ファイルタイプで選んだ拡張子に応じて、上書き確認メッセージを出したい -> 質問詳細 http://piza2.2ch.net/test/read.cgi/tech/999482946/12
A. http://piza2.2ch.net/test/read.cgi/tech/999482946/50

Q. Label の Caption 変更時のちらつきをなくしたい
A. http://piza2.2ch.net/test/read.cgi/tech/999482946/47

Q.『ボーランドのナンセンスでないライセンス規定』および制限付保証 ... このタイトルはジョークですか
A ナウなヤングにバカウケだと思ったんでしょう

Q. Delphi6 の dfm ファイルに下位互換性を持たせたい
A.
http://piza2.2ch.net/test/read.cgi/tech/999482946/559
>これか!DFM ファイルの形式が今までのと同じになるね。
>[HKEY_CURRENT_USER\Software\Borland\Delphi\6.0\FileFormat]
>"DFMFormat"=dword:00000000

Q. 文字列が整数に変換可能かどうか調べたい
A. http://piza2.2ch.net/test/read.cgi/tech/999482946/232

Q. Del6のShellListView で、特定の拡張子をもったファイルのみを表示させたい
A. http://piza2.2ch.net/test/read.cgi/tech/999482946/522-523

Q. ShellTreeView で、指定したフォルダを展開し、スクロール院したい
A. http://piza2.2ch.net/test/read.cgi/tech/999482946/550-5513
ここでやるな。
うざすぎ。
5Delフサギコ:01/11/01 00:52
http://www2.big.or.jp/~osamu/Delphi/Tips/

   ∧,,∧   / ̄
@,,,ミ,,゚Д゚彡 < こっちの方がいいかもね。
⊂,,,,,,,,,つつ.   \_

いちいち
★解決した問題はこちらへ★
といわれるのはMLっぽくて萎え
>>5
激しく同意。
けど、こういうスレも欲しいかな、と思ったりもしないではない。
7デフォルトの名無しさん:01/11/01 07:31
Tipsアップ坂をつくってはどうか?
8デフォルトの名無しさん:01/11/01 07:44
5のはMLに入ってないと投稿できない見たいなので、
(おもな目的はMLの役に立つ情報を編集となってるし)
http://kova.cside2.jp/bbs/cyclamen.cgi?log=faqtip
にしましょう。しましょう。しましょう。
9デフォルトの名無しさん:01/11/01 08:10
いいじゃんやろうよ
QAにするなら要約して内容を載せて欲しいな・・・リンクだと過去ログになると読めなくなるし
Q. ツールメニューにエクスプローラを登録し、編集中のプロジェクフォルダを開く
A. ツール→ツールの設定で以下のように設定する
[プログラム]
C:\WINDOWS\Explorer.exe
[作業フォルダ]
C:\WINDOWS
[実行時引数に]
"/n", "/e", $PATH($EXENAME)
を指定する。これで、現在開いているプロジェクトのフォルダがあらかじめ開いた状態で、
マイコンピュータではない、普通のエクスプローラ(ツリービュー付き)が起動する。
12デフォルトの名無しさん:01/11/01 09:34
Q. コンパイルに必要な全ファイルを知りたい
A. コンパイルオプションのリンクタブの[マップファイル(詳細)]
にしてコンパイルして出来る XXX.map ファイルを見ればよい。
M=ファイル名
みたいな感じでリンクしたユニットが出る
Line numbers for なんとかって感じで コンパイルしたユニットや 最後にリソースファイルも出る
Q. 実行ファイル(自分自身)の末尾についているデータを読み出したい
A.
members.jcom.home.ne.jp/buin2gou/
かめさん(ロマンスファイラー)の作者のサイトの「デルファイ謎FAQ集」に、
EXEファイルにデータを埋め込んで取り出す方法が紹介されている。

{ 以下のプログラムをコンパイルして実行ファイルを作成し、
バイナリエディタで末尾に適当なデータを加えます。
EXEを実行してボタンを押すと、メモに16進データが
表示されます。}
procedure ReadMySelf(Data:TStream);
var
 i:Integer;
 Buf:array [0..3] of Byte;
 Exe:TMemoryStream;
 DataSize, ExeSize:Cardinal;
begin
 Exe := TMemoryStream.Create;
 try
  { Exe 読み込み}
  Exe.LoadFromFile( ParamStr(0) );
  { ファイルサイズ }
  Exe.Position := $34C;
  Exe.ReadBuffer(Buf, SizeOf(Buf) );
  ExeSize := 0;
  for i:=High( Buf ) downto 0 do
   ExeSize := ExeSize * 256 + Buf[i];
  DataSize := Exe.Size - ExeSize;
  { ポインタを移動 }
  Exe.Position := ExeSize;
  { データ部をコピー }
  Data.Position:=0;
  if DataSize > 0 then
   Data.CopyFrom( Exe, DataSize );
  { ポジションをリセット }
  Data.Position := 0;
 finally
  Exe.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 s:string;
 i:integer;
 buf:byte;
 data:TMemoryStream;
begin
 data := TMemoryStream.create;
 ReadMySelf( Data );
 caption:=inttostr( Data.Size );
 for i:=0 to Data.Size-1 do
 begin
  Data.Read(Buf,1);
  s:=s+IntToHex( Buf, 2 )+' ';
  if i mod 16 = 15 then
  s := s + #13;
 end;
 Memo1.Lines.Text:=s;
end;
Q. 自分自身を削除したい
A.

{以下の手続きを実行後、アプリを終了すると全てが削除される}
procedure KillMySelf;
var
 Exename,Batname,Linkname:string;
begin
 { 実行ファイル名 }
 Exename := ExtractShortPathName( ParamStr(0) );

 { バッチファイル名 }
 Batname := ChangeFileExt( Exename, '.BAT' );

 { バッチファイルのショートカット }
 Linkname := ChangeFileExt( Exename, '' );

 { バッチファイルを作成 }
 with TStringList.Create do
 begin
  Add( ':TOP' );
  Add( '@DEL '+Exename );
  Add( 'IF EXIST '+ Exename +' GOTO TOP' );
  Add( '@DEL ' + LinkName );
  Add( '@DEL ' + BatName );

  SaveToFile( Batname );
  Free;
 end;

 { バッチファイルを起動 }
 WinExec( PChar( BatName ) , SW_HIDE );
end;
Q. 起動中プログラムの実行ファイルを知りたい
A. TLHelp32を使う。
homepage1.nifty.com/beny/tips/other10.html を参照のこと。
Q. Delphi6 の dfm ファイルに互換性を持たせたい
S. レジストリに以下のキーを追加すると旧Delphi と同じ形式で
dfm が保存されるようになる。
[HKEY_CURRENT_USER\Software\Borland\Delphi\6.0\FileFormat]
"DFMFormat"=dword:00000000
Q.起動する時のパラメータによって、起動するフォームを変えたい
A.

program Project1;

uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1},
 Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.CreateForm(TForm2, Form2);
 Application.Run;
end.

起動パラメータ(ParamStr)で
このCreateFormの順番を変更してみてください。
最初にCreateFormされたものがMainFormになります。
18デフォルトの名無しさん:01/11/01 10:19
まとめるのは勝手だけど,
2ch で「過去ログを検索しなさい」ってのだけはやめてくれよ
Q. ListBoxで右クリックでItemを選択したい
A. 右クリックされた時に左クリックのメッセージを送ります。

ListBoxのMouseDownイベントに以下のコードを書いてみてください。

procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if [ssRight] = Shift then
 begin
  ListBox1.Perform(WM_LBUTTONDOWN, MK_LBUTTON , Makelong(X, Y));
  ListBox1.Perform(WM_LBUTTONUP, MK_LBUTTON  , Makelong(X, Y));
 end;
end;
Q. TShellListViewで特定の拡張子のファイルだけ表示させるには
A. AddFolderイベントを使います

//uses StrUtilsを追加
procedure TForm1.ShellListView1AddFolder(Sender: TObject;
AFolder: TShellFolder; var CanAdd: Boolean);
var
 Ext: string;
begin
 //フォルダは表示する
 if AFolder.IsFolder then Exit;

 Ext := ExtractFileExt( AFolder.PathName );
 CanAdd := AnsiMatchText( Ext, ['.jpg', '.jpeg', '.bmp' ] );
end;
21Delフサギコ:01/11/01 10:25
AboutDelphiはMLの登録認証などしていない気もしますが....
そんでもってMLに参加していない人の方が少ないような...

   ∧,,∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡  <  ま・いっかー
  ミ つ且~~   \___________
〜ミ,,,,,, ,,ミ  18-19のFAQ書いてみましたよ

>>18
同意。
>18-19のFAQ書いてみましたよ
ん、どゆ意味?
23Delフサギコ:01/11/01 11:17
   |
電 |   番号マチガエターヨ
   |∧,,∧
柱 ミ,,゚Д゚彡 <19と20の投稿してみたって事でした
  ⊂ ミ
   |, ,,ミ
   |∪
, ' , ; ' ;
24デフォルトの名無しさん:01/11/02 16:06
あげ
25デフォルトの名無しさん:01/11/03 00:27
あげ
26デフォルトの名無しさん:01/11/03 00:30
Q. Bitmap のピクセルへアクセスするのに ScanLine よりも速い方法はありませんか。
A. ポインタを取得し、それを利用しましょう。

Scanline プロパティが遅いのは、GDIFlush API を呼び出したりと
いろいろコストがかかる処理しているからだね。

俺は ScanLine から次のラインへのオフセットを計算して
以後それを使って高速化している。

var
 ScanLinePtr0: Pointer;
 ScanLineOffset: Longint;
 Y: Longint;
 P: Pointer;
begin
 { 画像の任意のラインのポインタを計算するための準備 }
 ScanLinePtr0 := Bitmap.ScanLine[0];
 if Bitmap.Height>1 then
  ScanLineOffset := Integer(Bitmap.ScanLine[1])-Integer(Bitmap.ScanLine[0])
 else
  ScanLineOffset := 0;

{ 各ラインのポインタを求める }
 for Y:=0 to Bitmap.Height-1 do
 begin
  P := Pointer(Integer(ScanLinePtr0)+ScanLineOffset*Y);
  // 取得したポインタPを使ってとりあえず何かしよう
 end;
end;
27デフォルトの名無しさん:01/11/14 21:17
あげ
28デフォルトの名無しさん:01/12/17 02:32
あげ
29デフォルトの名無しさん:01/12/17 04:01
荒し依頼。
低レベルなアニオタ (自称芸術家・モーツァルティアン・藁)
おおもりよしはる
http://www9.big.or.jp/~yoshioh/
このサイトをよあに@同人板とその仲間達とともに潰してくれる人募集中
30デフォルトの名無しさん:01/12/19 22:51
あげ
31デフォルトの名無しさん:01/12/20 14:49
StatusBarの1つのパネルをクリックすると、それに対した処理ってどういう風にやったらいいですか?

OnMouseDownかOnMouseUpで位置からパネルを算出、それにより該当処理、でどうよ?

uses
CommCtrl;

function WhichPanels(SB:TStatusbar;x,y:integer):integer;
var
i:integer;
r:TRect;
pt: TPoint;
begin
result := -1;
pt := Point(x,y);
for i := 0 to SB.Panels.Count-1 do begin
SendMessage(SB.Handle,SB_GETRECT,i,LPARAM(@r));
if PtInRect(r,pt) then result := i;
end;
end;

procedure TForm1.StatusBar1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
ret:integer;
begin
ret := WhichPanels(Statusbar1,X,Y);
if ret <> -1 then
Label1.Caption := 'You Clicked Panels of '+IntToStr(ret);
end;
32デフォルトの名無しさん:01/12/27 15:31
wsprintfを使う

function wsprintf(var Output ; Format: PChar): Integer;
cdecl; varargs; external user32 name 'wsprintfA';

procedure TForm1.FormCreate(Sender: TObject);
var s:string;
begin
setlength(s,1000);
wsprintf(pchar(s)^,'%5d %5d', 1,100);
Caption:=PChar(s);
end;
スレじゃなくてサイト作ってやれよ
意味ねー
>>33
サイトだと飽きたら終わり。
スレだと、だれでも書き込める。
二度書きなんて容量取りなだけじゃんか
飽きるんならやるな
>>35
じゃ、sageでやるから許して。
37ここでやれ:01/12/28 00:22
よーするに 37 = ゆうきひろ/あっちの世界
何ですね?

あー気持ち悪い。
悲惨な1の居留守れ棚
萎え

こっちでやれ、どうせMLの奴 2chも見てるだろ
http://www2.big.or.jp/~osamu/Delphi/Tips/