5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

くだすれDelphi(超初心者用)その37

1 :デフォルトの名無しさん:2006/12/08(金) 16:03:27
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その36
http://pc8.2ch.net/test/read.cgi/tech/1159485364/

<過去スレ>
http://delwiki.info/?Delphi+%B4%D8%CF%A2%A4%CE%B2%E1%B5%EE%A5%B9%A5%EC%A5%C3%A5%C9 (上のDelWiki避難所内)
または>>2-10あたりにある過去スレURL

<関連スレ>
※Delphiに関係してる雑談および関係してない雑談については以下でどうぞ
バカボンのDelphi不買・販促・その他談話室その29
http://pc8.2ch.net/test/read.cgi/tech/1153227982/

<その他>
BorlandHomePage
http://www.borland.com/jp/
DelWiki避難所
http://delwiki.info/
BDN(BorlandDeveloperNetwork)
http://bdn.borland.com/jp/delphi

過去スレは>>2-10あたりのどこかに


271 :デフォルトの名無しさん:2006/12/18(月) 23:36:34
>>264
ソースちょっと見たけど良く解からないから、トレースしてみて。
でも、ColCount-1とやるべきだろうね。

272 :200:2006/12/18(月) 23:42:44
あ、そういう考え方だったのですね。
配列の10個目を見る時にarray[9]ってするみたいな感覚なのか。
スッキリしました!ありがとうございます。

273 :デフォルトの名無しさん:2006/12/19(火) 00:14:42
それはケースバイケースだろう。
ttp://pc8.2ch.net/test/read.cgi/tech/1162262669/l50
では、最下位ビット0ってなってるから、ビット30は「31番目のビット」ってことで。
後、Delphiでは何も配列の最初の要素の添え字は0になるとは限らんし、
a: array [ 1..10 ] of DataTypeで宣言されていたら、
10個目はまさしく、a[10]だが、
a: array [ 0..9 ] of DataTypeと宣言されてたら、
a[9]になるわけで、ただの言葉というか表現の違いだけだろーーーーーーーーーー。




274 :デフォルトの名無しさん:2006/12/19(火) 03:09:55
よくURLが書いてあるラベルをクリックするとデフォルト用のブラウザとして設定されてるブラウザを起動させて(すでに起動してある場合はブラウザをアクティブにして)指定されたURLのページを開くっていう機能があるじゃないですか
あれってどうやって実現してるんでしょうか?

275 :デフォルトの名無しさん:2006/12/19(火) 03:16:54
api

276 :デフォルトの名無しさん:2006/12/19(火) 03:17:25
>>273
キミは序数と番号付けを混同している。

277 :デフォルトの名無しさん:2006/12/19(火) 03:17:37
ごめん、DelphianWorldの適当なコンポを拾って解析したらわかった

278 :デフォルトの名無しさん:2006/12/19(火) 08:11:12
>>270
Close→閉じる
Hide→隠す
Release→解放

279 :デフォルトの名無しさん:2006/12/19(火) 12:36:09

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to 10 do
begin
Memo1.Lines[i]:=IntToStr(i);
end;

これを実行したら、Memo1の一行目にしか表示されないんだけど、
Memo1の行全体に

1
2
3
4
5
とか表示させるにはどうしたらいいでしょうか?

280 :デフォルトの名無しさん:2006/12/19(火) 12:49:54
Linesがいつ10行に設定されてんだよとか思わない?
TStringsのプロパティとメソッドをヘルプで調べてご覧

281 :デフォルトの名無しさん:2006/12/19(火) 13:02:23
procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
begin
 for i := 1 to 5 do
  Memo1.Liens.Add(IntToStr(i));
end;

282 :デフォルトの名無しさん:2006/12/19(火) 13:02:44
つまりMemo1.Lines.Add(IntToStr(i));
逆にするならMemo1.Lines.Insert(0,IntToStr(i));

283 :デフォルトの名無しさん:2006/12/19(火) 13:03:18
やっちゃった・・・

284 :デフォルトの名無しさん:2006/12/19(火) 13:05:37
いいんです、僕>>282-283みたいな人好きですから・・・

285 :デフォルトの名無しさん:2006/12/19(火) 15:11:08
TLabelとTStaticTextってどう使い分けるといいんでしょうかね?
継承元が違うってのは分かるんだけど、具体的なシュチュエーションが思い浮かばん…

286 :デフォルトの名無しさん:2006/12/19(火) 15:45:59
TStaticTextはウィンドウハンドルを持ってるから
フォームの最前面に表示したい場合などに使える
(ラベルが特定条件で隠れるUIが良いかどうかは置いといて)

あとは・・・枠を表示出来たり、D&Dで移動する事が出来たり、
実用的じゃないなw

287 :デフォルトの名無しさん:2006/12/19(火) 17:23:28
>>278
HideとCloseの違いについてはわかりました。
CloseとReleaseの違いについてなんですが、特に関数やらを定義していなければReleaseではなくCloseでいいのですか?
それとも、Releaseで閉じたほうがいいんですか?

288 :デフォルトの名無しさん:2006/12/19(火) 17:57:55
>>285
ウィンドウハンドルを持っているコントロールの下にラベルを置いて文字列を表示しようとすると
ラベルの文字列が隠れてどうしようもない場合に使ってみる。


289 :デフォルトの名無しさん:2006/12/19(火) 18:30:53
$quot;を ' に置き換えたいんですけど、クォートってどう書いたらいいの?

290 :デフォルトの名無しさん:2006/12/19(火) 18:35:41
' '' '

291 :デフォルトの名無しさん:2006/12/19(火) 21:52:15
>>287
Closeメソッドはフォームを破棄するときにいろいろ配慮してくれるので、
普通はCloseでいい。

292 :ななしへたぐらま ◆XcB18Bks.Y :2006/12/19(火) 23:24:53
>>270,287
Hide…常に隠す
Close…
 ・メインフォーム…プログラムを終了する
 ・サブフォーム…隠す(ただしOnCloseイベントで変更可能)
 ・MDIの子フォーム…最小化する(同上)
Release…解放(破壊)

Releaseメソッドは実行時に生成したフォームを解放するときにFreeの代わりに使います.

dlg := TMyDialog.Create(nil);
try
 dlg.ShowModal;
finally
 dlg.Free;
end;

>>274
・usesにShellApiユニットを追加
・URLを書いたラベルなどをフォームに貼る
・そのラベルのイベントハンドラに以下のようなコードを貼る.

 ShellExecute(Handle, 'OPEN', 'http://pc8.2ch.net/tech/', '', '', SW_SHOW);


293 :デフォルトの名無しさん:2006/12/19(火) 23:37:33
>>292
> Releaseメソッドは実行時に生成したフォームを解放するときにFreeの代わりに使います.

微妙に使い分けが要る。
Mastering Delphiなんかを見るとFreeでいいとかなってる。

実際に問題になるのは、メインウインドウのOnDestroyの中で他のウインドウを消すとき、
Releaseだと例外を発生することがあった。
その場合、Releaseの後にApplication.Processmessages()をかませると例外がでなかったので、
どうやらタイミングの問題があるらしい。

まあとにかくFreeが無難だと思う。

294 :デフォルトの名無しさん:2006/12/19(火) 23:42:54
基本的にフォームのハンドラで自フォームを廃棄したいときのみReleaseを使えばいいと思われ。

295 :デフォルトの名無しさん:2006/12/20(水) 08:07:49
Free 他殺
Release 自殺

296 :デフォルトの名無しさん:2006/12/20(水) 08:17:39
分かりやすい

297 :デフォルトの名無しさん:2006/12/20(水) 08:19:50
Free 即死
Release 悶絶死

298 :デフォルトの名無しさん:2006/12/20(水) 08:58:24
↑いやな例えだなw

299 :デフォルトの名無しさん:2006/12/20(水) 09:40:41
デスクトップ(色んなウインドウのトップ)に指定した長方形を書きたいのですが
どのようにすればよいのでしょうか?

300 :デフォルトの名無しさん:2006/12/20(水) 09:41:44
要するに、サブフォーム上のボタンを押してそのサブフォーム自身を閉じる場合は
自殺のReleaseで、メインフォームからサブフォームを消すときはFreeを使うってことですかね?
んで、サブフォームをCloseすることはHideすることと同じってことですか?

301 :デフォルトの名無しさん:2006/12/20(水) 10:16:11
デフォルトではそう。OnClose イベントで自動で Free に設定することもできる。

302 :デフォルトの名無しさん:2006/12/20(水) 10:58:13
文字列の質問です。
マニュアルによると、長い文字列(AnsiString),ワイド文字列(WideString)型の変数は動的に割り当て
られたメモリブロックへのポインタで、文字列が空(長さ0)の時は、メモリブロックは割り当てられず、nil
になるとあるので、以下のコードを試したました。
var
 S: string;
begin
 S := '';
 if PAnsiChar(S) = nil then ShowMessage('nil');
Sの型がAnsiStringの時は確かにnilになるのですが、WideStringの時は、nilになりません。
これはマニュアルがバグってるのでしょうか?コンパイラがばくってるのでしょうか??
環境はTurboです。





303 :デフォルトの名無しさん:2006/12/20(水) 11:13:16
302です。
訂正です。AnsiString、WideString共にnilになりませんでした。
というより、Assignedや<>nilでチェックすればいいようですね。
頭がこんがらがってきた。以前、ここであがったassignedの記事を読みましたが、
理解不能です。
ためしに、
var
 P: Pointer;
begin
 P := nil;
 if P = nil then ShowMessage('nil')
だとチェックできますね。

304 :デフォルトの名無しさん:2006/12/20(水) 13:27:15
ローカルに置いてあるHTMLのフォームから
HTTPリクエストを同じフォルダのアプリケーションに飛ばして、
ファイル書き込みをやらせようとしています。

TCGIApplicationあたりを使ってそれらしいものを作ってみたのですが、
実際ブラウザでHTMLを開いてsubmitしてみたら、
なぜかアプリケーションのダウンロードになってしまいました。

作り方が悪いのでしょうか?それともDelphiでは不可能なんでしょうか?
環境はTurbo Delphi Explorerです。

305 :デフォルトの名無しさん:2006/12/20(水) 13:34:32
>>303
PAnsiCharじゃなくてPointerでキャストすればOK

306 :デフォルトの名無しさん:2006/12/20(水) 13:51:12
最近Delphiを始めた初心者です。

FolderList: TStrings; は定義、Create済み

var
Count: Integer;
DriveName: PChar;
SearchRec: TSearchRec;
begin
Count:= 0;
GetMem(DriveName, 4);
StrCopy(DriveName, PChar(Drive + ':\'));

if (FindFirst(DriveName+'*', faDirectory, SearchRec) = 0) then begin
repeat
Inc(Count);
FolderList.Add(DriveName + SearchRec.Name + '\');
until (FindNext(SearchRec) <> 0);
end;
FreeMem(DriveName);
end;

こんなプログラムでフォルダ検索をしようとしているのですが、フォルダは検索できたものの、
フォルダでないもの '*.txt' や '*.csv' などがいくつか引っかかってしまいます。

どうしたらこのような問題を回避できるのでしょうか?
フォルダにも '.' が使われた名前があるケースも考えられるので、単純に '.' 入りのものを弾くなどはしたくありません。
どなたかご指導のほど、よろしくお願い致します。

307 :デフォルトの名無しさん:2006/12/20(水) 13:54:37
スペースつぶれてコード見づらいですね。

var
 Count: Integer;
 DriveName: PChar;
 SearchRec: TSearchRec;
begin
 Count:= 0;
 GetMem(DriveName, 4);
 StrCopy(DriveName, PChar(Drive + ':\'));

 if (FindFirst(DriveName+'*', faDirectory, SearchRec) = 0) then begin
  repeat
   Inc(Count);
   FolderList.Add(DriveName + SearchRec.Name + '\');
  until (FindNext(SearchRec) <> 0);
 end;
FreeMem(DriveName);
end;

308 :デフォルトの名無しさん:2006/12/20(水) 14:00:01
((SearchRec.Attr and faDirectory) <> 0)が真ならディレクトリだから
ループ中にこれで判別できると思う。カレントディレクトリの「.」とか「..」は自前ではじくしかないかな

309 :デフォルトの名無しさん:2006/12/20(水) 14:06:58
repeatループ内で
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
これで.と..を弾いて
if SearchRec.Attr = faDirectory then
これでディレクトリだけ引っ張ってこれるよ

310 :デフォルトの名無しさん:2006/12/20(水) 14:08:50
>>308-309
素早いレス、ありがとうございました。
仰る通りの方法で回避することができました。

それにしても FindFirst の faフラグの実装は謎ですね。
検索後に更に判定が必要とは・・・

とても勉強になりました。ありがとうございます。

311 :デフォルトの名無しさん:2006/12/20(水) 14:15:32
>>310
faDirectory有:無属性とフォルダが列挙
faDirectory無:無属性を列挙

無属性のファイルはフラグとは関係なしに列挙される。
それに加えてフラグで指定した物も列挙される。

312 :デフォルトの名無しさん:2006/12/20(水) 14:52:18
>>311
なるほどそういう仕組みだったのですね。

ありがとうございました。

313 :デフォルトの名無しさん:2006/12/20(水) 18:53:01
ホントにホントに初心者的な質問ですみませんが、
IntraWebで作ったアプリはインターネットに公開して
動作させることができるのでしょうか?
Delphi7のEnterprise版を使用しています。

314 :デフォルトの名無しさん:2006/12/20(水) 18:59:15
>>313
出来ますが、何か?

315 :デフォルトの名無しさん:2006/12/20(水) 21:25:26
つい最近Delphiをインスコしたばかりの漏れは、とりあえず他の人の作ったソフトのソースを見てみてるんだけど、
TEditorなるものが必要らしいソフトがあって、TEditorをインスコしようとしたんだけど、
コンポーネントのインストールの段階で、
[致命的エラー] HEDITREG.PAS(19): ファイル 'DsgnIntf.dcu' が見つかりません
って弾かれちゃう(´・ω・`)
多分漏れがDelphiの基本を理解していないからなんだろうけど、何か解決策あったら教えて。

ちなみにXPでDelphi6 Personalを使ってるお。

316 :デフォルトの名無しさん:2006/12/20(水) 22:03:27
HelpでDsgnIntfで検索→DsgnIntf の名前変更および関連する変更


317 :デフォルトの名無しさん:2006/12/20(水) 22:43:54
他のアプリのメッセージ(WM_ERASEBKGND)を横取りしたいのですが
どのようにすればよいのでしょうか?

318 :デフォルトの名無しさん:2006/12/20(水) 23:01:30
フック

319 :デフォルトの名無しさん:2006/12/20(水) 23:50:45
>>299
GetDC(0)

320 :デフォルトの名無しさん:2006/12/21(木) 07:56:19
>>315
プロジェクトオプション
検索パス

321 :デフォルトの名無しさん:2006/12/21(木) 09:50:43
インラインアセンブラでxmmレジスタを保存する必要はありますか?

322 :デフォルトの名無しさん:2006/12/21(木) 10:51:18
D5でPARADOX+BDEで作ったアプリがキー違反で悩まされています。
6年ほど前に作りずっと安定して動いていたのですが最近キー違反が多発するようになりました。
主キーはautoinc型で2次インデックスに無重複の物が1つあります。
post前にデバッガで2次インデックスで使われているフィールドの値をチェックして
重複していないのにpostするとキー違反になるので何が何だか判りません。
テーブルを作り直してみたのですが直りませんでした。
エラーメッセージがキー違反ですとしか出ないのでエラーの詳細を調べる方法とか
キー違反で考えられる原因とか有りましたら教えてください。




323 :デフォルトの名無しさん:2006/12/21(木) 10:54:12
>>322
ちなみにレコード数はどれくらい?

324 :デフォルトの名無しさん:2006/12/21(木) 11:17:03
>>323
1万レコードくらいです。
以前は10万レコードくらい有ったときもありました。


325 :デフォルトの名無しさん:2006/12/21(木) 12:01:43
try

except
 on E: Exception do
  ShowMessage(E.Message);
end

で例外メッセージを詳しく捕まえるとか
あと、インデックスが壊れてる場合にキー違反が出ることあるって聞いた

326 :デフォルトの名無しさん:2006/12/21(木) 12:12:52
>>324
Paradoxでテーブルの修復はためした?
ためすと重複してるレコードを抽出してくれるよ。

327 :デフォルトの名無しさん:2006/12/21(木) 12:26:26
>>325
ありがとうございます。試してみます。

>>326
TUTIL32を使った修復ツールを作っていて普段はそれで直るのですが今回はそれがメッセージもなく落ちてしまって
使えなかったのでテーブルを作り直しました。
でもその後に修復をかけて成功しても再発するのです。


328 :デフォルトの名無しさん:2006/12/21(木) 13:13:26
DVD等を再生している動画の白を採取したいのですが
GetDCではうまくいきません。

何かよい方法は無いものでしょうか?

329 :デフォルトの名無しさん:2006/12/21(木) 13:14:15
>>328
×白
○色

どうぞよろしくお願いします。

330 :デフォルトの名無しさん:2006/12/21(木) 16:38:40
>>328
デジャブ?

DVDとかメディアプレイヤーは、オーバーレイを使ってるから、GetDCでは無理。
どうしてもやりたかったら、先にメディアプレイヤーで動画再生しておいて、
DVDを再生すると、後に再生する方は、オーバーレイを使えないのでできるはず。
スマートじゃないけどな。

331 :デフォルトの名無しさん:2006/12/21(木) 19:58:40
Masks.dcuを使っているソースをコンパイルしたいのですが、
Delphi6 Personalには、Masks.dcuが付いていないようなのです。
何か代用できるものってありませんか?


332 :デフォルトの名無しさん:2006/12/21(木) 20:34:35
>>331
体験版からdcuを抜くとか出来ないの?

333 :デフォルトの名無しさん:2006/12/21(木) 20:39:03
>>327
PXUPGR なんてツールもあるよ。
http://www.rksolution.cz/delphi/delphi.htm

334 :333:2006/12/21(木) 20:39:44
Pdxrbld でした orz

335 :331:2006/12/21(木) 22:12:14
>>332
ありがとうございます。抜くことはできました。
ただ、今度は「Masks.pas」が無いと怒られましたorz


336 :デフォルトの名無しさん:2006/12/21(木) 22:58:11
>>331
TurboDelphiのMasks.pasを適当な別の場所にコピーして、
D6のライブラリパスにコピーした場所を追加してみたら?
ライセンス的に疑問が残るが。

337 :デフォルトの名無しさん:2006/12/21(木) 23:03:12
お、お前ら鬼だ。
俺は今、鬼を見てるぅー。

338 :デフォルトの名無しさん:2006/12/21(木) 23:22:02
>>335
素直にTurbe Delphiに以降しる

339 :デフォルトの名無しさん:2006/12/21(木) 23:37:17
超初心者なんですが・・・質問させてください。
あるファイル(名前をData.dat、中身はテキスト形式で一行目に番号、2行目に名前、3行目に性別)
が数十人繰り返し書いてあるファイルを、一行づつLoadしていき、各行でレコード型の変数に
代入していく手続き?(または関数)って、どうすればできますか?
だれか、教えて><

procedure TForm1.TextOperation;
var
Doc: TStringList;
Ws: WideString;
begin
if not FileExists('C:\Program Files\Borland\Delphi6\Projects\製作ソフト\recoad.dat') then
ShowMessage('データファイルが見つかりません');
Doc := TStringList.Create;
Doc.LoadFromFile('C:\Program Files\Borland\Delphi6\Projects\製作ソフト\recoad.dat');
Ws := Doc.Text;
ShowMessage(Ws);
doc.Free;

end;
と書いて、ロードした中身確認したところ、recoad.datの全ての行を読み込んで一個の変数に格納してしまい
ました・・・・orz。ファイルの一行づつロードして、一行目をレコード型変数の[1,A]で二行目を[1,B]で
3行目を[1,C]で4行目を[2,A]で5行目を[2,B]・・・・・・・とやっていきたいんです。

340 :デフォルトの名無しさん:2006/12/21(木) 23:43:08
Doc[行番号] で、その行の文字列を得られる。

341 :デフォルトの名無しさん:2006/12/21(木) 23:52:46
俺はプログラムを書く前にどういうことをしたいのか日本語でコメント行に書くよ

//StringListを生成する

//ファイルを読み込む

//1行目をHoge[1,1]に代入する

//2行目をHoge[1,2]に代入する

//x行目をHoge[ここは自分で考えよう]に代入する

342 :デフォルトの名無しさん:2006/12/22(金) 00:02:07
>>341
それは超初心者だけにしておけ。

コードを変えるたびにコメントを変える羽目になる。
失敗すると無関係なコメントが残って被害甚大。

343 :デフォルトの名無しさん:2006/12/22(金) 00:04:17
>>341
コメントにせずにやるべきことを書けばいいんだよ
そこを実装するときに消していくんだ
そうすればすべきことをしない限りコンパイルを通らん

344 :デフォルトの名無しさん:2006/12/22(金) 00:04:36
delphiごときにコメントなんぞいらん

345 :341:2006/12/22(金) 00:08:38
すまん、>>339が超初心者っていうからそれにあわせて答えたつもりだった
いまは頭の中で思いながらコード化してる

346 :デフォルトの名無しさん:2006/12/22(金) 00:10:24
>>345
了解。

そういえばToDo なんてのもあるけど、使ってる?

347 :デフォルトの名無しさん:2006/12/22(金) 01:35:59
>>342
仕事でふつーに書くぞ?

348 :デフォルトの名無しさん:2006/12/22(金) 01:42:04
まぁ、342は適当にコメントの中身考えたと思うけど、コメントの中身の悪い例だな。
//StringListを生成する
List := TStringList.Create;
なんて、コード見れば、TStringListのインスタンスを生成してるのは、誰にでも
わかることで、コメント書くなら何のためにインスタンスを生成したかとか書くべきだ。
とどっかで読んだような気がする。


349 :デフォルトの名無しさん:2006/12/22(金) 01:48:07
俺はただ単純に自分が何するか分かるようにってことだと思ったんだけどそう言うことじゃないのか・・・

350 :デフォルトの名無しさん:2006/12/22(金) 01:51:11
自分で実装するなら書かないな、実装後コメント残す事はあっても。

351 :デフォルトの名無しさん:2006/12/22(金) 01:52:35
コメントは誰が読むかを意識するべきであって
誰もが読む文学とは違う

352 :デフォルトの名無しさん:2006/12/22(金) 02:00:37
俺のプルグラムはコメントは少ないが、関数ヘッダー(関数名や概要・引数)?みたいのを付けてしまった。
とりあえず、今のアプリはヘッダー消すのも面倒だから、とりあえず、付けてる。
おかげで、俺のプログラムの3分の1くらいの行数は関数ヘッダーで占められてる。
消してぇ。


353 :デフォルトの名無しさん:2006/12/22(金) 02:08:59
Perlがあれば整形楽ちん
ついでにdoxygenか類似ツールを導入すればドキュメント管理にもなる

354 :デフォルトの名無しさん:2006/12/22(金) 03:40:28
QDでDirectShowも可能?

355 :303:2006/12/22(金) 06:27:36
>>305さんの言う通りにPointerでキャストすればいけました。
で、色々調べたら、PointerへのキャストとPCharへのキャストで、文字列が空の時
次のような違いがあるっぽいですね。
C言語で書くと
char^ p1 = null;
char[] p2 = { '\0' };
って、C言語の正確な構文忘れましたが、上記のようなイメージで、
Delphiの文字列は空の時に、Pointerだと上、PCharだと下の状態になるっぽいですね。
今ごろ知った。orz

356 :デフォルトの名無しさん:2006/12/22(金) 07:22:27
「何をやってるか」はソースから読めないとおかしくて、
コメントとソースが食い違ってるとどっちが正しいのかわからなくなる。
「何のためにやってるか」をコメントするならOKだけど、
それを意味付けして命名するとそのコメントも消せるようになる。

関数ヘッダは、cvsとかで管理されてたら全く要らない。
JavaDocみたいに抽出する場合もあるかも知れんが、
内容と合ってないと気づいた分は消すだけでもしないとな。
特に多人数開発で、コピペで体裁だけ整えて間違ったまま放置とかされるとうざい。
関数コピペしてヘッダごとコピペされるとか、
コピー先にあわせて修正したのにヘッダがそのままとか良くあったよ。


357 :デフォルトの名無しさん:2006/12/22(金) 09:57:03
コピペでじゃんじゃん重複コードを製造してるような所もあるからな。
ま、確かに速いし、仕事してるっぽいんだけど

そういうコードを長年保守して使おうとか考えちゃうのが考え物。

358 :デフォルトの名無しさん:2006/12/22(金) 10:03:43
>>355
そらそうよ
PChar(PAnsiChar)やPWideCharはCの文字列と同じで
ヌル文字列を末尾に必ず付加するからな

359 :デフォルトの名無しさん:2006/12/22(金) 10:16:28
ありがとうございます。その続きなんですが、Win32APIで文字列返す関数のバッファとして、
stringやWideStringを使いたいのですが、その時は、どうすればいいのでしょうか??
もちろん、呼ぶWin32APIは末尾のNULL文字の分のバッファも要求してきます。
で、Win32APIがNULL文字分のバッファだけが必要なとき、
SetLength(S, 0);
Win32API(PChar(S))
で、オッケーでしょうか?Sの長さは0だけど、PCharとして、キャストしたので、
1バイト分だけ確保されたと考えても差し支えないでしょうか??



360 :デフォルトの名無しさん:2006/12/22(金) 11:19:23
文字列のバッファにString型を使いたい場合は
↓こんな感じで(あんまりお勧めしないけど)
procedure TForm1.Button3Click(Sender: TObject);
var
 buff: String;
 Len: Cardinal;
begin
 Len := 256;
 buff := StringOfChar(#0, 256);
 GetUserName(PChar(buff), Len);
 ShowMessage(buff);
end;

361 :デフォルトの名無しさん:2006/12/22(金) 12:15:37
ButtonをClickすると新しいウィンドが開いて、
そこに保存してあるtxtファイルを表示させたいんですがどうすればよいでしょうか?

362 :デフォルトの名無しさん:2006/12/22(金) 12:54:28
TForm2.Create(Self).Memo1.LoadFromFile(FileName);

363 :339:2006/12/22(金) 15:10:25
>>340
>>341
その他の人アドバイスありがとうです。
参考にします。
コメントをコードよりさきに書いといたらやりやすいってのはちょっと納得してしまいました。

>>361
おれの書いてるコードが少し参考になるよ。あれは、新しいウィンドウが出てきてそこにテキストファイル
の内容がフォーム上に出てくるけど。

364 :デフォルトの名無しさん:2006/12/22(金) 20:25:56
>>354
QDに動画再生機能はない。

365 :デフォルトの名無しさん:2006/12/23(土) 05:24:47
TStringListは末尾に自動で改行コード付加するのにはまいったなぁ。
GetTextStrをオーバーライドするTOhMyGreateStringListでも作るかなぁ。


366 :デフォルトの名無しさん:2006/12/23(土) 05:27:07
いや、やっぱ、Saveするときだけ、独自の関数かますか。。

367 :デフォルトの名無しさん:2006/12/23(土) 05:40:14
TStringStreamってなんだ誰も使わないんだろうな

368 :デフォルトの名無しさん:2006/12/23(土) 05:42:18
聞いたこともないな。

369 :デフォルトの名無しさん:2006/12/23(土) 15:19:40
torbo delphi と torbo delpji for net インストールするならどっち?

すみません。こんな中途半端な質問で・・・。

370 :デフォルトの名無しさん:2006/12/23(土) 15:27:46
>>369
vista→torbo delpji for net
vista以外→torbo delphi
とturbo使ってない俺が逝ってみる

266 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)