2chで解決したDelphi質問をFAQ収集するスレ
ちらばっているので。
しかも技術版ないで解決したものってどこにも
ログとって無いし。
2 :
デフォルトの名無しさん:01/10/31 13:08
3 :
デフォルトの名無しさん:01/10/31 13:08
ここでやるな。
うざすぎ。
http://www2.big.or.jp/~osamu/Delphi/Tips/ ∧,,∧ / ̄
@,,,ミ,,゚Д゚彡 < こっちの方がいいかもね。
⊂,,,,,,,,,つつ. \_
いちいち
★解決した問題はこちらへ★
といわれるのはMLっぽくて萎え
>>5 激しく同意。
けど、こういうスレも欲しいかな、と思ったりもしないではない。
7 :
デフォルトの名無しさん:01/11/01 07:31
Tipsアップ坂をつくってはどうか?
8 :
デフォルトの名無しさん:01/11/01 07:44
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;
AboutDelphiはMLの登録認証などしていない気もしますが....
そんでもってMLに参加していない人の方が少ないような...
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ,,゚Д゚彡 < ま・いっかー
ミ つ且~~ \___________
〜ミ,,,,,, ,,ミ 18-19のFAQ書いてみましたよ
>>18 同意。
>18-19のFAQ書いてみましたよ
ん、どゆ意味?
|
電 | 番号マチガエターヨ
|∧,,∧
柱 ミ,,゚Д゚彡 <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
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 サイトだと飽きたら終わり。
スレだと、だれでも書き込める。
二度書きなんて容量取りなだけじゃんか
飽きるんならやるな
よーするに 37 = ゆうきひろ/あっちの世界
何ですね?
あー気持ち悪い。
悲惨な1の居留守れ棚