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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/09/13(火) 14:40:39
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

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

<雑談・討論などはこちらへ>
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その25
http://pc8.2ch.net/test/read.cgi/tech/1125304359/

<その他>
Borland Home Page
http://www.borland.co.jp/
DelWiki (無料版Delphiの入手方法など)
http://onigiri.s3.xrea.com:8080/delphi/
0052デフォルトの名無しさん2005/09/15(木) 03:20:02
>>51
アンチなんていないことをいってることくらい分かってくれ。
0053デフォルトの名無しさん2005/09/15(木) 03:23:08
>>52
うるさい黙れ!
0054デフォルトの名無しさん2005/09/15(木) 03:25:31
>>53
うるさい黙れ!
0055デフォルトの名無しさん2005/09/15(木) 07:54:01
うるさい黙る!
0056デフォルトの名無しさん2005/09/15(木) 08:21:07
インライン
0057デフォルトの名無しさん2005/09/16(金) 17:07:30
フォームのOnCreate内である条件を満たしたらアプリを終了したいのですが
CloseメソッドやSendMessageでWM_Closeを送っても一瞬画面が表示されてしまいます。

ズバッと終了させる方法ってないですか?
0058デフォルトの名無しさん2005/09/16(金) 17:20:48
フォーム作る前にプロジェクトファイル内で判断する
0059デフォルトの名無しさん2005/09/16(金) 17:27:12
次案としてはhalt手続きを使う
0060カラス2005/09/16(金) 17:46:30
お久しぶりです
0061デフォルトの名無しさん2005/09/16(金) 18:17:57
Application.ShowMainForm
0062デフォルトの名無しさん2005/09/17(土) 12:38:26
Delphi6 Personalです。

あるRadioButtonCheckedプロパティがFalseのときに、
あるコンポーネントのEnabledプロパティをFalseにするようにするには、
どうすればよいですか?

○←False
 ・−−−−− ←ここを無効にしたい
 ・−−−−− ←ここを無効にしたい

●←True
 ・−−−−−
 ・−−−−−

0063デフォルトの名無しさん2005/09/17(土) 12:59:32
ラジオボタンのOnChangeでCheckedを判定すればいい話じゃないの?
0064デフォルトの名無しさん2005/09/17(土) 13:04:13
あーごめんCheckBoxと勘違いしてた
onClickかな
0065デフォルトの名無しさん2005/09/17(土) 13:04:32
オブジェクトインスペクタを見ても、OnChangeイベントがないんです。
勉強不足ですみません。

「ラジオボタン Onchange Delphi」などでググってもなかなか見つからないので
困っています。
0066デフォルトの名無しさん2005/09/17(土) 13:05:33
あ、ごめんなさい。リロードしてませんでした。
OnClickでいけました。
0067622005/09/17(土) 13:26:52
すいません、もうひとつだけ。

あるラジオボタンにチェックが入っているときに、複数のコンポーネントを
Enabled に切り替えるプロシージャを作ろうと思っています。

この、複数のコンポーネントのプロパティを一度に変更するにはどうすればよいですか?
いま、

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
Label1.Enabled := True;
Label2.Enabled := True;
Edit1.Enabled := True;
Edit2.Enabled := True;
end;

のように書いて動いてますが、数が多くなると大変です。よりスマートに書く方法はありますか?
0068デフォルトの名無しさん2005/09/17(土) 13:33:49
名前に統一性を持たせてFor文でループ
FindComponentで探したら行けないかな?
0069デフォルトの名無しさん2005/09/17(土) 14:00:08
こんな感じ?

for i:= 0 to ComponentCount - 1 do
begin
if Components[i] is TLabel then
(Components[i] as TLabel).Enabled:= True;
end;
0070デフォルトの名無しさん2005/09/17(土) 14:25:23
もしくはTListにでも突っ込んどいてTComponent(TList[i]).Enabled := True
0071デフォルトの名無しさん2005/09/17(土) 14:36:54
procedure TForm1.CheckBox1Click(Sender: TObject);
var
i : integer;
begin
if TCheckBox(sender).Checked = true then
begin
for i:=1 to 100 do
begin
try
TButton(FindComponent('Button'+IntToStr(i))).Enabled := false;
except
break;
end;
end;
end else begin
for i:= 1 to 100 do
begin
try
TButton(FindComponent('Button'+IntToStr(i))).Enabled := true;
except
break;
end;
end;
end;
end;
美しくないねごめん。
0072デフォルトの名無しさん2005/09/17(土) 14:44:52
>>71
無駄杉
その記述なら当てはめる値は変数にする方がスマート

var
Value: Boolean;
begin
Value:= not (Sender as TCheckBox).Checked;
TButton(…).Enabled:= Value;
end;
0073622005/09/17(土) 15:26:57
みなさんほんとありがとうございます。(TT)
どれも勉強になりましたが、ひとまず

>>69のような感じでうまくいきました。
0074デフォルトの名無しさん2005/09/17(土) 18:05:35
コンポーネントのプロパティにあるFont.Styleを保存する事はできませんか?
また、動的にFontDialogを使う事なくFont.Styleを変える事はできないでしょうか?
0075デフォルトの名無しさん2005/09/17(土) 18:53:17
>>74
単なる集合型なんで保存はそのままファイルにでも書き出せばいいし、
変更は普通に代入出来るよ。

fs.Write(Font.Style, SizeOf(Font.Style));
Font.Style := [fsBold];
0076デフォルトの名無しさん2005/09/17(土) 18:54:21
>>74
ヘルプより

type

  TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut);

  TFontStyles = set of TFontStyle;

要素が最大5つしかない集合型は byte と互換

保存は byte として数値で。復帰は TFontStyles にキャストするだけ。

こんな感じ

var
  fontstyles: byte;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Font.Style := [fsBold, fsUnderline];
  fontstyles := byte(Button1.Font.Style);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Button2.Font.Style := TFontStyles(fontstyles);
end;
0077デフォルトの名無しさん2005/09/17(土) 18:56:18
あ、最大4つだね
0078デフォルトの名無しさん2005/09/17(土) 19:00:48
>>76
わざわざbyteにキャストする意味が判らん。
var
 fontstyles: TFontStyles;
でいいやん。
0079742005/09/17(土) 19:18:53
皆さんありがとうございます
解決しました
0080デフォルトの名無しさん2005/09/17(土) 20:20:45
ところで、Delphiを1から始めるのに一番いい解説サイトはどこですか?
ググったらたくさん出過ぎてどれをみたらいいのかorz..
0081デフォルトの名無しさん2005/09/17(土) 20:37:49
>>80
googleが一番
0082デフォルトの名無しさん2005/09/17(土) 21:52:23
> わざわざbyteにキャストする意味が判らん。

ini とかレジストリとかに保存するとき便利でしょ
0083デフォルトの名無しさん2005/09/17(土) 21:53:36
>>80

Seventh Delphi がオススメです。
0084デフォルトの名無しさん2005/09/17(土) 22:32:17
>>82
うーん。列挙型だと

GetEnumName(TypeInfo(TFontStyle), ord(typ) );

とやれば簡単なんだけどな。 1行で保存となると、そうなるかな
0085デフォルトの名無しさん2005/09/17(土) 23:19:23
Byteにキャストすると一律に扱いやすいって場合もあるからね
やり方知ってるに越したことはない
0086デフォルトの名無しさん2005/09/18(日) 02:14:58
データベースからツリービューを作るときに
データのIDをPointer型にキャストしてぶら下げるのと同じだね
0087デフォルトの名無しさん2005/09/18(日) 06:53:32
>>80
http://onigiri.s3.xrea.com:8080/delphi/index.php?cmd=read&page=%A5%EA%A5%F3%A5%AF%2F%A4%BD%A4%CE%A3%B1#content_1_6
0088802005/09/18(日) 08:35:28
>>83>>87
ありがとうございます。
0089デフォルトの名無しさん2005/09/18(日) 09:03:37
VB,VSなら情報盛りだくさんだよ
0090デフォルトの名無しさん2005/09/18(日) 23:37:52
こんなところで客引きかよ。
0091デフォルトの名無しさん2005/09/19(月) 00:46:12
2005 Personalって日本じゃ使えないの?
0092デフォルトの名無しさん2005/09/19(月) 00:47:49
外国の雑誌を買ってくれば使える
0093Delフサギコ ◆A6VzDeLphI 2005/09/19(月) 21:47:12
  ∧,,∧ ∧,,∧  
 ミ,,゚Д゚ミ,,・д・ミ ニャ-
 ミ ミつ ミ,,,uu,,ミ〜
  ミ   ミ
  ∪''∪  知ってたら教えてください

bsNoneでタイトルバーを消した状態で
自分で、タイトルバー
_______________
|■            [_][□][×] |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
を描きたいんですが
(理由はFormのボーダーを消したいから)

アイコンやバーのグラデーションや3つのボタンを
OSと同等に描画している
コード、誰か持ってたり
どっか乗ってたりしているのしりませんか?

なんか流用できたら楽してかっこいいUIになるかなー
とか、思ったりしてまして。

0094デフォルトの名無しさん2005/09/19(月) 22:08:47
今、簡単なブラウザを作っているんですが、
このブラウザを標準のブラウザに設定するにはどうしたら良いでしょうか?
0095デフォルトの名無しさん2005/09/19(月) 22:23:52
>>94
htmlに関連付けすればいいんじゃない?
0096デフォルトの名無しさん2005/09/20(火) 00:43:14
あと、コマンドラインパラメータも処理しないとね
0097デフォルトの名無しさん2005/09/20(火) 00:47:31
>>93
あっちでフサが紹介してた

http://blog.livedoor.jp/junki560/archives/18042687.html

じゃダメなの? グラデーションは

http://blog.livedoor.jp/junki560/archives/18495762.html

で描く、と。
0098942005/09/20(火) 03:06:14
>>95-96
すいません
質問の仕方が悪かったです

htmlの関連付けをそのアプリケーション上で行いたいのですが、
どうしたら良いでしょう?
0099デフォルトの名無しさん2005/09/20(火) 03:30:04
>>98
"delphi 拡張子 関連付け"でググるとサンプルコードのページがたくさん表示されるわけだが。
自分で調べる気はないですか。そうですか。
0100Delフサギコ ◆A6VzDeLphI 2005/09/20(火) 03:40:09
  ∧,,∧ ∧,,∧  
 ミ,,゚Д゚ミ,,・д・ミ ニャ-
 ミ ミつ ミ,,,uu,,ミ〜
  ミ   ミ
  ∪''∪  ぉぉを!

さんくす>>97さん、

ちょっと明日がんばてみようかな。
0101デフォルトの名無しさん2005/09/20(火) 11:11:27
ある処理中はフォーム右上の×印を使えなくしたいと思い
下のようなコードを書きました。

Self.BorderIcons := Self.BorderIcons - [biSystemMenu];
try
なんたらかんたら〜
finally
Self.BorderIcons := Self.BorderIcons + [biSystemMenu];
end

一応、期待通りの動作はするのですがSelf.BorderIconsの所で
画面がちらつきます。これを防ぐ方法はないのでしょうか?教えてください。
0102デフォルトの名無しさん2005/09/20(火) 12:44:01
procedure TForm1.Button1Click(Sender: TObject);
begin
  EnableMenuItem(GetSystemMenu(Handle,false), SC_CLOSE, MF_BYCOMMAND or MF_DISABLED);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  EnableMenuItem(GetSystemMenu(Handle,false), SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
end;
01031012005/09/20(火) 13:00:44
>>102
あなたに惚れました
0104942005/09/20(火) 17:59:58
>>99
お陰さまで出来ました
ありがとうございます
0105デフォルトの名無しさん2005/09/21(水) 16:20:06
Delphi6 Personalを使っています。
Delphiになれるため、コンポーネントをいろいろ貼り付けて練習しています。
いまDeerPark の設定ダイアログ( ttp://web.drive.ne.jp/1/soko/VIP03217.PNG )
をDelphiで模造してみようと思っているのですが、上のボタンのようなタブは、Win32-TTabControlで
再現できるものなのでしょうか?それとも、自力でこういうコンポーネントを作らないと無理なのでしょうか。


0106デフォルトの名無しさん2005/09/21(水) 16:46:02
>>105
これはXPスタイルなんで、.manifestファイルを同じDirectoryに置くか
リソースでXMLをかくかどっちか
Delphi7なら
C:\Program Files\Borland\Delphi7\Lib\WindowsXP.res
にあるけどD6はなかったと思うので、WindowsXP.resをどっかからもらうか
VC++などについてるリソースエディタで作ってから
{$R WindowsXP.res}とすれば良いと思います。
0107デフォルトの名無しさん2005/09/21(水) 16:50:49
「上のボタンのようなタブ」というのが何を指しているのか今一つ不明だが、
仮にそれが「General」とか書いてあるボタンのことだとしたら、
それは自力で描写する必要があるな
0108デフォルトの名無しさん2005/09/21(水) 17:42:34
>>107
おっしゃる通り、「上のボタンのようなタブ」は General〜 以右のことです。
やはりこれは自力でやるしかないのですね。わかりました。
0109デフォルトの名無しさん2005/09/22(木) 04:21:39
>>101
某のQ&A位嫁馬鹿
http://www.borland.co.jp/qanda/delphi/d0009423.html
0110デフォルトの名無しさん2005/09/22(木) 04:57:54
初めて質問させていただきます。

HlinkNavigateStringを使い、
  HlinkNavigateString(Nil,URL);
このようにしてブラウザにサイトを開かせているんですが、ブラウザを閉じる前に
アプリケーションにウィンドウのフォーカスを戻すと
EStackOverflowクラスの例外が発生してしまいます(ブラウザを閉じた後で発生したことはありません)。

ブラウザを閉じる前にアプリケーションにフォーカスを戻してもエラーが発生しないようにするには
どのようにしたらいいでしょうか?
0111デフォルトの名無しさん2005/09/22(木) 07:19:07
くだすれで他人の Tips への URL をしめして罵倒するのは最低だな
0112デフォルトの名無しさん2005/09/22(木) 07:35:10
>>110
http://www.borland.co.jp/qanda/delphi/d0003105.html
01131102005/09/22(木) 08:03:25
>112
そのページは見ていましたが、ShellExecute関数は試していませんでした。
ShellExecuteにすることで、無事ブラウザから戻ってもエラーが出なくなりました。

有り難うございます。
0114デフォルトの名無しさん2005/09/22(木) 08:12:55
>265
http://bonanzas.rinet.ru/
0115デフォルトの名無しさん2005/09/22(木) 15:16:08
>>114
誤爆?怖いから俺は踏まないでおくが
0116デフォルトの名無しさん2005/09/22(木) 15:22:26
何をしたかったのかは良くわからんが、
とりあえずURLはKOLのサイトのようだが
0117デフォルトの名無しさん2005/09/22(木) 15:22:39
踏んじゃった。
KOL(Key Objects Library)のサイトなのかな?
01181142005/09/22(木) 15:42:26
すみません間違えました。
ちなみに小さなexeを作りたいというのへのレスです。
0119デフォルトの名無しさん2005/09/22(木) 18:45:39
>111
俺もそう思うけど
せめてBorlandのQ&A位は読んでから質問して欲しいよな。
いくらくだすれでもあまりにも幼稚な質問をするのは良くないと思う。
0120デフォルトの名無しさん2005/09/22(木) 19:28:05
> せめてBorlandのQ&A位は読んでから質問して欲しいよな

せめてヘルプぐらい嫁、とか、MLの過去ログ嫁とか、どんどん拡大していくな、それだと。
くだすれに前提を求めるなよ。だからくだすれなんだから。

っていうか、BorlandのQ&A ってそんなにメジャーかなぁ・・・
0121デフォルトの名無しさん2005/09/22(木) 19:34:38
ヘルプよりメジャーってことはないだろ
0122デフォルトの名無しさん2005/09/22(木) 19:35:40
うーん。そう言えないところが辛いね。 最近の日本語ヘルプは
0123デフォルトの名無しさん2005/09/22(木) 23:47:39
>>120
くだすれでそういう議論は不要
上級スレかフサスレでやってくれ
0124デフォルトの名無しさん2005/09/23(金) 00:39:57
>>123

>>119 に言ってやれ
0125デフォルトの名無しさん2005/09/23(金) 00:44:17
うざ
0126デフォルトの名無しさん2005/09/23(金) 00:49:33
俺は出来るだけ答える。というのは恥ずかしながら俺もDelphi始めた頃
ニフティで同じようなことをしたから。ヘルプを見れば分かることなのに
探し方が下手だったり、思いこみで見つけ損ねたりしてたから。

時間がないときはほっておくけど。んで次回見たときに誰も答えてなければ
答える。そうしないと過去、俺に教えてくれた人が同じことしてくれたんだから
申し訳ない。
0127デフォルトの名無しさん2005/09/23(金) 00:49:56
うざ
0128デフォルトの名無しさん2005/09/23(金) 00:50:31
ぎょうざ
0129デフォルトの名無しさん2005/09/23(金) 01:02:16
でも、さすがに「ActionManagerがありません」は勘弁してほしい
0130デフォルトの名無しさん2005/09/23(金) 01:06:59
時間と心に余裕がない人は回答しない方がいいと思うんだけれど。
みんな最初は初心者だったでしょ?
0131デフォルトの名無しさん2005/09/23(金) 01:08:27
うざ
0132デフォルトの名無しさん2005/09/23(金) 01:18:49
>>130
「みんな最初は初心者」

↑これみると頭に来る。生ぬるいこと言ってんじゃねぇよハゲが。
ゆとり教育か?あん?100万回ヘルプ読んでこい。全部書いてある。
0133デフォルトの名無しさん2005/09/23(金) 01:23:58
質問には答える気はないくせに、煽りには確実に応答するんだな。
0134デフォルトの名無しさん2005/09/23(金) 01:25:09
みんな最初は初心者
みんな最初は初心者
みんな最初は初心者
みんな最初は初心者
みんな最初は初心者
みんな最初は初心者

どうぉ?
0135デフォルトの名無しさん2005/09/23(金) 01:27:55
初心者だって自覚があるなら最低限自分で調べるわな
0136デフォルトの名無しさん2005/09/23(金) 02:09:02
自分で調べられるくらいならこんなところで質問しないわな
0137デフォルトの名無しさん2005/09/23(金) 02:21:29
大昔MSXでGAMEを作っていた。そのころ論理計算式をつかうことで
IFよりも早く動かしていた記憶があって、ぐぐってるんですが
なかなか昔使っていたような論理計算式が出てきません。
ビット計算?ANDとかNOTを使っていたような?うまいことどんぴっしゃ!というような
が出てきません。

ヒントをもらえませんか?
0138デフォルトの名無しさん2005/09/23(金) 02:27:58
X=(KEY=1)-(KEY=2)
こういうのじゃないのか。
0139Delフサギコ ◆A6VzDeLphI 2005/09/23(金) 02:29:16
    ∧,,∧ ∧,,∧  
   ミ,,゚Д゚ミ,,・д・ミ ニャ-
   ミ ミつ ミ,,,uu,,ミ〜
    ミ   ミ
    ∪''∪

>>120、>>126、>>130
激しく同意。

生ぬるいとか言ってるヤツ
2chくだすれの意味わかってんのか
MLに帰れゴルァ

とか言ってみたけど、
眠いから寝て土日は心を落ち着かせて
平和にいこー!
0140デフォルトの名無しさん2005/09/23(金) 02:50:14
>>138
あああ!ありがとうございます。その手のたぐいのTIPを
いくつか使用していたはずなんです。ごく当たり前に。
そういうTIPと「何故そうなのか」が集まったサイトないか探しています。
ベーマガやMSXファンなどの投稿雑誌でMSXのプログラムがあったころに本をとっておけばよかった。
そうやって昔は先輩たちのショートプログラムから覚えていったんだから。
当方、Delphiを始めたばかりの元MSXユーザーですわ。
0141デフォルトの名無しさん2005/09/23(金) 12:09:44
>>137
Delphi言語は非常に型にうるさい。
また演算子の機能はオペランドの型によって変わってくるので
C言語風のやり方はあまりおすすめできない。


なおDelは順序型(整数型、論理型、部分範囲型他)だったら
何でも配列の添字に出来るので、こんな事が出来る。

//上と下の関数は等価。でも速度は下の方が速い。

function BoolToStrA(value:Boolean):String;
begin
  if value=True then
  begin
    Result := 'True';
  end
  else
  begin
    Result := 'False';
  end;
end;

function BoolToStrB(value:Boolean):String;
const
  BOOLSTRINGS:array[boolean] of String = ('False','True');
begin
  Result := BOOLSTRINGS[value];
end;

理論的には、配列の型を関数ポインタにすれば
if文を使わずに処理を切り替えることも可能。
0142デフォルトの名無しさん2005/09/23(金) 12:16:24
>>129
BCB6のクイックスタートはそこキチンと直ってるのにねぇ
0143デフォルトの名無しさん2005/09/24(土) 12:32:41
 起動したアプリの存在するフォルダーを求めるとき
 ExtractFilePath(Application.ExeName);
 ExtractFilePath(ParamStr[0]);
などとやると思いますが、この TApplication.ExeName や ParamStr[0]は
 D:\MyTools\Hoge.exeをD:\MYTOOLS\HOGE.EXE
と大文字化して返してしまいます。元のファイル名のまま得る方法はないでしょうか?
0144デフォルトの名無しさん2005/09/24(土) 12:50:22
Windows自体大文字小文字を区別しないんだから意味ないような・・・
0145デフォルトの名無しさん2005/09/24(土) 13:13:42
答えではなくてスマソだけど、ウチでは大文字化されずに元のファイル名のまま返るんだが。。。
環境は以下の通り。
 WinXP + Del5Pro, Del6Personal
 ファイルシステムは共にNTFS
ファイルシステムの関係?
0146デフォルトの名無しさん2005/09/24(土) 13:17:35
起動時に大文字で渡してるんだろ。
0147デフォルトの名無しさん2005/09/24(土) 13:38:54
UpperCaseがどっかに入ってるんじゃないの
0148デフォルトの名無しさん2005/09/24(土) 13:40:12
ネーヨ
0149デフォルトの名無しさん2005/09/24(土) 13:42:52
元々が大文字なんだろ

はい、次の方どうぞ
0150アーツ勝ってばんざい!2005/09/24(土) 14:33:49
>>141
サンプルをつけた詳しいレスありがとうございます。遅くなってすいません
修学中ですが、上のサンプルリストは理解できましたが(当たり前の事ながら)
下の方が浅学のため、うっすらとしか分かりませんでしたが、もうちょっと
勉強してきます。配列に入れて摂取を番目にて得るということなんすね?
何故か、MIDを利用して文字を切り抜いたことをやってたなーとか
思い出しました。関係ないか。
ありがとうございます。
0151デフォルトの名無しさん2005/09/24(土) 15:03:14
ビギンビギンうるせえよ
■ このスレッドは過去ログ倉庫に格納されています