トップページ⇒tech
1001コメント297KB

くだすれDelphi(超初心者向け) Part2

■ このスレッドは過去ログ倉庫に格納されています
0001毛の生えたフサギコNGNG
このスレッドは、

他のスレッドでは書き込めない超低レベル、もしくは質問者自身何が何だが
分からない質問を勇気を持って書き込むスレッドです。

Delhi使いが優しくコメントを返しますが、お礼はDelhiの布教と初心者の
救済をお願いします。
0153デフォルトの名無しさんNGNG
すいません。
DELPHIでVCLのソースコードを
ステップ実行することはできるのでしょうか?
0154デフォルトの名無しさんNGNG
外部エディタ使えないの?
0155デフォルトの名無しさんNGNG
>>152
XPスタイルに対応したコンポーネントを使うしかない
0156デフォルトの名無しさんNGNG
>>155
返答ありがとうございます
0157デフォルトの名無しさんNGNG
>>151
テンキューベリーマッチョ
0158デフォルトの名無しさんNGNG
>>144

procedure TForm1.FormCreate(Sender: TObject);
var
 F: TextFile;
begin
 AssignFile(F, 'c:\hello.txt');
 Rewrite(F);
 Writeln(F, 'world');
 CloseFile(F);
end;
0159デフォルトの名無しさんNGNG
ソースでDLLの宣言してるんだがUnitで使う時はまたUnitごとに書かないといけないのかの?
0160デフォルトの名無しさんNGNG
>>159
書きたくなければ external 宣言した ユニットのinterface節で公開すればいい
0161デフォルトの名無しさんNGNG
>>135
定番ではないし、最近全くメンテしていないけどこんなんでよければドゾー
http://www.mars.dti.ne.jp/~b-guild/mailnews.html
0162デフォルトの名無しさんNGNG
メモリ使用量5000Kを切れる兵はいないの?
0163デフォルトの名無しさんNGNG
D6パーソナル
経験2ヶ月弱です。

--------{unit1.pas}
procedure TForm1.Button1Click(Sender: TObject);
begin
TForm2.Create(self);
end;
--------{unit2.pas}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage('Form2を閉じます') ;
Action:=caFree;
end;
---------
Form2を表示させた状態でForm1(プログラム)
を終了させた場合に、Form2が表示されていることを
チェックして、表示していた場合 Form2の OnClose イベントを
実行させるためにはどうすればいいのでしょうか?
またForm2を表示させたままForm1(プログラム)を終了させた場合ちゃんとFREE
しているのでしょうか?
0164デフォルトの名無しさんNGNG
>>163
TForm2を変数に入れた良いと思うが一応これで。
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  I: Integer;
begin
  I:=0;
  while I<ComponentCount do
  begin
    if Components[I] is TForm2 then
    begin
      if TForm(Components[I]).Visible then
        TForm(Components[I]).Close;
    end;
    Inc(I);
  end;
end;

> またForm2を表示させたままForm1(プログラム)を終了させた場合ちゃんとFREEしているのでしょうか?
Freeされます。
0165163NGNG
ありがとうございました。
0166デフォルトの名無しさんNGNG
>>133
>>149
>>161
親切な御仁、ありがとうございました
0167デフォルトの名無しさんNGNG
2ch なんだからお礼はいらんよ。お礼でスレッドが埋まるのはデメリット
きちがいの妄言は無視無視。
0168デフォルトの名無しさんNGNG
>>167
すばらしいお言葉ありがとうございました。
0169デフォルトの名無しさんNGNG
>>167
貴方のレスのおかげでスレが3レス分無駄になりました。
0170デフォルトの名無しさんNGNG
>>169
貴方がレスしなければ2レス分ですんだのにね。
0171デフォルトの名無しさんNGNG
>>160
ありが�d
0172デフォルトの名無しさんNGNG
>>167
ご指摘ありがとうございますた。
0173デフォルトの名無しさんNGNG
>>152
http://www.delphi-gems.com/
0174デフォルトの名無しさんNGNG
TEditで、数値を入力すれば自動的に
「\1,000」と表示されるようにするにはどうすれば良いですか?

今は別に変数(value)を用意して
OnKeyDownで

value := 数字抽出関数(TEdit(sender).text);
TEdit(sender).text := formatfloat('\#,##0',Value);

とやっているのですがカーソルが左に移動してしまい、1,2,3と入力したら
「321」と表示されてしまいます。

宜しくお願いします。
0175デフォルトの名無しさんNGNG
突然失礼します。質問なんですがネットゲームでみんなが「マクロ」って言ってるんですが、それはなんですかー?
0176デフォルトの名無しさんNGNG
みてね♪
http://s-rf9.free-city.net/page003.html
0177デフォルトの名無しさんNGNG
>>174
TEditを上位クラスに設定して、カスタムコンポーネントを作ればいい
そんなに難しくはないよ
0178174NGNG
>>177
レス、ありがとうございます。
それしかないですか?(^^;
0179デフォルトの名無しさんNGNG
>>178
そういわずにやってみ
思ったより簡単だぞ
0180デフォルトの名無しさんNGNG
>> 174
TMaskEdit を使ってみるのはどうかな?と。
0181デフォルトの名無しさんNGNG
呼び出したDLLの中で呼び出し元のアプリをクローズはできるんですが、
クローズ後のDLL内の処理で、呼び出し元のファイルを書き換えようとしても出来ません。
DLL内での処理が終わり、アプリに戻った時点でクローズされてるって事ですか?
だからファイルを掴んだままなのでしょうか?
0182174NGNG
>>179
コンポーネントはいくつか作った事があるのですが、
何かと面倒なんです。
(プロジェクトメンバー全員にインストールしてもらう必要があるとか)

>>180
TMaskEditの使い方を調べてみたのですが、
どうやれば>>174が出来るのか分かりませんでした。
0183デフォルトの名無しさんNGNG
あぁ >>174 では、「数値を入力」でおそらく「数値で出力」を想定しているのか。
数値と文字列の相互変換は省略。

TMaskEdit の EditMask プロパティを '\\9,999;0; ' に。
これで text プロパティに文字列 '1234' を書き込むと \1,234 と表示される。
編集後の値は同じく text プロパティを読めば、\ と , が取り除かれた文字列として
手に入る。
\ や , が入った、表示されているものと同じ文字列は EditText プロパティで。

0184デフォルトの名無しさんNGNG
>>181
Windows のバージョンで動作が変わるので気をつけて。

>呼び出したDLLの中で呼び出し元のアプリをクローズはできるんですが、
どうやって「クローズ」してるのかな?

アプリケーションとそれが自動的に読み込む DLL の羅列は WIndows のローダーが管理していますから
勝手に開放(クローズ)できません。排他読み込みをおこなっているはずなので
削除は不可能。
0185デフォルトの名無しさんNGNG
>>184
レスありがとうございます。諦めます。
0186デフォルトの名無しさんNGNG
開いているファイルハンドルを強制開放する API があったような気がするが。
シャットダウンとかの時に使うものだからあまりお勧めはしない。
MSDN を漁ってみること。
0187174NGNG
>>183
丁寧な説明ありがとうございます。

試してみたのですが、この方法だと入力する前に

\_,___

と表示されてしまいます。
これを消す事は出来ますか?
0188デフォルトの名無しさんNGNG
今日delphi7を買ってきました。
2ch回覧ツールとかを1から作れるようになるような
それぐらいの実力がつくお勧めのインターネット教えてください。
プログラムはやったこと無いですがやる気はあります。
0189デフォルトの名無しさんNGNG
まずはOpenJaneのソースでも解析する事だな。
0190デフォルトの名無しさんNGNG
ネタか知らんけどインターネットの使い方間違ってるよ
とりあえず>>4の初心者向けのサイトでもまわっておいで
0191デフォルトの名無しさんNGNG
>>188
いきなりJane読むのはしんどいかもしれないから
簡単なカレンダーとかメモ帳とかメールチェッカーを
練習として作ってから挑戦したら?
0192デフォルトの名無しさんNGNG
嫌です
0193デフォルトの名無しさんNGNG
188≠192
0194デフォルトの名無しさんNGNG
ありがとうございます。
さっそく190さんのところで時計が作れました。
OPENJaneっていうソースを見てみたのですが、
ファイルがいっぱいあってこれがコンポーネントという物だと思いますが。
0195デフォルトの名無しさんNGNG
もっと良いインターネットを教えてください。
0196デフォルトの名無しさんNGNG
これから
インターネット≒ホームページ
となりました。
0197デフォルトの名無しさんNGNG
ここは酷いインターネットですね
0198デフォルトの名無しさんNGNG
ホームページ⊂インターネット
0199デフォルトの名無しさんNGNG
♀ホームページ⊂♂インターネット
0200デフォルトの名無しさんNGNG
インターネットやってます
0201遅レスNGNG
(´-`)。o ○ (「面倒なこと」がイヤなら、プログラミングなんてや(略))
0202デフォルトの名無しさんNGNG
楽をする事を考えないプログラマーは糞です
手を抜くことを考えるプログラマはそれ以上に糞。
0203デフォルトの名無しさんNGNG
インターネットを配布したいのでうpろだ教えてください
0204デフォルトの名無しさんNGNG
オブジェクトインスペクタで設定するのと、
自分でユニットファイルに書き込むのとではどちらがいいのでしょうか?
0205sevenNGNG
>>204
どちらかが良い場合もそれぞれあるので、どちらでも可能になってるのでしょう。
D6からは、TFORMがテキストなので、テキスト保存の問題も、ほぼなくなりました。
まぁ、オブジェクトインスペクタ無しにDelphiは語れないかもです。
0206デフォルトの名無しさんNGNG
>>202
「楽をする事」の定義をちゃんとしないと揉める元だぞ。
0207デフォルトの名無しさんNGNG
>>204
自分だけで作る場合は、オブジェクトインスペクタで楽していいと思います。
共同開発の場合は、仕様書にオブジェクトインスペクタの値を書いておくことになるでしょう。

ユニットに直に書くのは、明示的にプロパティを書いておきたい、などの理由がない限りしなくていいと思います。
0208デフォルトの名無しさんNGNG
try〜except間でテキストデータを大量に外部から読み込んで、StrToIntなどで
型を変換してから変数に格納しています。このとき、もし誤った値(型変換できない)が入ってきたら
判別できるようにしたいのですが、try節でミスが発生したというのはわかっても
どこで発生したか?というのがわかりません・・・。上手い方法はありませんか?
0209デフォルトの名無しさんNGNG
exceptでエラー文字列を取れるんじゃあないかい?

それらが同じ種類のエラー文字列なら、今何処理中、みたいなのをStringに保持しとけ。
0210デフォルトの名無しさんNGNG
>>209
tryって例外があったら中断されるんですよね?
それなら、頭から順に今何を読んでいるのかを保持するようにしてみます。サンクス!
0211デフォルトの名無しさんNGNG
そうだね。StrToIntを直接使わずに

function MyStrToText(const FldName:string ; str:string):Integer;
begin
try
Result:=StrToInt(str);
except
 on E:Exception; で FldNameと組み合わせたメッセージを追加して例外をもう一度投げる
end;
end;

ってやればいいと思うよ
0212デフォルトの名無しさんNGNG
おぉデキタ! (゚∀゚) アリガトー!
0213デフォルトの名無しさんNGNG
>>208
try節をネストすれば良いだけの事

SL := TStringList.Create;
try
try
SL.LoadFromFile('D:\DATAFILE.DAT');

for I:=0 to SL.Count -1 do
begin
try
ConvertValue( StrToInt(SL[I]) );
except
PutError('変換エラー:'+IntToStr(I)+'行');
end;
end;
except;
PutError('致命的エラー発生');
end;

finally
SL.Free;
end;
0214やりなおしNGNG
SL := TStringList.Create;
try
try
SL.LoadFromFile('D:\DATAFILE.DAT');

for I:=0 to SL.Count -1 do
begin
try
SetValue( StrToInt(SL[I]) );
except
PutError(IntToStr(I)+'行は変換できませんでした');
end;
end;
except;
PutError('致命的エラー発生');
end;

finally
SL.Free;
end;
0215デフォルトの名無しさんNGNG
>>214
なるほど、そういう手も・・・(つД`)アリガト
0216デフォルトの名無しさんNGNG
アプリを起動してからFormのAlphaBlendを
変更すると画面がちらついてしまうのですが
これをちらつかせない方法などありましたら教えてください。
0217デフォルトの名無しさんNGNG
アルファブレンドがかかってると、両方が描画するわけで、
それをアプリ側で制御するのは無理
0218デフォルトの名無しさんNGNG
どういう事情で何処が悪いのか解からないけど、たまにファイルが壊れているのは何故?
極簡単な動作実験用とか作った時でもなる時あって、
バグ取り中に何度もコンパイルとかしてると急に今まで通り動かなくなり、
コードをコピペして全く同じ内容で新たに作るとまともに動作する。
さっき出た症状ではApplication.Handleを参照しても常に0ってのになった。

Delphiから実行時にアプリ終了してもCPU画面が出てもう一度実行ボタンを
押さないと終了しないのもどこかおかしいんだろうか?
0219デフォルトの名無しさんNGNG
>>218
OS から入れ直せ。
0220デフォルトの名無しさんNGNG
>>218
Win98?
OS と Delphi のバージョン名くらいは教えてください。
0221デフォルトの名無しさんNGNG
>>216
使っているマシンの CPU の種類とクロック速度、
使っているビデオカードの名前。

ビデオカードの種類とドライバのバージョンによっては、ソフトウェア描画に
なるから、とっても遅くなるぞ。
0222デフォルトの名無しさんNGNG
>>220
w2k sp3
D5のupdate済み

いま、既にあるアプリでApplication.Handle取得のテストしてみたら、0だった・・・
0223デフォルトの名無しさんNGNG
メモリーアドレスを参照するにはどうしたらいいです?
0224デフォルトの名無しさんNGNG
ちなみにCPU画面はファイルの保存場所を変えて実行すると出なかったりする。
なんでだろ〜なんでだろ〜♪
0225デフォルトの名無しさんNGNG
>>219
del居れ直しならまだしもOSからはつらいな。
今のような快適設定にレジストリ変更する自身が無い。
0226216NGNG
>>217
レスありがとです。そうですか…。残念。
実はAlphaBlendとループと使ってフォームを
徐々に表示or隠すということをしたかったのですが、
徐々に表示なら
AnimateWindow (Form.Handle, 2000, AW_BLEND);
で出来ますが、徐々に隠す方法はどうやったら出来るのでしょうか?
http://www.kumei.ne.jp/c_lang/sdk4/sdk_348.htm
ここで見る限りAnimateWindowでは出来そうもないです。。
0227デフォルトの名無しさんNGNG
AnimateWindow(Handle, 2000, AW_BLEND or AW_HIDE);
Hide;
でできないか?
0228227NGNG
ごめん。いっしょに使うなって書いてるな。
0229デフォルトの名無しさんNGNG
猫には書いてるけど、MSDNには書いてないような…
0230デフォルトの名無しさんNGNG
>>224
Delphi5 だから。という話かなぁ。
CPU ウィンドウが開かなくなる。ってのは聞いたこと無いし
0231デフォルトの名無しさんNGNG
>>223

 (PByte($12345678)) := $12;
 (Pword($12345678)) := $1234;

てな感じでどうかな?他にもいろいろやり方あり。


0232218NGNG
Application.Handle0になる発生条件がちょっとだけわかった。
オプションで「実行時パッケージを使って構築」
をチェックすると0になるアプリがあるみたいだ。

ただ、テスト用に簡単に作った奴はその限りではない・・・つらい・・・。・゚・(ノД`)・゚・。
0233デフォルトの名無しさんNGNG
>>230
開かなくなるのではなくて開いてしまうんだよ
0234デフォルトの名無しさんNGNG
>>232
うーん。みてみたいよ。あんたの環境。
・*.bpl が変なディレクトリに落ちている
・日本語を含むパス名を常用している。
どちらか、心当たりないかな?
0235デフォルトの名無しさんNGNG
ちょっと「くだすれ」っぽくなくなってきてしまったが、どうしましょ。
0236デフォルトの名無しさんNGNG
>>226
猫が間違ってるっぽい。
「AW_HIDEとは併用できません。」は、AW_ACTIVATEの説明に入るはず。
0237デフォルトの名無しさんNGNG
>Delphiから実行時にアプリ終了してもCPU画面が出てもう一度実行ボタンを
>押さないと終了しない

これかぁ。勝手に出る CPU 画面、どこで止まっています?
画像写真、どこかうpろだに置けませんかね?
0238デフォルトの名無しさんNGNG
>>226, 236
実際にやってみるよろし。
0239236NGNG
>>238
いや、やってみてちゃんとフェードアウトしたけど、
駄目って書かれてるから、ちょっと気になったもんで。
0240デフォルトの名無しさんNGNG
>>234
どちらも普通みたいです。こうなったら仕方ないので
別のHDDに非常用OS入ってるので、まっさらなdelphi入れて試します。
また報告します。
0241デフォルトの名無しさんNGNG
猫より MSDN
MSDN より実際の動き
0242デフォルトの名無しさんNGNG
そういえばインストールの時にSQLとかINTERBASEとかはなんなんでしょう?
0243デフォルトの名無しさんNGNG
>240
うむ。もったいない。
バグが出ている環境は貴重なんで、できれば原因をつかみたかったが。
再インストールで問題が出なくなることを祈ります
0244デフォルトの名無しさんNGNG
>>242
データベースって言葉知ってる?
0245デフォルトの名無しさんNGNG
実際の動きよりMSDN
0246デフォルトの名無しさんNGNG
>>245
それに何年裏切られつづけてきたか....
0247デフォルトの名無しさんNGNG
へー
0248デフォルトの名無しさんNGNG
>>244
言葉自体は知っていますがプログラムでどのような働きをするのかは知りません。さっさと教えなさい。
0249デフォルトの名無しさんNGNG
>>218
 とりあえず、
今あるDelphiのフォルダをリネームしておいてDelphiを再インストールして比べてみろ

それから
--------- ここから -------
del *.tds
del *.~*
del *.dsk
del *.dof
del *.dsm
del *.dcu
----------- ここまで -------
をバッチファイルにして、あちこちのプロジェクトの不要ファイルを消して回れ
0250デフォルトの名無しさんNGNG
>>237
晒しました。
http://www7.big.or.jp/~mb2/bbs/up/kao/source/up3264.jpg

>>243
再インストではないですよ。予備のOSに入れるのです。
0251デフォルトの名無しさんNGNG
う。
その画面の状態で、F7 押して。
ret の次に DebugBreak を呼び出しているモジュールの位置がわかる。
そこが鍵だ!
0252216NGNG
>>227
>>236
>>238
ほんとだ…
AnimateWindow(Handle, 2000, AW_HIDE or AW_BLEND);
hide;
上のコードでちゃんとフェードアウトする。。
何事も実際やってみないとだめっすねえ、、
ありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています