3 :
デフォルトの名無しさん :2005/09/13(火) 14:58:11
VCのように4kbyte未満でバイナリを生成することは可能ですか? 8kbyte程度になることは知っています。
>>1 お疲れ様でした.
よくみると私が改変したテンプレ,25スレのhを抜き忘れてました(笑).
まあなんだ。 PCのスッペクが高い今 コンパイラの最適化の差を語るよりもコードの保守性のよさやらバグがないことを目指してがんばろうと、、
前スレ、埋め完了しますた。 さて。CreateProcessで外のexeを呼び出したいんですが、 2番目の引数(exeへのパス)へ変数を指定するのはどうやればいいんでしょうか? 利用環境によってexeの場所が違うので。 StringとPCherに互換性が無く、変換すればいいというところまでは分かったんですが…
>StringとPCherに互換性が無く、変換すればいいというところまでは分かったんですが… だから変換すればいいんぢゃないの?
PCher(StringValue)
>>8 「どうやって」の部分が分からなかったんです…orz
>>9 あ、そうすれば良かったんですね。ありがとうございました。
パスは""で括っとけよ
PCherじゃなくてPCharね、分かってるみたいだからいいんだけど
ShellTreeViewでマイコンピュータを開くとFDDの中身を確認しているようなのですが、 この動作をなくすにはどうすれば良いでしょうか?
F D D を 窓 か ら 投 げ 捨 て ろ 正しい回答は↓で
↓次でボケて!
VBが世界を制するよ
ビルゲイツの勝利
ゲイツが氏んでwinが無くなって糞APIがこの世から消えればいいのに
まともなAPIって例えば何がありますか?
MessageBoxは神
TextOut
DrawEdge
> コンパイラの最適化の差を語るよりもコードの保守性のよさやらバグがないことを目指してがんばろうと、、 [コンパイラの最適化の差] と [コードの保守性のよさやらバグがないこと] とは、なんら関係なし それとも最適化最低でバグだらけのD2005のことを言ってる?
( ´∀`)σ),゚Д゚彡プニュ
まぁ、あれだな、Del厨って現実逃避ぎみだな。
>>6 やら
>>14-22 の糞レスはほっといて、ちょっとアンチっぽい書きこみがあると
途端にネタスレ誘導。もう心の余裕もなにもないんだな・・・あわれ
負け組ですから
常に他言語へのコンプレックス抱いてるしな
もうほんとにダメなんですか?
ダメっていうか前スレに必死な奴がいただろ ああいう奴がダメにしている Delphiでカーネル書くって、しかも自称組込みやってる人って来た 痛すぎ 簡単に作るための言語って大体の人は認めてるだろ それで十分
> 簡単に作るための言語って大体の人は認めてるだろ これ認めない。 正確には 簡単に作ることもできる言語、じゃなくて開発環境。 でももうだめそう。最近のバージョンひどすぎ
6しか持ってない。どんな風にダメなのか教えて。
>>32 トライアルDLして起動してみ。あきれるから。さらに使い込むと目もくらむ。
それ以前に一社提供の言語って時点で終ってる
はじめて買ったDelphi3のVCLソースを眺めて感激したのが懐かしいな・・・
逆に一社提供じゃないものなんてあるの?
Delphiしか知らないとこんな事を言ってしまいます
労力払ってるだってw 馬鹿じゃね
労力いらんから消えな
ちょくちょく来るんでよろしく
質問する前に少しは考えろよ
>>32 6なら、そうダメでもないから、そのままでいいんでない?
自分は2005も買ったけど、結局仕事で使ってるのは6
他言語を否定する為に他言語の質問スレにいちいち出張してくるなと。 スレ違い甚だしい。お前らは自分が良いと思う言語と開発環境使ってればいいだろ。 議論したければ専用スレ使え。
デルファイ如きの為に専用スレを汚すわけにはいかない。 スレを伸ばしてやってるんだ、光栄に思え。
>>45 俺はユーザでいってるよ?
上読んでても、前スレの終り見ててもそうだったけど
終りには一匹変なのが紛れ込んでたけど
つーか、「くだすれ」だけで、ちゃんと質問スレってスレタイに 書いて無いから理解できないのかなとも思った。
そこまでアホなのか
>>47 俺がユーザに言ってるんじゃなくてアンチに言ってる事くらい分かってくれ。
>>51 アンチなんていないことをいってることくらい分かってくれ。
うるさい黙る!
インライン
57 :
デフォルトの名無しさん :2005/09/16(金) 17:07:30
フォームのOnCreate内である条件を満たしたらアプリを終了したいのですが CloseメソッドやSendMessageでWM_Closeを送っても一瞬画面が表示されてしまいます。 ズバッと終了させる方法ってないですか?
フォーム作る前にプロジェクトファイル内で判断する
次案としてはhalt手続きを使う
60 :
カラス :2005/09/16(金) 17:46:30
お久しぶりです
Application.ShowMainForm
Delphi6 Personalです。 あるRadioButtonCheckedプロパティがFalseのときに、 あるコンポーネントのEnabledプロパティをFalseにするようにするには、 どうすればよいですか? ○←False ・−−−−− ←ここを無効にしたい ・−−−−− ←ここを無効にしたい ●←True ・−−−−− ・−−−−−
ラジオボタンのOnChangeでCheckedを判定すればいい話じゃないの?
あーごめんCheckBoxと勘違いしてた onClickかな
オブジェクトインスペクタを見ても、OnChangeイベントがないんです。 勉強不足ですみません。 「ラジオボタン Onchange Delphi」などでググってもなかなか見つからないので 困っています。
あ、ごめんなさい。リロードしてませんでした。 OnClickでいけました。
67 :
62 :2005/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; のように書いて動いてますが、数が多くなると大変です。よりスマートに書く方法はありますか?
名前に統一性を持たせてFor文でループ FindComponentで探したら行けないかな?
こんな感じ? for i:= 0 to ComponentCount - 1 do begin if Components[i] is TLabel then (Components[i] as TLabel).Enabled:= True; end;
もしくはTListにでも突っ込んどいてTComponent(TList[i]).Enabled := True
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; 美しくないねごめん。
>>71 無駄杉
その記述なら当てはめる値は変数にする方がスマート
var
Value: Boolean;
begin
Value:= not (Sender as TCheckBox).Checked;
TButton(…).Enabled:= Value;
end;
73 :
62 :2005/09/17(土) 15:26:57
みなさんほんとありがとうございます。(TT)
どれも勉強になりましたが、ひとまず
>>69 のような感じでうまくいきました。
コンポーネントのプロパティにあるFont.Styleを保存する事はできませんか? また、動的にFontDialogを使う事なくFont.Styleを変える事はできないでしょうか?
>>74 単なる集合型なんで保存はそのままファイルにでも書き出せばいいし、
変更は普通に代入出来るよ。
fs.Write(Font.Style, SizeOf(Font.Style));
Font.Style := [fsBold];
>>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;
あ、最大4つだね
>>76 わざわざbyteにキャストする意味が判らん。
var
fontstyles: TFontStyles;
でいいやん。
79 :
74 :2005/09/17(土) 19:18:53
皆さんありがとうございます 解決しました
ところで、Delphiを1から始めるのに一番いい解説サイトはどこですか? ググったらたくさん出過ぎてどれをみたらいいのかorz..
> わざわざbyteにキャストする意味が判らん。 ini とかレジストリとかに保存するとき便利でしょ
>>80 Seventh Delphi がオススメです。
>>82 うーん。列挙型だと
GetEnumName(TypeInfo(TFontStyle), ord(typ) );
とやれば簡単なんだけどな。 1行で保存となると、そうなるかな
Byteにキャストすると一律に扱いやすいって場合もあるからね やり方知ってるに越したことはない
データベースからツリービューを作るときに データのIDをPointer型にキャストしてぶら下げるのと同じだね
88 :
80 :2005/09/18(日) 08:35:28
VB,VSなら情報盛りだくさんだよ
こんなところで客引きかよ。
2005 Personalって日本じゃ使えないの?
外国の雑誌を買ってくれば使える
∧,,∧ ∧,,∧ ミ,,゚Д゚ミ,,・д・ミ ニャ- ミ ミつ ミ,,,uu,,ミ〜 ミ ミ ∪''∪ 知ってたら教えてください bsNoneでタイトルバーを消した状態で 自分で、タイトルバー _______________ |■ [_][□][×] |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ を描きたいんですが (理由はFormのボーダーを消したいから) アイコンやバーのグラデーションや3つのボタンを OSと同等に描画している コード、誰か持ってたり どっか乗ってたりしているのしりませんか? なんか流用できたら楽してかっこいいUIになるかなー とか、思ったりしてまして。
今、簡単なブラウザを作っているんですが、 このブラウザを標準のブラウザに設定するにはどうしたら良いでしょうか?
>>94 htmlに関連付けすればいいんじゃない?
あと、コマンドラインパラメータも処理しないとね
98 :
94 :2005/09/20(火) 03:06:14
>>95-96 すいません
質問の仕方が悪かったです
htmlの関連付けをそのアプリケーション上で行いたいのですが、
どうしたら良いでしょう?
>>98 "delphi 拡張子 関連付け"でググるとサンプルコードのページがたくさん表示されるわけだが。
自分で調べる気はないですか。そうですか。
∧,,∧ ∧,,∧
ミ,,゚Д゚ミ,,・д・ミ ニャ-
ミ ミつ ミ,,,uu,,ミ〜
ミ ミ
∪''∪ ぉぉを!
さんくす
>>97 さん、
ちょっと明日がんばてみようかな。
101 :
デフォルトの名無しさん :2005/09/20(火) 11:11:27
ある処理中はフォーム右上の×印を使えなくしたいと思い 下のようなコードを書きました。 Self.BorderIcons := Self.BorderIcons - [biSystemMenu]; try なんたらかんたら〜 finally Self.BorderIcons := Self.BorderIcons + [biSystemMenu]; end 一応、期待通りの動作はするのですがSelf.BorderIconsの所で 画面がちらつきます。これを防ぐ方法はないのでしょうか?教えてください。
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;
103 :
101 :2005/09/20(火) 13:00:44
104 :
94 :2005/09/20(火) 17:59:58
>>99 お陰さまで出来ました
ありがとうございます
Delphi6 Personalを使っています。
Delphiになれるため、コンポーネントをいろいろ貼り付けて練習しています。
いまDeerPark の設定ダイアログ(
ttp://web.drive.ne.jp/1/soko/VIP03217.PNG )
をDelphiで模造してみようと思っているのですが、上のボタンのようなタブは、Win32-TTabControlで
再現できるものなのでしょうか?それとも、自力でこういうコンポーネントを作らないと無理なのでしょうか。
>>105 これはXPスタイルなんで、.manifestファイルを同じDirectoryに置くか
リソースでXMLをかくかどっちか
Delphi7なら
C:\Program Files\Borland\Delphi7\Lib\WindowsXP.res
にあるけどD6はなかったと思うので、WindowsXP.resをどっかからもらうか
VC++などについてるリソースエディタで作ってから
{$R WindowsXP.res}とすれば良いと思います。
「上のボタンのようなタブ」というのが何を指しているのか今一つ不明だが、 仮にそれが「General」とか書いてあるボタンのことだとしたら、 それは自力で描写する必要があるな
>>107 おっしゃる通り、「上のボタンのようなタブ」は General〜 以右のことです。
やはりこれは自力でやるしかないのですね。わかりました。
初めて質問させていただきます。 HlinkNavigateStringを使い、 HlinkNavigateString(Nil,URL); このようにしてブラウザにサイトを開かせているんですが、ブラウザを閉じる前に アプリケーションにウィンドウのフォーカスを戻すと EStackOverflowクラスの例外が発生してしまいます(ブラウザを閉じた後で発生したことはありません)。 ブラウザを閉じる前にアプリケーションにフォーカスを戻してもエラーが発生しないようにするには どのようにしたらいいでしょうか?
くだすれで他人の Tips への URL をしめして罵倒するのは最低だな
113 :
110 :2005/09/22(木) 08:03:25
>112 そのページは見ていましたが、ShellExecute関数は試していませんでした。 ShellExecuteにすることで、無事ブラウザから戻ってもエラーが出なくなりました。 有り難うございます。
何をしたかったのかは良くわからんが、 とりあえずURLはKOLのサイトのようだが
踏んじゃった。 KOL(Key Objects Library)のサイトなのかな?
118 :
114 :2005/09/22(木) 15:42:26
すみません間違えました。 ちなみに小さなexeを作りたいというのへのレスです。
>111 俺もそう思うけど せめてBorlandのQ&A位は読んでから質問して欲しいよな。 いくらくだすれでもあまりにも幼稚な質問をするのは良くないと思う。
> せめてBorlandのQ&A位は読んでから質問して欲しいよな せめてヘルプぐらい嫁、とか、MLの過去ログ嫁とか、どんどん拡大していくな、それだと。 くだすれに前提を求めるなよ。だからくだすれなんだから。 っていうか、BorlandのQ&A ってそんなにメジャーかなぁ・・・
ヘルプよりメジャーってことはないだろ
うーん。そう言えないところが辛いね。 最近の日本語ヘルプは
>>120 くだすれでそういう議論は不要
上級スレかフサスレでやってくれ
うざ
俺は出来るだけ答える。というのは恥ずかしながら俺もDelphi始めた頃 ニフティで同じようなことをしたから。ヘルプを見れば分かることなのに 探し方が下手だったり、思いこみで見つけ損ねたりしてたから。 時間がないときはほっておくけど。んで次回見たときに誰も答えてなければ 答える。そうしないと過去、俺に教えてくれた人が同じことしてくれたんだから 申し訳ない。
うざ
ぎょうざ
でも、さすがに「ActionManagerがありません」は勘弁してほしい
時間と心に余裕がない人は回答しない方がいいと思うんだけれど。 みんな最初は初心者だったでしょ?
うざ
>>130 「みんな最初は初心者」
↑これみると頭に来る。生ぬるいこと言ってんじゃねぇよハゲが。
ゆとり教育か?あん?100万回ヘルプ読んでこい。全部書いてある。
質問には答える気はないくせに、煽りには確実に応答するんだな。
みんな最初は初心者 みんな最初は初心者 みんな最初は初心者 みんな最初は初心者 みんな最初は初心者 みんな最初は初心者 どうぉ?
初心者だって自覚があるなら最低限自分で調べるわな
自分で調べられるくらいならこんなところで質問しないわな
大昔MSXでGAMEを作っていた。そのころ論理計算式をつかうことで IFよりも早く動かしていた記憶があって、ぐぐってるんですが なかなか昔使っていたような論理計算式が出てきません。 ビット計算?ANDとかNOTを使っていたような?うまいことどんぴっしゃ!というような が出てきません。 ヒントをもらえませんか?
X=(KEY=1)-(KEY=2) こういうのじゃないのか。
∧,,∧ ∧,,∧
ミ,,゚Д゚ミ,,・д・ミ ニャ-
ミ ミつ ミ,,,uu,,ミ〜
ミ ミ
∪''∪
>>120 、
>>126 、
>>130 激しく同意。
生ぬるいとか言ってるヤツ
2chくだすれの意味わかってんのか
MLに帰れゴルァ
とか言ってみたけど、
眠いから寝て土日は心を落ち着かせて
平和にいこー!
>>138 あああ!ありがとうございます。その手のたぐいのTIPを
いくつか使用していたはずなんです。ごく当たり前に。
そういうTIPと「何故そうなのか」が集まったサイトないか探しています。
ベーマガやMSXファンなどの投稿雑誌でMSXのプログラムがあったころに本をとっておけばよかった。
そうやって昔は先輩たちのショートプログラムから覚えていったんだから。
当方、Delphiを始めたばかりの元MSXユーザーですわ。
>>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文を使わずに処理を切り替えることも可能。
>>129 BCB6のクイックスタートはそこキチンと直ってるのにねぇ
143 :
デフォルトの名無しさん :2005/09/24(土) 12:32:41
起動したアプリの存在するフォルダーを求めるとき ExtractFilePath(Application.ExeName); ExtractFilePath(ParamStr[0]); などとやると思いますが、この TApplication.ExeName や ParamStr[0]は D:\MyTools\Hoge.exeをD:\MYTOOLS\HOGE.EXE と大文字化して返してしまいます。元のファイル名のまま得る方法はないでしょうか?
Windows自体大文字小文字を区別しないんだから意味ないような・・・
答えではなくてスマソだけど、ウチでは大文字化されずに元のファイル名のまま返るんだが。。。 環境は以下の通り。 WinXP + Del5Pro, Del6Personal ファイルシステムは共にNTFS ファイルシステムの関係?
起動時に大文字で渡してるんだろ。
UpperCaseがどっかに入ってるんじゃないの
ネーヨ
元々が大文字なんだろ はい、次の方どうぞ
>>141 サンプルをつけた詳しいレスありがとうございます。遅くなってすいません
修学中ですが、上のサンプルリストは理解できましたが(当たり前の事ながら)
下の方が浅学のため、うっすらとしか分かりませんでしたが、もうちょっと
勉強してきます。配列に入れて摂取を番目にて得るということなんすね?
何故か、MIDを利用して文字を切り抜いたことをやってたなーとか
思い出しました。関係ないか。
ありがとうございます。
151 :
デフォルトの名無しさん :2005/09/24(土) 15:03:14
ビギンビギンうるせえよ
ビギン村の村民になんてことを
教科書に書いてある事だけじゃわからない〜♪
154 :
デフォルトの名無しさん :2005/09/24(土) 15:31:30
ヘアカラーかよ
155 :
デフォルトの名無しさん :2005/09/24(土) 16:42:32
特定のフォントに登録されていない文字を別の文字に置き換えたいのですが あるフォント名に指定した文字コードが登録されているかどうかを判断するには どうすればよいのでしょうか
>>143 2000やXPはファイルパスをそのまま返してくれるけど、95や98とかはExtractFilePathを
大文字で返してくるっぽい。
どうもファイルシステムがNTFSかそれ以前かによって違うような気がする。
まあ全部のバージョンのWindowsを試したわけじゃないのでよく分からんが。
ExtractFilePathをファイルが存在するかどうかの判別に使ってるんなら、
返ってきたファイルパスと存在するかどうか判別したいファイルパスを
一度UpperCaseかLowerCaseで大文字か小文字に揃えてから処理すると、
ファイルシステムによるによるファイルパスの扱いの違いを回避してくれるのでお勧め。
157 :
デフォルトの名無しさん :2005/09/24(土) 16:50:08
>>157 そこの人APIのヘルプ(つーかMSDN)を読まないのだろか?
一番単純な部類のAPIなんだから試してみるといいのにね
blog叩きウザい
>>155 難しい事やろうとしてるんだね。
GDIフォントなら、その特定のフォントでビットマップに描画してみて、デフォルト文字になるかどうか
である程度いけそうだけど、プリンタフォントだとそういうわけにいかんしね
>>156 ファイルシステムは関係ありませんよ。
"COMMAND.COM"というファイルがあるとして拡張子を表示する設定にしている場合
NT系のWin上ではFAT/FAT32/NTFSに関係なく"COMMAND.COM"と表示されますが
9x系のWin上ではFAT/FAT32に関係なく"Command.com"と表示されます。
表示が異なるだけで実際のファイル名は"COMMAND.COM"なので
>>143 が元のファイル名のまま得ていないと思い込んでいるだけだと思われます。
(でも
>>143 の方法では9x系Winの場合短いパスになってしまいますけど)
表示されているファイル名を得たい場合や
長いファイル名や短いファイル名や長いパスや短いパスを得たい場合は
Delphi-ML[78013]の方法(手直しは必要です)で良いと思います。
>>156 ExtractFilePathは大文字小文字の操作はしないよ。
文字列を受け取って最後の"\"以降を取った文字列を返すだけだから。
>>162 ExtractFilePathが大文字小文字の操作するかどうかなんて誰も話していないが?
>>163 >2000やXPはファイルパスをそのまま返してくれるけど、95や98とかはExtractFilePathを
>大文字で返してくるっぽい。
>>156 はそのまま返さないで大文字に変換して返すって思っているんじゃないか?
って言うか
>>156 はツッコミ所が多すぎてネタかと思ったよ。
初心者の質問に上級者が答える>全体のレベルが上がる
初心者の質問に初心者が答える>全体のレベルが下がる
>>156 は自分をどう思っているのだろうか。
お前らが答えるとスレ密度が下がる
神だと思っている
殿だと思っている
股だと思っている
170 :
156 :2005/09/25(日) 15:48:14
>>161-169 すみません、自分が知識不足だったようです。
以前、存在するかどうか調べたいパスと、ExtractFilePathで取得したパスをつき合わせて
パスが存在するかどうか判定する関数を作ったんですが、どうも9x系とNT系で動作が違うんで
調べてみたら
>>161 のカキコでおっしゃられてる通り、9x系は大文字、NT系は先頭一文字が
大文字で、後は小文字でした。
それで「この違いはファイルシステムの違いなんだな」と一人合点してしまい、ともかくOSの
バージョンの違いを吸収して正常に動作させるためには、双方のパスの文字列を
大文字か小文字に一度変換してから処理したほうが楽だな、と思って関数を書き直した
経緯があったもので、もしかしたら143もそういう事で悩んでるのかな、と思い、
つい156に
>ExtractFilePathをファイルが存在するかどうかの判別に使ってるんなら、
>返ってきたファイルパスと存在するかどうか判別したいファイルパスを
>一度UpperCaseかLowerCaseで大文字か小文字に揃えてから処理すると、
>ファイルシステムによるによるファイルパスの扱いの違いを回避してくれるのでお勧め。
とカキコしてしまいました。
元々知識不足の上に、聞かれてもない事をカキコする必要は無かった訳で、自分のカキコで
荒れる原因になってしまった事をお詫びします。申し訳ございませんでした。
>>156 パスが存在するかどうか判定するのに大文字小文字は関係無いんじゃないかな?
例えば(試して無いけど)
if DirectoryExists('C:\WiNdOwS') then ShowMessage('あるよ!');
とかでも通ると思う。
いや・・・もっと難しい事がしたいんですよね・・・
156は何がしたかったんだろう?
if foo then a: = 0 else if bar then a := 1 else continue if a = 0 then ... でaが初期化されない可能性とか言われるんだけどどうやって黙らせてる?
初期化すれよw
176 :
デフォルトの名無しさん :2005/09/25(日) 18:32:51
それだけのコードじゃ何とも言いがたいが ・あらかじめaを何らかの値に初期化しておく ・どの条件分岐でもaに値が入るようにする でいいんじゃないか? 黙らせるだけならPCを窓から(ry
177 :
156 :2005/09/25(日) 18:51:17
>>171 いや、あまり難しいことをしてるんじゃないんですが・・・。例えばFormCreateで
//変数にパスを代入
AppPath := ExtractFilePath(Application.Exename);
DataPath := AppPath + 'Data';
SettingPath := AppPath + 'Setting';
//保存用フォルダの作成
Attrs := FileGetAttr(DataPath);
if Attrs and faHidden <> 0 then
CreateDir(DataPath);
:
変数に代入したパスを使ってフォルダを作成し、この時作られたサブフォルダ
\Dataと\Settingより前のフォルダにはセーブダイアログからは保存出来ないような
処理を作りたくて、セーブダイアログ終了以降に実行される関数に、
//注:SFilenameにはセーブダイアログのFilenameが代入されている
//\Dataまたは\Settingより前のフォルダにはセーブしない
if (Pos(DataPath, SFilename) <> 1)
and (Pos(SettingPath, SFilename) <> 1) then
ShowMessage('このフォルダにはセーブ出来ません');
:
というような処理を書いたんですが、これだと仮に正しいサブフォルダ(例えばC:HOGEHOGE\Data)を
セーブ時に選んだとしても、9x系ではセーブダイアログのFilenameは(C:HOGEHOGE\DATA)という
文字列になってるので、まともに動作しないんです。そこで
if (Pos(AnsiUpperCase(DataPath), AnsiUpperCase(SFilename)) <> 1)
and (Pos(AnsiUpperCase(SettingPath), AnsiUpperCase(SFilename)) <> 1) then
ShowMessage('このフォルダにはセーブ出来ません');
みたいな処理に書き直した経緯があったんですが、見返すとパスが存在するかどうかの
判定とは全然関係ないような・・・勘違いしてました。ごめんなさい、もう消えます。
PopupMenuが閉じたとき、に何かしたい時ってどうすんの?OnHideって感じのーみたいな?
日本語、をしゃべってー欲しいみたいな?
180 :
デフォルトの名無しさん :2005/09/26(月) 09:18:47
ユニコードバイトデータを文字列に変更しようと 配列のポインタをWideStringに代入したのですが いくつか表示されない文字があります。 なにが原因でしょうか?
フォントでねーすか?
誰かJPNIC範囲内のIPアドレスをランダムに生成するコード書いて
184 :
180 :2005/09/26(月) 09:44:46
>>181 フォントにそうでしょうか?
そうだとしたら変換する前にフォントを変える必要があるのですか?
187 :
180 :2005/09/26(月) 10:27:56
>>185 よくわかりませんが
下記のコードでバイト配列に入っているデータを
unicodeに変換すると特殊記号などが'?'で表示されてしまいます
var
WsTemp: WideString;
bTempBuff: array of Byte;
begin
WsTemp := PWideChar(@bTempBuff);
end;
>>180 どこへ表示させてるかによる、と思うにゃ
>>187 そこまで書いてなぜ問題になるの文字コードをひとつも書かないのかと
>>186 俺と似たようなコード書くなキモイ氏ね^^^
191 :
186 :2005/09/26(月) 10:34:07
192 :
186 :2005/09/26(月) 10:34:46
>>191 俺はa, b, c, d : Integerがip : array [0..3] of Integerになっただけっぽい。。きもい。。
偏りそうだな case Random(7) of 0: b := 11; 1: b := 13; 2: b := Random(5)+15; 3: b := Random(4)+23; 4: b := Random(4)+32; 5: b := 48; 6: b := Random(48)+208; end;
いずれにせよ偏る
>>194 それだったら
case Random(64) of
0 : b := 11;
1 : b := 13;
2.. 6: b := Random(5)+15;
7..10: b := Random(4)+23;
11..14: b := Random(4)+32;
15 : b := 48;
16..63: b := Random(48)+208;
end;
加奈
大量にやるならRandom文はひとつで済ませられるけど それにしてもIPアドレスをランダムに発生させる用途が怪しいな
JPNICのアドレスってaaa.bbb.ccc.dddのうち dddにあたる部分が0ってアリなの? Random()だと0入るっしょ… 勘違いだったらスマソ
以前Delphiの浮動小数演算のモードが他の言語と異なっているというような話を見かけたんですが Cのint, unsigned long, long, doubleを使ったコードをベタ移植した場合、 演算結果が異なるようなケースがあるのでしょうか? そのあたりについてのポインタがあったら教えてください。
>>199 C(++)のdoubleと同じ8バイトのDouble型の上に
10バイトのExtended型があるというだけのことなので
C(++)⇒Delphiは問題ないかと
long double あるからそれは関係ない気が
少なくともVC++ではlong doubleも64bitぢゃなかったっけ? Extendedは80bit
VCだと8バイトでBCBだと10バイト。元々C/C++はchar以外のビット幅は処理系依存でないっけ。 モードつうぐらいだから丸めモードとかだべか。
//「不正な浮動小数演算命令」が出なくなる cw:=$133f; asm FNCLEX FLDCW cw; end; のこと?
205 :
デフォルトの名無しさん :2005/09/26(月) 19:35:39
Delphi7ってOracle10をサポートしてないみたいなのですが、 接続できるのでしょうか? 購入前なので試すことができません。 だれか繋いでシステム作ってる方はいないでしょうか?
>>205 一応可能。もちろん全機能使えない。(自分でOCI等で接続するコード書くなら別)
>>206 全機能っていうのは、Oracleのストアドとかが、ぜんぜん使えないことでしょうか?
Oracleも初心者なもので、詳しくないのですが、
ただDBを繋ぐことがとりあえずできる、ということですか?
>>207 ADOで良ければ、ストアドも含めて普通に使えるだろ。
BDEも(呆れた事に)まだ行けるらしいし
駄目そうなのは純正dbExpressだけだろ。
210 :
207 :2005/09/26(月) 20:41:52
今回、dbExpressを使用する予定でいます。 Delphi2005にしたほうがいいでしょうか・・・
したほうがいい、とは死んでも言えんね
Delphi6Personal でサービスって作れますか? たぶん作れなくはないけどイチから作る技術がいるって話だと 予想しているのですけど。 そのへん解説してあるところあったら教えてください。 (ググってもサービスじゃあまりに一般名詞すぎてわけわからんです...)
ほんとくだらない質問ですが、TEDITにフォーカスがある状態で ctrl+Aで全選択状態にするにはなんかプロパティの設定で可能ですか? それともなんかコードを書く必要がありますか?
>>210 Direct Oracle Accessでググると少し幸せになれるかもしれない。
>>213 TActionList 置いて、標準アクションの TEditSelectAll 作るだけでおk
質問させて下さい。 あるソフトのListViewから指定された文字列がある所を選択させたいのです。 下記の様にやってみましたが、LPARAMをどうしたら良いのか分かりません。 どうか御教示お願いします。 test := 'test'; SendMessage(wnd, LB_SELECTSTRING, -1, test);
LB_SELECTSTRING って ListBox用じゃなかったっけ うる覚えでごめん
>>217 他のプロセスに対して行うのだったらそれじゃできないよ。
共有メモリ VirtualAllocEx ReadProcessMemory WriteProcessMemory でぐぐれ。
221 :
213 :2005/09/28(水) 01:33:29
>>215 確かに簡単でした。ありがとうございます。
日本語入力モードかどうかって、どうやれば解かりますか?
223 :
222 :2005/09/28(水) 05:57:08
大事な説明が抜けていました。 「他のプロセスも含めて」って事です。
224 :
212 :2005/09/28(水) 08:14:46
>>215 ,219
どうもありがとうございました。
私のウデでは難しいような気がしてきました。
本当にサービスでないといけないのか再検討してみます。
225 :
デフォルトの名無しさん :2005/09/28(水) 11:42:56
例外処理で下のように記述するのは正しい使い方でしょうか? procedure Main; begin try func1; func2; func3; except on e Exception do begin ShowMessage(e.Message); end; end; end; (func2もfunc3も同じように記述) procedure func1; begin try なんたらかんたら〜 except raise end; end;
>>225 間違っちゃいないけれど、Mainでキャッチする例外とfuncXXXでキャッチする例外が同じなら
funcXXXの try〜exceptは別にいらない。
funcXXXで発生した例外は呼び出し側(Main)のexeptでキャッチされるから。
227 :
225 :2005/09/28(水) 12:51:33
呼び出し先で例外を捕まえなければ上に伝わっていくのですね ありがとうございました
228 :
217 :2005/09/28(水) 23:31:00
>>218 ListBoxの間違いでした。
>>220 なんか難しそうですが、頑張ってみます。ありがとうございました。
229 :
デフォルトの名無しさん :2005/09/29(木) 13:37:54
Delphi6で作ったプロジェクトをDelphi7でコンパイルしたら、以下のエラーがでてしまいます。 [致命的エラー] ユニット DBTables は異なるバージョン DB.TCustomConnection によりコンパイルされています なぜでるのか見当つきません。
>>229 DBTablesを全ファイル検索してみ?
231 :
229 :2005/09/29(木) 13:55:02
>>230 検索して見ました。
プロジェクト内のほとんどのファイルが出てきたのですが・・・
「DBTables」はライブラリだから、プロジェクト内にオブジェクトモジュールは無い筈なんだが。 プロジェクト内に持っちゃったら、そりゃー異なるバージョンのDBTablesが出来てエラーになるよ。
234 :
229 :2005/09/29(木) 14:13:47
>>232 Delphi6では、同コードで通るので、気づきませんでした・・・。
出てきた分、全部消してみます。
>>233 BDEを使用しています。
dbExpressを使用しなくても出るのかもしれないですね。
確認してみます。
DBTablesの中のクラスを派生したクラスのコンパイルに使ったdcuと、 リンク時のDBTables.dcuと異なる場合にそのエラーが出る。 Delphiのコンパイルエラーでは一番やっかいなやつかも。
236 :
デフォルトの名無しさん :2005/09/29(木) 17:36:09
Delphi2005ってStrToInt命令使えないんですか?
書式ってDelphi7と同じ?
>>238 Del win32なら普通にIntToStrが使える
.netならSystem.Convert.ToInt64();
Delphi のリファレンス嫁
240 :
デフォルトの名無しさん :2005/09/29(木) 19:44:51
Formの上にフロートする、チャイルドウィンドウって簡単に作れましたっけ?
241 :
240 :2005/09/29(木) 19:48:37
ゴメンなさい、Parent設定するだけで出来ます他。
FastMM4の使い方を教えてください。 一応添付のReadmeはよみました。 どうやらFastMM4本体はなにもインストールする必要はなく、単にuseすれば 良いようですね、実際それで動作しました。 しかしBorlandMM.dllの差し替えが良くわかりません。 /binにある同名のファイルを差し替えろと書いてあるようですが、IDEとApplication とあり、さらにプロジェクトファイルもあり、どうしたらいいかよくわからないです。 バージョンは2005、非公式パッチは入れてあり、リスクは覚悟してます。 よろしくお願いします。
LinuxでいうところのDB(Berkeley DB)やCDB,QDBM等の組み込みデータベースで、 WindowsスタンドアロンでDelphi6Personalから使えるものを教えていただけませんか? Delphiアプリの配布のみで使用できるものがあれば言う事ないのですが…
D6per で仕事するなよ
>>244 3行目の意味がわからないけど、MDBを使う方法がどこかに書いてあったと思う。
ActiveXを使ってADOがなんちゃらって感じで。
俺はSQLiteを使ったりしてるけど、これはDLL配布が必要です。
>>244 >>246 uses ADODB;
TADOQueryでTCustomADODataSetにMDBを指定すればいい
>>247 スマン間違えたConnectionStringのプロパティにMDBを指定
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb;Persist Security Info=False
まぁ、MDBを仕事で利用するとあとで後悔することもあるけどな。
250 :
デフォルトの名無しさん :2005/10/01(土) 22:19:49
Delphiでワイルドカードマッチってどうやるんだ。。・。?
>>250 正規表現コンポを使え
>>243 > しかしBorlandMM.dllの差し替えが良くわかりません。
いろいろあるけど基本的にはPrecompiledのPerformanceにあるDLLを使えばよい
IDE・・・単純に入れ換えるだけ
Application・・・Sharememと同じ要領。プロジェクトのusesの先頭にFastMMのユニット
あとはアプリケーションと一緒にDLLを配布
> アプリケーションと一緒にDLLを配布 あっ、VB なみかぁ・・・
253 :
243 :2005/10/02(日) 00:36:33
>>251 ありがとう。でもまだいまいちわかりません。すいませんがもう少し教えてください。
FastMMをuseして作ったアプリは全てこのBorlandMM.dllと一緒に配布しないと
いけないってことですか?
IDEのほうを入れ替えるだけなら同時配布は避けられますか?
254 :
デフォルトの名無しさん :2005/10/02(日) 02:39:37
ASP.NET Application - Delphi for .NET VCL Forms Application - Delphi for .NET Windows Forms Application - Delphi for .NET VCL Forms Application - Delphi for Win32 これってなにがどうちがうんですか? VCL Forms Application - Delphi for Win32とVCL Forms Application - Delphi for .NETって一緒じゃないんですか?
Win32 と .NET Framework が同じなわけないだろ。 なんか、自分の使ってるOSにもっと関心を持たないと。プログラミングとか以前に
256 :
デフォルトの名無しさん :2005/10/02(日) 02:59:54
>>255 Win32でつくったやつはうぃんどうずでしかうごかないってことでおk?
258 :
デフォルトの名無しさん :2005/10/02(日) 03:11:40
Windows Forms Applicationがうぃんどうず専用じゃなかったのか・・・ ASP.NET Application - Delphi for .NET VCL Forms Application - Delphi for .NET Windows Forms Application - Delphi for .NET VCL Forms Application - Delphi for Win32 これ詳しく解説してくれる人もしくは解説してるサイトない・・・?
詳しく解説したら本20冊にはなるな・・・
260 :
デフォルトの名無しさん :2005/10/02(日) 03:32:43
>>259 まじで・・・?
じゃあ重要部分だけでもお願いします・・・。
ASPはなんかインターネットのやつ。 VCLは非.NET。 Windows Forms は.NET。
262 :
デフォルトの名無しさん :2005/10/02(日) 04:37:10
>>261 thx
しかしそれだとVCLを使う利点がわからない
.NETつかえたほうがいいにきまってるしなんかVCLのほうが長けてるってのはないのかな
VCLはソースが公開されているが、.NETは非公開じゃなかった?
.NETが枯れてくればその思想はすばらしい。 面倒な部分を勝手にやってくれる発想だから言ってみればVCLとかぶってる。 ただ一部のコンポーネントの表示が変だったりとか .NET Frameworkをインストールしないと動かないアプリになったりするとか その辺が現状のデメリットかな。
今のところ.NETを選択する理由がない。 お仕事だったらやるけどねぇ。それ以外では.NETはいらない子。
> VCLはソースが公開されているが、.NETは非公開じゃなかった? Win32 の API は一般人にはソース非公開だろ。 .NET はライブラリレベルで API だから、非公開なのは Win32 と同じ。 VCL.Win32 は単なる一企業のラッパライブラリにすぎない。 > .NETが枯れてくればその思想はすばらしい。 同意。でも、あとまだ時間がかかりそう。
何もかもが理想どおり進めばいいのだけどね
>>253 > IDEのほうを入れ替えるだけなら同時配布は避けられますか?
はい。
> VCL.Win32 は単なる一企業のラッパライブラリにすぎない。 APIまで遡らなくても分かる事・出来る事は沢山あるだろ。 詰まらん物まで非公開。これがMSクオリティ。
271 :
デフォルトの名無しさん :2005/10/02(日) 15:56:12
> 詰まらん物まで非公開。これがMSクオリティ。 某だってコンパイラや IDE のソースは非公開なわけだが
某なんかヘルプさえマトモじゃないんだが・・・
> このページはCですが それ C# だろ。ぜんぜん違う
ヘルプがちゃんとしてないことのいいわけとしては最低だな
Delphiのかっこいいアイコンない?
質問させてください。 インターフェイスがポップアップだけのポップアップランチャーを作ろうと思うんですが、 メインフォームを表示させずポップアップだけにするにはどうしたら良いでしょうか?
とりあえずFormのOnCreateにこう書いとけ Application.ShowMainForm:= False; これでMainFormはタスクバーからも消える ちゃんと終了させる方法は用意しとけよ
DOSアプリにコマンドを渡して実行し その結果を受け取るにはどうすればいいのですか? コマンドプロンプトでの実行は >DOSアプリ ファイル名 で行い 結果はDOS画面に表示されます(1行の文字列)
ParamStr(1) で受け取って Writeln() なんかで出力する
Delphiを始めてみようと思ったのですが 時代遅れで開発環境も安定していないのでやめたほうがいいといわれました。 皆さんDelphiをやめた後はどんな開発ツールを使っているのでしょうか?
C#+Python
わしも C#+Python だな。D6も使ってるけど。
>>285 仕事: Java
趣味: Delphi, C++, SmallTalk
もうJavaいやだ(´・ω・`)
Delphiの仕事したいよぉ…
こんな事聞いたら帰れとか言われると思うですが…… このスレには実際Delphiで飯食ってる人はどれくらいいるんですか? Delphiは趣味な人のほうが多くないですか? そう思っただけなんですけど……
俺は600万ぐらいだからいまいち
293 :
デフォルトの名無しさん :2005/10/03(月) 20:56:23
VB 2005とDelphi 2005でどっちが優れてるんですか? 世間の評判ではVBの圧勝とのことですが本当ですか?
VB9はいい感じだな
295 :
279 :2005/10/03(月) 21:17:33
Delphi2005で、突然ディスクスワップが発生し、 タスクマネージャで見ると、メモリ使用量が350MByteってなってたのは、 Update1までのバグだったんでしょうか? Update3まで入れたら何とか落ち着いたみたいなんですが・・・ 一瞬、メモリ買いにいかなきゃ、と焦りましたよ。
今更何言ってるんだか・・・
350MBくらいでスワップを起こすPCを使っているほうが悪い。
巣に帰れ糞ども
>>298 ud3 で直ったんだから D2005 が悪いってことだろ。信者はみんな馬鹿か?
馬鹿はお前だ。インライン
302 :
質問 :2005/10/04(火) 17:33:58
e=2.718… ってありますけど、いま数式プログラムを作っている最中で このeの表記方法がわからずに、2.718を書いて代用しています。 このeを使った正しい表記方法はないでしょうか?
意味がわからん
double型でも使えば?
305 :
質問 :2005/10/04(火) 18:20:12
わかりました ありがとうございました
procedure TForm1.Button1Click(Sender: TObject); var e:extended; begin e := exp(1); Label1.Caption := FloatToStr(e); end;
readonly属性のない言語って悲しいね
function PI ってなってるけど、 PIの定義場所が systemに無い・・・・・
>>302 const e=2.7182818284590452353602874713527;
と定義して使うといいんじゃないの?
PI 見たいに関数にしてもいいかもね
自分が叩かれたら叩いた相手を馬鹿呼ばわりか。 真性だなwwwwwwwwwwww
突然ですが、DirectXコンポ何使ってますかい? ちなみに俺は、Delphi4+DelphiX。
使ってない。 Wav音の重ねあわせとMIDI演奏をどうするか考え中。
>>314 漏れはQuadruple Dだな
Del2005でも使えるし
QDってもう更新終了?
二次元配列ではMean関数やSum関数は使えないのでしょうか? どなたかご教授お願いします。 procedure TForm1.Button1Click(Sender: TObject); var hoge : array of double; hogehoge : array of array of double; begin SetLength(hoge, 2); hoge[0] := 1; hoge[1] := 2; Label1.Caption := FloatToStr(Sum(hoge)); //3が出力されます。 { //以下のままだとエラーが出て実行できません。 SetLength(hogehoge, 2, 2); hogehoge[0,0] := 1; hogehoge[0,1] := 2; hogehoge[1,0] := 3; hogehoge[1,1] := 4; Label2.Caption := FloatToStr(Sum(hogehoe)); // 10がでてきてほしい } end;
>>318 ヘルプより
function Sum(const Data: array of Double): Extended; register;
どう見ても1次元配列だろう。
こんな関数、自分で2,3分で作れるのになんで悩むかな・・・
動的配列だから、型を定義してと長くなってしまうから、 sumなら直接書いた方がいいでしょ sum :=0 ; for x:=0 to High(hogehoge) do for y:=0 to High(hogehoge[x]) do sum:=sum + hogehoge[x][y];
VB.NETなら任意の型の多次元配列の和を求めるコードを一発で書けるのにね
これでCGIって作れんの?
VB.NET は自分で関数を作れない人には最適ですね。成果物は、.NET が無いと動きませんが。
>>324 バージョンとProfessional・Enterpriseの差によって手間は違うけど、作れるよ
>>326 6パーソナルしかないけどちょっとやってみよっかな
per なら、「ちょっとやってみる」じゃできないだろ
作るだけなら簡単だろ
IntraWebが付いてるならお手軽なんだけどね。 そうじゃないなら、 WinCGIでDLLを作るか、コンソールアプリCGIでやるかになると思うよ。
331 :
330 :2005/10/05(水) 17:31:20
ごめん間違い。 CGIを作るには ・ WinCGI テキストファイルを介してやりとりする ・ コンソール CGI 環境変数と、標準入出力でやりとりする この2つが実行形式で作れるもの パーソナルで作るならこの方式になると思う その他に、ISAPI/NSAPI というのがあって、これがDLL形式
CGI作りたかったらperlで作っとけ。簡単だから。
談話室どこー?
鯖がWinじゃなくても動くし >perl
Delphi はApache DSOを作れる+KylixならLinuxで動く という事で海外ではperl代わりに使っている人も・・・多少は居る
Kylix は Delphi じゃないし、レアケースを挙げても意味無いし
>>308 Pi関数について,手元のDelphi 5で試してみましたがコンパイラは単に定数値を代入しているだけでした.
変数 f を double で定義して f := Pi と代入するコードをコンパイルしてCPUウィンドウで見ると以下のようになっていました.
mov [f],$54442d18
mov [f + $4],$400921fb
mov命令はmove,つまりデータの転送を行う命令です.
変数fの中身がある場所に固定の値を2回に分けて転送しています.
singleやextendedでも試しましたが,転送回数がそれぞれ1回,3回になるほかは同様でした.
同じようにコンパイラが扱う関数や手続きとしては
ほかにord関数,Inc手続き,Dec手続きなどがあります
(…と記憶.どこかに書いてあったはずですが確認できず).
自作の関数では同じようなことはできないので定数を定義するのがよいでしょうね.
> 自作の関数では同じようなことはできないので 意味がわかりませんが? 内部実装はともかく function Napier: extended; begin result := exp(1); end; procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := FloatToStr(Napier); end; で、何が不都合なの?
> Kylix は Delphi じゃないし KylixはDelphiですよ。 VCLを使ってますし。CrossKylixを使えば、DelphiのIDEからコンパイル出来ます。 > レアケースを挙げても Kylixユーザーの大半はCGI目的で使っているのでは。
いやそれぐらい意味わかれよ
kilyx は delphi じゃないし、Kylix ユーザ自体がレアなのでその大半が CGI でつかって いてもレアケースだろな
レアケースだから意味無い? Delphiスレなんだから意味あるだろう。何ムキになっているんだか。
Delphi スレ以外ではレアケースは意味無いのか? 何ムキになっているんだか。
やれやれ、DelスレでPerl 厨まで暴れるようになったか
誤魔化さずにちゃんと答えろよ。
え、344って質問なのか? そりゃ意味はあるでしょ。どんなスレでも。情報提供なんだからさ。
D6per で CGI つくろうかな、って質問に「KylixならLinuxで動く」って回答する のはどう見ても見当違いだろ。無意味とはいわんけど。
>>348 馬鹿か?参考までにメリットを挙げただけだろ?
そんな事も分からないのか?
ちなみに俺はその解答者じゃないぞw
参考っていうなら perl の方が100倍参考になるな。いまから kylix がどうのこうの いうのは参考というより、有害だわな。
これから CGI つくるのに kylix つかうメリットとか本気で思ってるとしたら重傷だな・・・
352 :
デフォルトの名無しさん :2005/10/06(木) 03:28:08
Delphiは鯖がwinじゃないと動かない →こんなことして動かすこともできますよ。そうしてる人もちょっとはいますよ。 →はぁ?だから何? →謎の喧嘩 ←今ここ →ラブホ
100倍参考になるとか力説しちゃうわけね。 久しぶりにイタイのが出てきて嬉しいぞ。
なんでこう技術系のスレって他人を認めたくない人が多いんだろう いきなり頭から否定するから無駄に荒れるんだろ コマンドを頭に詰め込むより人として基本的な事から勉強しようぜ
ばかばっか
インラインバグを否定されたあたりから精神異常をきたしたらしいよ
>>338 自分で作れない関数の代表は write だろうな
型可変オープン配列パラメータでないのに、
型なしパラメータに見えるのに型に応じて動いてる。
他に Sliceもつくれないな。
Format もつくれないかな・・・ VCL はソース公開とかいってるが、特別に文法無視した実装が古くからあるんだよな
function PI っていんちきだったんだ
自作関数ではインチキできないから定数で宣言しましょう・・・って変じゃん
定数なら宣言/定義合わせて一行で済むし生成されるコードも最小限なのに、関数にする意味無ーいじゃーん
おまいな 一応定数を返すだけの関数にしとくと色々便利なんだよ いつかPIの求め方が変更されるかもしれないだろ? およそ3とかに
>>362 定数の欠点は関数やプログラムコードを使って値を生成できないことだね。
eくらいはどうって事もないけど。
>>364 一度コードで値を生成して表示させて、定数として定義するだけじゃねの。あくまで"定数"の話なんだから。
データ構造がeより複雑で算出に外部データを必要とする定数の場合は カスタムビルドステップのないDelphiではその定義するだけが面倒だというお話。
わかんねーな。その関数一回呼ぶだけじゃん。型は複雑でも同じ結果返すんだべ? ま、ぐだぐだ続ける話でもないか。
関数にしておくのもそれなりにメリットがあるんだよ。PI が見かけ上関数になってる のは将来の実装の変更を見越してるから。(精度が倍になるとか)
ヘルプに PI が関数になってるのに忠実にしたがえば e は関数にしとくべき
>>359 formatは型可変オープン配列パラメータだから作れるだろ
function MakeStr(const Args: array of const): string; const BoolChars: array[Boolean] of Char = ('F', 'T'); var I: Integer; begin Result := ''; for I := 0 to High(Args) do with Args[I] do case VType of vtInteger: Result := Result + IntToStr(VInteger); vtBoolean: Result := Result + BoolChars[VBoolean]; vtChar: Result := Result + VChar; vtExtended: Result := Result + FloatToStr(VExtended^); vtString: Result := Result + VString^; vtPChar: Result := Result + VPChar; vtObject: Result := Result + VObject.ClassName; vtClass: Result := Result + VClass.ClassName; vtAnsiString: Result := Result + string(VAnsiString); vtCurrency: Result := Result + CurrToStr(VCurrency^); vtVariant: Result := Result + string(VVariant^); vtInt64: Result := Result + IntToStr(VInt64^); end;
>>371 簡単な例って、 format は SysUtils.pas にそのものがあるじゃないか
>>368-369 VCLソースにはPIは関数としても定数としても定義されてない。何らかの理由(効率とか)で特別扱いしてるんだろう。
だからヘルプでは、このどちらでもないものを「便宜上」function PIと表記しているだけだと思う。
eを関数にしたって決してPIと同じ振る舞いはできないのだから、ヘルプにPIが関数として書いてるのだからeも〜ってのは間違ってると思う。
> 何らかの理由(効率とか)で特別扱いしてるんだろう。 理由が分からないのに、同じ振る舞いができないからダメって、なぜ言えるんだろう?
関数にしとく方がその「理由」に近いかもね
>>376 どういう読解力してんだね。
eを関数にするべき理由が、PIも関数と書いてるから、というのはおかしいと言ってるんだ。
>>377 いやPIの振る舞いは定数との違いがわからんくらい定数に近い。
> eを関数にするべき理由が、PIも関数と書いてるから、というのはおかしいと言ってるんだ。 じゃどうしろと?
どっちにしてもeはDelphiのunitじゃバグの元になりそうだな。 っていうかそういう高度な議論はフサスレでやれ。
> どっちにしてもeはDelphiのunitじゃバグの元になりそうだな。 なるわけないでしょ。どんなバグを想定してるの?
>>380 別に。「e は関数にしとくべき 」って言うけど、その必要はないんじゃね?少なくとも理由は変じゃね?ってだけ。
> eを関数にするべき理由が、PIも関数と書いてるから、というのはおかしいと言ってるんだ。 だから、理由が分からないのにどうしておかしいといえるのか? と。 ヘルプで、PI を関数にしてるのは、なぜ「便宜上」そうなってると思う? 定数にしておけばどこが不便だ思う?
>>384 「eを関数にしたって決してPIと同じ振る舞いはできないのだから」って書いてるだろう。PIは実際は関数ではないのだから、eを関数にしたってPIと同じようにしたことにはならない。
> ヘルプで、PI を関数にしてるのは、なぜ「便宜上」そうなってると思う?
> 定数にしておけばどこが不便だ思う?
PIの3.1415...を返すという動作を便宜上表現できるものであれば、別に関数でも定数でも良かったんじゃね?たまたま関数で書いたってだけで。
なんで実装まで PI と同じにする必要があるんだろう?
そんな事言ってねーってのがなんで分からんのかな…だめだこりゃ
実装が定数でも関数でもないんだから、実装を真似る必要なんかないだろし、できない。 なぜ、そんなふうになってるかを考えなければ、定数がいいか関数がいいかなんて言えないだろうに。
どっちでもないから、一方を主張するヤツに反対するのは簡単だわな・・・
まともな根拠の無い主張なんだから、そりゃ簡単だ
Piの場合はコンパイラが直接処理してるからソースに出てこないってだけの話しだべ eはPi程の出番はないだろうということでコンパイラにそこまでやらせてないんだべ eのExp(1)に相当するものが欲しければArcCos(-1)でも使えばいいね Mathユニットにちゃんとコードが載ってるし(最後はAsm文へ行き着くけど) どっちにしても使う側が気にすることでもなかんべ
> まともな根拠の無い主張なんだから、そりゃ簡単だ
ということで
>>338 の主張は根拠無しってことになった。
だれかPi関数をちゃんと範囲内の素数の個数を返してくれるように直してちょんまげ
> 範囲内の素数の個数 意味不明。
>>394 まあ知らなくても無理はないと思うけど、393は意味不明な事は言っていない。
393は知識をひけらかしかっただけだろうな。間違ってはいないがイタイ奴だ。
どっちでもいいから談話スレでやれっての
超初心者がくだらないことを話すスレですから
この話題はどっちだってかまわないだろ。
趣味の初心者がいなくなって、初心者といえばお仕事系のDBだとかレポートだとか つまらん質問ばかりだから、今回のような話題はこっちでやっても委員ジャマイカ
ん〜ネットだとやっぱり情報少なくない? Delphiのいい参考書ないでしょうか?
>>400 質問した人間そっちのけで話し進めるならあっちでやれ。
ここは質問スレ。
質問した人が出てくるかどうか、なんか回答者に関係ないだろ このごろの質問者はしっぱなしだし
>>402 は「デフォルトの名無しさん」のどれが質問者か分かるらしい
そういう質問と無関係なレスもあっちで
やたらしきたりたがるひともあっちで
408 :
デフォルトの名無しさん :2005/10/08(土) 10:21:34
WinXP+D7Proです。FAQ かもしれない質問ですが… IDE で、クラス名(Memo1: TMemo; などで TMemo の部分)にマウスカーソルを あてると、クラスの情報がヒント表示されます。 しかし、フリーの VCL などでは表示されないのもあります。これは何故なのでしょうか?
410 :
デフォルトの名無しさん :2005/10/08(土) 16:00:42
Delphiでのランダム生成ってどうやるんですか? Randomize(100)とやってもうまくいきません。何か間違ってるでしょうか?
Random
Randomizeは初期化用で、やりたいのはRandom(100)じゃないの
>何か間違ってるでしょうか? 質問時にどう上手くいかないか書かないオマイが間違ってる ヘルプを読まないオマイが間違ってる 結論:すべてオマイが間違ってる
414 :
デフォルトの名無しさん :2005/10/08(土) 16:15:15
すべて俺が間違ってました ファー……ブルスコ……ファー モルスァ
ComboBoxでCtrl付きのショートカットを押すと「ポン」と鳴るんですが、 これをどうにかして無くす事はできませんか? Enterの方は "Key := #0;" で鳴らなくなったんですけど。
鳴らん・・・
417 :
デフォルトの名無しさん :2005/10/09(日) 02:17:14
スピーカーつぶせばおk
418 :
デフォルトの名無しさん :2005/10/09(日) 03:20:48
delphiしぼんぬwwwwww
420 :
デフォルトの名無しさん :2005/10/09(日) 06:02:09
終りだ orz
421 :
デフォルトの名無しさん :2005/10/09(日) 06:31:24
422 :
デフォルトの名無しさん :2005/10/09(日) 06:43:19
423 :
デフォルトの名無しさん :2005/10/09(日) 08:50:51
質問した人間そっちのけで話し進めるなら談話スレでやれ。 ここは質問スレ。
426 :
415 :2005/10/09(日) 20:24:53
>>425 馬鹿か氏ねって…
実際に鳴ってて困ってるから質問したのに。
分かりました。質問は取り下げます。
427 :
425 :2005/10/09(日) 21:18:52
「馬鹿氏ね」は談話室でやれ 質問者もDelphiのバージョンと使用環境くらい明示しろよ Delphi 7/XP Pro SP2じゃ鳴らん。
429 :
415 :2005/10/09(日) 21:27:07
Delphiユーザーって酷いですね
だからデルファイなんてやめればよかったのに・・・
431 :
425 :2005/10/09(日) 22:09:21
>>429 たかが一つのスレッドを見てそう判断してるとしたらゴミ以下だよお前の脳みそはw
どうせ騙りだろうけどwwww
Delphiでは可変長引数を持つ関数は作れないのでしょうか?
はい
>>432 型安全なのはarray of const、
Cと同じようにしたければcdeclのvarargs
TServiceクラスを使ってサービスアプリを作っています。 例外が発生したときにエラーコードを自動的にイベントビューアに書き込むようですが、これを止めたいです。 どうすればいいのでしょうか?
自前で例外を処理するようにすればいいんでないかい
知らないけどtry...exceptとかで書けば平気なんじゃ?いや、ほんと知らんけど。
438 :
435 :2005/10/10(月) 02:12:47
うーむ、処理した例外のメッセージを取り出すところがちょっと調べないと 難しかったけど、なんとなく出来た気がします。 とりあえずイベントビューアにはのらなくなった。 ふつーに日ごろtryなんて使ってるのになんかサービス&イベントビューア ってことでなんか特別なのかと身構えちゃって思いつかなかったよ。 ありがとう436,437
Delphiでは出来ません。 ,NETなら出来ます。 以上。
チョンNET ってなに? そもそもプラットフォームの名前が出来るとか出来ないとか に関係あるのか? アフォレスの典型だな
>>440 駄目だよ小学生にマジレスしたら。トラウマになっちゃうよ(笑
>>415 よくわかりませんが、こういうことかな?
if Key = #13 then key := #0;
if ((GetKeyState(VK_CONTROL) and $8000) <> 0) then key := #0;
>>439 意味がよくわからないのですがDelphi.NETではできるということですか?
ちゃんと答えてください。
>>443 それ以外に聞こえたら説明が悪かったのだろう
445 :
デフォルトの名無しさん :2005/10/10(月) 21:15:55
初めまして。 超初心者用のスレなので、書き込んでみます。 最初に i=integer; と宣言して、その下でi=:10と記載しました。 その後にi=real;と型を書き換えたら、エラーがでるようになりました。 realは実数で、integerは整数と参考書に書いてあったのですが、 10は実数ではないのでしょうか???
var i: real; begin i := 10; end; のようにreal型変数に10を代入しても問題ない。 ただの書き間違いじゃないの。 エラーの内容読んでみ。
447 :
デフォルトの名無しさん :2005/10/10(月) 21:27:18
>>その下でi=:10 i:=10じゃね
448 :
デフォルトの名無しさん :2005/10/10(月) 21:36:45
>>445 書式はなるべくソースそのままにしようぜ
言いたいことはわかるが、それがここだけの打ち間違いなのかソースでも間違ってんのか分かりにくい
449 :
445 :2005/10/10(月) 21:37:47
>>446 やっぱり書き間違いかな???
エラー内容は、「指定された引数で呼び出すことができる
オーバーロード関数IntToStrが定義されていません」と・・・。
IntToStrっていう記述は、integer型にしか使えないのかな?
「デルファイはじめの一歩」という文字がでかくイラストが多い本を
まだ60Pしか読んでないから、テキストの例題に記載されたとおりのこと
以外は何もできない・・・。
そりゃ"Int"ToStrだからな。 FloatToStrかFormat('%f', [i]);使え。
451 :
445 :2005/10/10(月) 21:50:27
みなさん回答ありがとうございます。 もともと文系の人間で、おとといテキストを買ってきたばかりなので なかなかサクサクとは勉強が進みません。 質問の仕方自体よく分からなかったりもしますが、多分また お邪魔すると思います。これからもよろしくお願いします(・ω・)ノ
452 :
デフォルトの名無しさん :2005/10/10(月) 21:54:32
>>451 なにが問題なのか自分なりに考えた結果とソースがあればおk
>>451 低学歴ニートの俺でも時間掛けたら超基本的なとこまではできたから、絶対大丈夫だよ。
がんばれ〜
VB.NETならi.ToString()で済むのにね。 21世紀にもなってまだ整数がオブジェクトじゃない言語があるなんて信じられないよ。
>>454 Delphi.NETでもそれで済むよ?
>>451 ていうか文系でも複雑な計算が必要だったり
性能を追求しなければ全く問題ない
Delphiでは出来ません。 .NETなら出来ます。
Str(i, s)で済むんだけどな…。 IntToStrも中身これだし。 古かろうがなんだろうが、コンパイラが直接サポートする手続きのほうが便利だよ。
まったく思考が古いですね。
人間にとって便利なのが一番
>>457 意味がよくわからないのですがVBはだめでDelphi.NETではできるということですか?
ちゃんと答えてください。
462 :
デフォルトの名無しさん :2005/10/11(火) 08:34:54
いいえ。 DelphiはだめでVB.NETではできるということです。
ToString()は、.NETのObjectクラスのメソッドだったと思うが。
同じ.NETなのに変ですね。 .NET自体が変ということでしょうか?
465 :
デフォルトの名無しさん :2005/10/11(火) 09:38:00
466 :
デフォルトの名無しさん :2005/10/11(火) 09:39:29
超初心者ならまだ傷は浅い。 他の言語をどうぞ。 おおおおおっと、VBの話しが出てますね、VBでもどうぞ。
>>467 とうか同じやつ(VB厨またはインライン君)でしょ
質問した人間そっちのけで話し進めるなら談話スレでやれ。 ここは質問スレ。
っていうか、くだ質問する初心者もいなくなったかぁ・・・・・・・・
夏休みの2chブラウザ強制が効いたな。 他スレも全然伸びない。
インターネット上の画像を取ってきて表示できるコンポーネント無いですか? (プロキシサーバ対応で・・・) FileStreamでやらないと駄目なのかなぁ ちょっとめんどっちい
TWebBrowser
>>473 あ、そか サンクス
んーJpeg画像を直でURLに指定したら、画像の周りに余白がでるなぁ
消せないのかな
ローカルにマージン指定したHTML生成するとか
476 :
472 :2005/10/11(火) 14:48:25
あぅ・・windowのサイズに合わせて画像サイズのリサイズもしたいが、 結構めんどいなぁ・・・。 やっぱりImageコンポーネントに入れ込むことを考えないといけないか
Delphiやっても、いずれ消滅していく言語だから、やっても意味がないってカキコをみました。 本当なんでしょうか? どの言語を覚えたらいいか、真剣に考え中です。
またおまえか
>>477 目的がDelphiをやる事なら君がやっても意味ない。
でもDelphiの部分を何に置き換えたって同じだよ
どの言語を覚えるかというのがプログラム言語の意味なら、
君は、プログラム言語をやるより、他の事やった方が幸せになれると思うよ。
というか、こんなもの覚えて、何をしたいわけ?
481 :
472 :2005/10/11(火) 15:25:57
>>479 サンクスです。いいなぁこのコンポーネント
これでfreeだったらなぁ。。。(ショボーン
482 :
472 :2005/10/11(火) 16:31:33
484 :
477 :2005/10/11(火) 20:06:00
>こんなもの覚えて、何をしたいわけ? なんか、Delphiの立場的なものがわかった気がします。 ちょっと、いろいろ調べて考えることにします。
まずは日本語から。
>>484 そうだね。 学校の勉強と違って、こういうのは、目的があってこその道具。
目的なくて、教養としてとりあえず勉強したいという「勉強が目的」ならC言語でもやればいい
いやー釣れた釣れた
488 :
445 :2005/10/11(火) 23:03:43
またすごく恥ずかしい質問なのですが、テキストの中の単語の読み方が分かりません。 (例えば、「var」とか「IntToStr」の「Str」部分とか・・・。) 今日同じ会社のプログラマーさんの席の近くを少しうろついてみた(不審?)のですが、 それっぽい単語は出てきませんでした。(´ω`)=3 これは会社のプログラマーさんに直接聞いていくしかないのでしょうか? (参考になる本やサイトが見つけられなかったのです・・・。) みなさんはどうやって覚えたのでしょうか?
var は頭の中では バー っていってる。variable 変数って言う意味。 IntToStr() は、頭のなかでは イントトゥストリング と言ってる。 integer 整数を string 文字列 に変換ってことだね。
490 :
445 :2005/10/11(火) 23:56:52
>>489 そう読むんですか。勉強になりました。
今日はif文の書き方を覚えました。明日はif文の入れ子のやつを勉強します。
それではおやすみなさい(・ω・)ノシ
読み方と言えばprocedureと引数が定番だな procedureは「プロシージャ」辺りであり「プロセドゥア」でない あと「引数」は「ひきすう」、間違っても「いんすう」じゃない
492 :
デフォルトの名無しさん :2005/10/12(水) 01:20:22
いんすうってよんでた
493 :
デフォルトの名無しさん :2005/10/12(水) 01:57:11
英語の読み方を片仮名で書くのはどうかと思ったがまあいいや
いやいや、コーディングのとき頭のなかでどう言ってるか、ってことなんだ。 オレはブラインドタッチができないけど、頭のなかで イントトゥスリング と いいながら IntToStr() でタイプしてると効率が上がるような気がする。 人によって言い方も、また、頭の中でもつぶやかない人がいると思うけど。
俺はイントトゥストルって読んでる
イントトゥストア って読んでる 要はみんな適当。と。
親切な文書だと間違えないよう 引き数 って書いてくれるね ひきすうと読まないと 因数と勘違いしてしまうから、たぶんそう読む事にしたんだろうね。
普通はイントトゥーエスティーアールじゃないのかな?
499 :
デフォルトの名無しさん :2005/10/12(水) 07:51:58
俺は頭ん中で文字列が映像として浮かぶから読んでないな
trの発音はチュアだろ
IncludeTrailingPathDelimiter ↑この関数タイプするのマンドクサイんですが。
Ctrl + Spaceで補完できるだろ。
IncludeTあたりでCTRL+SPACEとか
俺はベタにイントトゥストラ
固定ピッチフォントだけを取り出すため以下のようにしているのですがプロポーショナ ルフォントと思われる「HG 丸ゴシック M-PRO」や「HG 正楷書体 M-PRO」も列挙され てしまいます。実用上は EnumFontsProc を呼び出す側でこれらの文字列を判断して 除けばいいのでしょうが、FIXED_PITCHを指定しているのになぜ プロポーショナルフォ ントがリストアップされるのかわかりません。 function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric; FontType: Integer; Data: Pointer): Integer; stdcall; begin if (LogFont.lfPitchAndFamily and 3) = FIXED_PITCH then TStrings(Data).Add(LogFont.lfFaceName); Result := 1; end;
あたりまえだが、固定ピッチだからじゃないの? > プロポーショナルフォントと思われる「HG 丸ゴシック M-PRO」 どうしてそう思ったの?
試しにCanvasに割り当てて TextWidth('i.!') = TextWidth('QWA') とかで判定してみたら?
フォームにブラウザコントロールを置いて wbWWW.Silent := True; wbWWW.Navigate(openURL); wbWWW.Refresh; とやると、 「エラーを特定できません。」というエラーが発生します。 どうしたものでしょうか?
>>508 非同期で動いているNavigateが完了する前にRefreshを呼ぶからぢゃない?
てか、Refreshいらんだろ。
>>509 なるほど。Refreshしないとページが表示されないのですが
それが問題ということですね。
TreeView1を使って簡単なアウトラインプロセッサを作成しているのですが読み込む部分
でメモリーリークが発生して困っています。
FileLoad を1回呼んで終了するとファイルのノード数に関わらず1回だけ、それ以上繰
り返して終了するとファイルのノード数が加算された数だけメモリーリークするようです。
ClearTreeに何か問題があるのでしょうか?
関係のあるところだけ抜き出しますがちょっと長いので
ttp://kuroneko-upload.no-ip.info/uploader/sn/upload.html にアップします(up0862.txt[DLKey は 1234)。
>>511 > while Items.Count <> 0 do
> begin //ノードが保持していたデータオブジェクトを確実に廃棄
> if Items[0].Data <> nil then
> TMyNode(Items[0].Data).Free;
> Items.Delete(Items[0]);
> end;
これ、遅い上に危険。
Items[0].Deleteが Items[0] の子以下も全て削除するから
子の Data が破棄されない。
for i := 0 to Items.Count - 1 do
TMyNode(Items[i].Data).Free;
Items.Clear
にすれ。
あ、それよりも破棄は TTreeView.OnDeletion に任せる方が安全か。
513の言うとおりだな OnDeletionに if Assigned(Node.Data) then TMyNode(Node.Data).Free; と書いておけばおk
515 :
511 :2005/10/13(木) 06:13:00
>>512 =たぶん513
>>514 ありがとうございました。
> Items[0].Deleteが Items[0] の子以下も全て削除するから
> 子の Data が破棄されない。
なるほど、そうなんですね。
ところで
>>514 さんの OnDeletion を使う方法だと
TreeView1.Items.Clear
だけを実行すればいいわけですね。
TRadioGroupで個々の項目を独立してEnabledの設定はできますか? やはり、TRadioButtonを使うべきでしょうか?
>>516 無理
TRadioButtonを置いて個々を管理するしかない
そんときは下のような関数を用意しておいて1度全部Falseにして
必要なものだけTrueにするのがスマートでいいと思う
procedure SetEnabledAll(Control: TWinControl; AEnabled: Boolean);
var
c: TControl;
i: Integer;
begin
Control.Enabled := AEnabled;
for i := 0 to Control.ControlCount-1 do
begin
c := Control.Controls[i];
if c is TWinControl then
SetEnabledAll(TWinControl(c), AEnabled)
else
c.Enabled := AEnabled;
end;
end;
>>516 TRadioGroup.Controls[] を通じて個々のラジオボタンにアクセスできるよ。
例えばキャプションが 'ccc' なのを Enabled := false にするには
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to RadioGroup1.ControlCount-1 do
if TRadioButton(RadioGroup1.Controls[i]).Caption = 'ccc' then
TRadioButton(RadioGroup1.Controls[i]).Enabled := false;
end;
519 :
デフォルトの名無しさん :2005/10/13(木) 11:02:38
ブラウザをURLを入力するEdit&Button(この二つは同一Form上) WebBrowserだけを別のフォームにおいて入力部分と表示部分を分けたブラウザを作りたいと考えているのですが 実行しボタンを押してもForm2が自動で開いてくれません。どのようにすればボタンを押すことによりForm2を表示させることができるのか教えてください。よろしくお願いします。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw_TLB; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; WebBrowser1: TWebBrowser; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Form1.WebBrowser1.Navigate(Edit1.Text); Form2.WebBrowser1.Navigate(Edit1.Text); //ここの部分の処理 別ウィンドウを開かせたい end; end.
Form2 が自動生成の対象になってるか確認 Form2.Show とか Form2.ShowModal とかのメソッドを使う。
Form2.Show;
WebBrowserがFomr1とForm2両方にある意味がよくわかんないけど Form2を表示するならForm2.Show;
>>520 自動で開いてくれないのなら手動で開くしかないでしょ。
なぜにそこで指向がストップするんだ?
Form2.WebBrowser1.Navigate(Edit1.Text);
Form2.Show; //追加
Form2を自動生成してるならForm2.show 自動生成してない場合モーダル表示なら Form2 := TForm2.Create(Self); try Form2.ShowModal; finally Form2.Release; end; モーダル表示しないなら From2のonCloseイベントに Action = caFree; を記述
525 :
523 :2005/10/13(木) 11:12:04
間違えた。s/指向/思考
フォーム1上にもブラウザをおいたのは同一フォーム内だと正常に動作するのを確かめるためでした わかりづらいことをしてすみません。解決いたしました ありがとうございます。
>>519 に怒涛のレスだけどこのスレこんなに住人いたのかw
>>527 雰囲気に怖がらずに質問してくれればいいんだよ。 24時間フルサポートって訳にはゆかないが
俺は9:00〜17:00までフルサポートするよ
仕事しる!
Edit1.Text に数字が入ってるのか文字列なのかチェックしたいのですが どのようにすればいいですか?
try StrToInt(Edit1.Text); {数字} except {文字列} end; でいんじゃね
数字だと仮定して、数値に変換して例外がでるかどうかで判断。 Val() だと例外でなくても判断できる。
数字がある範囲内であるのなら(例:0以上) StrToIntDef(Edit1.Text, -1) とかでもいいわな。
整数とは限らないわけだが
TryStrToInt / TryStrToFloat は?
ありがとうございます。マニュアルValの例をそのまま使えました。 var I,Code:Integer; begin Val(Edit1.Text, I, Code); if code <> 0 then begin Edit1.Text := '0'; end;
Form1のフレームをマウスでひっぱたら伸びたり縮んだりするんですが、 固定する方法はありますか?
FormStyle
>>538 Form1を選択した状態でオブジェクト インスペクタのプロパティにあるBorderStyleをbsSingleに
変更すれば良い。
ありがとうございます。 固定できました。
542 :
516 :2005/10/13(木) 15:02:56
543 :
デフォルトの名無しさん :2005/10/13(木) 15:37:23
procedure TForm1.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ( Key = VK_DELETE ) and ( ssNone in Shift ) then begin end; end; っでssNone in ShiftとssAlt, ssCtrlだけ入れたいのですが、 どう記述したらよいのでしょうか? 全部andでつなげるしかないのでしょうか?
意味がよく汲み取れないのですが、集合型の要素をどうやって設定するかってことなら ヘルプみると書いてあるよ。
設定でなくて検査ならひとつずつ in で調べる。D6 のヘルプには ssNone って載ってない
>>543 Shift = [ssShift, ssAlt, ssCtrl] こう使う。
inは一個しか駄目だったと思う。
配列の中身を一発でクリアする命令ってないんですか?
Altも押してるし Ctrl も押してるけど シフトは押してないという事なら
>>546 等号の部分を >= に変えれば部分集合 つまり、含まれていればになるけど、コレはみんなあんまり使わないみたいだから
in を andで書いた方が判りやすいかもね
>>547 配列の種類によっては FillChar とかで出来るけど、可読性が悪いからお勧めじゃない
素直に書いてもコンパイラだから効率悪くないから
FillChar なんかどう?
FillChar や ZeroMemory 使えるんなら、その方が処理スピードは速いでしょう
>>548 for i・・・・
a[i]:= 0;
とかやったらさすがに遅いだろw
553 :
548 :2005/10/13(木) 16:28:28
>>551 おっしゃる通り。REP STOSD で4バイト毎に書き込むので、高速は高速ですね。
高速が好みなら MMXで64bit バージョンとか CPUによっては128bitバージョンに挑戦しては?
>>552 それでも aが32bitなら、そんなに変わらないと思うけど?
またまた、変なのが現れたなぁ。 FillChar が可読性悪いから、少々遅くてもループで初期化せよ、ってことに 反応しただけでなんで「MMXで64bit バージョンとか CPUによっては 128bitバージョンに挑戦」しなきゃならんの? FillChar 使える場合は、可読性は FillChar のほうがいいと思うよ。 単機能なんだから何やってるかすぐわかるし。
FillChar(array, Sizeof(Array), #0); for i := 0 to Length(Array) -1 do Array[i] := #0; どっちが見やすいのは一目瞭然だと思うけど
556 :
548 :2005/10/13(木) 16:44:50
うーん
>>555 for i:= Low(a) to High(a) do a[i]:= 0; として欲しい所だな
たしかに配列ならLow, Higth使ったほうがいいな
558 :
548 :2005/10/13(木) 16:49:08
そういや FillChar って 3番目の引き数 Byte タイプの筈なのに Charでも通る変な関数というか Systemにある関数ってそんなの多いような・・・・
> どっちが見やすいのは一目瞭然だと思うけど それは、要素がひとつだけだからね。 integer のフィールドが20個あるレコード型の配列を初期化してご覧
560 :
548 :2005/10/13(木) 16:54:56
>>559 レコード型だと、文字列なんかを後からメンバに加えたりした場合にアレだから
なおさら FillCharはお勧め出来ないけどなあ・・・・
FillChar が使える場合は、って言ってるだろ。
562 :
名無し募集中。。。 :2005/10/13(木) 16:57:23
563 :
548 :2005/10/13(木) 16:59:37
>>561 言いたい事は判ってるし、実は俺もFillCharとか使ってた方だけど
でも、コード規模が大きくなって、3年後で変更なんて事が増えてくると、
for i:= Low(a) to High(a) do SetUpXXXX( a[i] );
なんて 感じの手続きで処理させた方が、多少のコストを払っても
後から効いてくるって事なんだよ
いろいろ条件を後付けされても・・・・
>>547 が三年後に変更するかどうかなんか誰にも分からないだろうに。
その論理だと、高速で1行で済むような関数を使うより、メンテが楽で簡単な論理で
済ませられるほうを使え、とかなるけど、どうよ?
あと高速処理なら、MMXで64bit バージョンとか CPUによっては128bitバージョンを使え、とかな
Delphi つかうことを前提にしてないのかね・・・
567 :
548 :2005/10/13(木) 17:12:30
>>564 急いでるときはなおさら、『メンテが楽で簡単な論理で済ませられるほうを使え』 が正解になる事が多いよ。
速度そのものはアルゴリズムの工夫の方が結局は効いてくるから
実装はコードが長くなっても出来るだけメンテが楽で簡単な論理を組み合わせる方がいい。
これは、コードコピペを薦めてるんじゃなくて、少なくとも構造化をした上でって意味だよ
質問した人間そっちのけで話し進めるなら談話スレでやれ。 ここは質問スレ。
なんだとこのやろう
Edit1を押した時のキーの制限なんですが、数字とバックスペース はDel掲示板を参考に それに、小数点を追加したいと思いまして、マニュアルのキーより VK_DECIMAL〔.〕キー(テンキー) というの発見したのですが、小数点 . では反応しません。 どう書けばいいのでしょうか? procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9',Chr(VK_BACK),Chr(VK_SPACE),Shr(VK_DECIMAL)]) then Key := #0; end;
Shr(VK_DECIMAL) ミス Chr(VK_DECIMAL) でした
'.'でいいのでは…。
ちょっとワロタ
フォントのサイズを変更したいのですが Label1.Font.Size := 9; この使い方だとえらーがでます。 どうやったら変わりますでしょうか?
エラー出ないけど
なんてエラーよ?
今やったら、うごきました。 エラーは、実行するとパネルがでて、エラーメッセージはとくになく・・・。 お騒がせしました。
delphi2006っていくらするんですか? delphi6より使いやすいですか?
まだ未発売だし、日本では未発表。だから、誰にも答えられない。
BCBとの統合が楽しみだねー
いや、Delphi だけで十分なんだが。余分のものにも金払わせられるのは気分わるい。
584 :
デフォルトの名無しさん :2005/10/15(土) 00:32:10
参考書に書いてある例題で 「Edit1に1を入力すると'これは1です’とlabel1に表示し、 1以外を入力すると’これは1以外です'と表示させる」 という練習問題があるのですが、その記述方法は i := integer; と書いた後に i := StrToInt(Edit1.text) と記載して、 その後にif文を続けています。 Edit1には0や1などの数字を打ち込むのに、なぜi := StrToIntという風に 文字列⇒整数への変換が必要なのでしょうか? Edit1には整数しか入力できないという限定が特にされていないから、 1や0が入力されていてもそれを一旦「文字」と捉えて、その後に改めて 整数型に変換しないといけないということでしょうか? 教えてください。よろしくお願いします。
Edit1に入力する1は文字の1であって数の1ではないということです。
if Edit1.Text = '1' then のように文字として判断することもできるよ。
すべての整数は、また、すべての実数でもあるので、 Integerの値はそのままRealの変数に代入できる。 逆は必ずしも成り立たないので、切り捨てとか切り上げとか四捨五入とか 変換関数を選んでかまさないといけない。 テキスト(文字列)から整数への対応も、一意じゃないでしょ? もしかしたら16進数で入力されてるかもしれないし、補数表現かもしれないし、区別はつかないし。StrToIntとは別の解釈を行う変換ルーチンは当然存在できる。 (整数と文字列ではメモリ上の表現が著しく異なるというのもある) まあ勝手に変換してくれる言語もあるけれど、Pascalはその辺きちんとしてるから。
588 :
584 :2005/10/15(土) 01:53:48
回答ありがとうございます。 textの中に書き込むものは、見た目が数字でも何でも 全部文字列のものなんですね。 pascal・・・もうちょっと成長してから調べます(,,゚Д゚)
いや数字なんだよ。数値ではない、ってこと。
TreeViewのスクロールバーを消したいんですが、どういった方法がありますか? とりあえずShowScrollBarでも消えることは消えるんですが、 変更がある度に呼び出してもかなりスクロールバーがちらついてしまいます。
なぜ消したいの?
(簡単) TreeViewをパネルの中にでも置いて、スクロールバーの分だけパネルのサイズを小さくしておく。 (面倒) CreateParamsオーバーライドしてウィンドウスタイルのWS_VSCROLL、WS_HSCROLLを取る
CreateParamsオーバーライドしてウィンドウスタイルに TVS_NOSCROLL を追加する
簡単 uses CommCtrl; procedure TForm1.FormCreate(Sender: TObject); var style: LongInt; begin style := GetWindowLong(TreeView1.Handle,GWL_STYLE); SetWindowLong(TreeView1.Handle, GWL_STYLE, style or TVS_NOSCROLL); end;
>>591 別のスクロールバーを使うため、TreeViewのものが不要なので。
>>592 >>593 >>594 WS_VSCROLL、WS_HSCROLLは質問の前に試していたのですが、やりかたがまずいのか効果無しでした。
TVS_NOSCROLLの追加でうまくいったようです。
ありがとうございます。
元Cプログラマなのですが質問させてください。 サブルーチンにあたるものが欲しくていろいろ参考書に当たってみたのですが 作成の仕方を書いてある文章が見つかりませんでした。 【環境】 言語:Delphi6 personal OS:Windows2000pro 【やったこと】 -------------------------------------------------------------- (略) type TTrance = class(TForm) (略) Button3: TButton; procedure keisan(Sender: TObject); ※これをサブルーチンにしたい (その他関数) private { Private 宣言 } public { Public 宣言 } end;
(続き) var Trance: TTrance; implementation {$R *.dfm} procedure keisan(Sender: TObject); var i:interger; begin end; end. ------------------------------------------------------------- 【欲しい関数】C言語において main() {a=keisan(8);printf("%d",a);} int keisan(int i) {return (i*2);} 例なのですがこんな関数が作りたいわけです。 どうかお願いします。
ヒント:function 本当にプログラマだったのか・・?
そもそもCでサブルーチンって言葉は使わないような気が‥‥(;´Д`)
>>596 どういう事?methodでは具合悪いのか?
ほんとにCやってたの?
別でヘッダーと関数書いたらいいじゃん。
procedure keisan(Sender: TObject);
PrivateかPublicにでも宣言しとけ function TForm1.keisan(const Value: Integer): Integer; begin Result:= Value * 2; end;
サブルーチンなんて言葉が死後な若造ですが それってfunctionじゃなくてprocedureを指す言葉なの?
>>602 BASICのサブルーチンなら戻り値ないからprocedureだな。
>>603 そうなんですか。勉強になりました。
ボコスカグローバル変数が出来るのはその為なんですね。
戻り値 void の関数がprocedureでそれ以外がfunctionだお
入門サイト紹介したほうがいいんじゃ・・・・
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
608 :
596 :2005/10/17(月) 15:38:13
ありがとうございます。 そうか、functionか。 DOS時代のプログラマだったので新しい言語のことを全く知らない状態でした。 めんどくさくなったなぁ・・・。
iphelper APIを利用してTCPの接続一覧を取得しています。 この中で特定のアドレスからの接続をこのアプリケーションから 強制的に切断するようなことは可能でしょうか?
>>610 APIスレよりこちらのほうが神クラスの技術者が多いので・・・
>>608 まあCよりキータイプ数多いのは事実だけれども
それはそれでデメリットだけじゃないから慣れるしかない。
>>608 PascalはDOS以前からあったというか…
雑談はフサスレで
( ´∀`)σ),゚Д゚彡プニュ
TObjectListの使い方で、サンプル
ttp://forum.nifty.com/fdelphi/samples/01073.html List:=TObjectList.Create;
for i:= 0 to 2 do
begin
SG:=TStringGrid.Create(self);
SG.Parent:=self;
SG.Left:=0;
SG.Top:=i*120;
List.Add(SG);
end;
で
Destroy時に TObjectList.freeにしているが、先に作ったTStringGridはFreeにしなくても大丈夫なんでしょうか?
>SG:=TStringGrid.Create(self); コンストラクタの引数AOwnerにself(=Form1)を渡すことで 開放の責任はselfが負うようになって明示的な開放は不要になるという TCompnentクラスに共通する性質があるのです。
>>618 dくす
じゃ〜TObjectの継承のものはTObjectListに入れても
Freeしないといけないのですか?
TObjectListの場合は Create(True)としてやるかObjectList.OwnsObjects := True;とすると リストを開放する際にぶら下がっているオブジェクトも開放する機能があります。
>>620 TObjectList.Create(True)としておけば特にFreeを考えなくても良いと言う事ですね。
ありがとうございます。
TObjectList.Delete()に関しても同じように考えてよいのでしょうか?
ためしてみたら? AV 起こるかどうか
>>622 Taaa = class(TObject)で作ったもので試してみました。
TObjectList.Delete();した後、Taaa で作ったインスタンスに書き込みしようとして
エラーが出ました。
TObjectList.Delete();でインスタンスは消えるみたいでした。
raise の後で生成されたTObjectは自動的に解放されるものなのですか? 例えば、以下のコードだとMemCheckが反応しません procedure Hoge; begin raise TObject.Create; end;
Hoge 実行してないとか
ヒント:raise の後で生成された
>>626 ,627
レスありがとうございます
raiseでは自動解放されないのですね
indy9のTIdpop3とTIdMessageについて質問です。 日本語のSubjectでちょっと長いやつ(エンコード後に2行になるやつ) だと変なことになります。 例) 日本語おかしいよ → 日本語おかし 日本語おかしいよ で、Googleでけっこう探したところ、そこそこ有名なバグらしいのですが、 あちこちで解決策として示されているリンク先がサイト消滅していてどう しても答えにたどり着けません。 解決ズバリか、参考になるサイトをおしえてもらえませんか?
>>628 raise では解放されないというより、 raise で作成されたものが、
どこかにあるはずの exceptでキャッチされる
で、このexceptで解放される。
クラスの生成・廃棄がわかりにくかったらこういうコード仕込んで ログ見てタイミングを調べてみるといいかも constructor TMyObject.Create; begin inherited; Writeln(ClassName, ' created'); end; destructor TMyObject.Destroy; begin Writeln(ClassName, ' destroyed'); inherited; end;
ポップアップメニュー表示中はメッセージループってまったく回らないの? それが嫌な場合TThread使うのが定石?
単にポップアップメニューがモーダルなだけであって、メッセージループはまわっているというかそうじゃなければWM_PAINTも処理されないためサブメニューを行ったり来たりしてるとおかしくなるはずではというか。
>>631 それのステータスバーの描画方法がまちがってるんじゃねぇの?
ソースを追え。
>>635 メッセージはちゃんと処理されてるけど
ApplicationProcessMessagesは制御を返さないの?
後者の動作はどうしようもないの?
モーダルループがメッセージループのかわりに回ってるんだよ。
639 :
628 :2005/10/19(水) 11:01:02
>>632 ,633
凄い、本当だ
派生クラスのdestructorにWriteln(F, 'HOGE')を仕込んだところ、
625のコードでもちゃんとHOGEが出力されました
喉の小骨取れました、本当ありがとうございました
TTreeNodes(TTreeViewのItems)のメソッドにAddNodeが追加されたのはどのバージョンからでしょうか? また Delphi6以降に TTreeView が著しく改善されたところがあるでしょうか? Delphi5ではノードが多くなるとTreeView同士のコピー TreeView2.Items.Assign(TreeView1.Items); が遅くなるので、そのへんが改善されていればバージョンアップしたいのです。
641 :
デフォルトの名無しさん :2005/10/19(水) 15:15:52
みなさん、こんにちは Delphi2005を使ってます。 1:多の関係にある明細付きの納品書を入力する画面を作っています。 TQueryコンポーネントを使って、 1側のレコードが移動すると、 自動的に多側のレコードが対応するものに切り替わるところまで作れたのですが・・ 多側のレコードを追加する時に、 自動的に1側のキーをセットしたいのですが、 どうすればよいのでしょうか? TUpdateSQLのInsertSQLに :1側のキー項目名 と書いたのですが、 「型がわかりません」とエラーがでました よろしくおねがいします。
>>641 それは型を指定していないからじゃないか。
FieldByName(項目名).asStringみたいな事を書くのでは。
>>640 > AddNodeが追加されたのはどのバージョンからでしょうか?
今見たらDelphi 7にはあります。
>>640 > AddNodeが追加されたのはどのバージョンからでしょうか?
今見たらDelphi 6にはあります。
実行時にあるフォーム内の子コンポーネントを列挙する方法ってありますか?
Components[]
648 :
646 :2005/10/20(木) 00:34:14
おぉ、こんな便利なプロパティがあったんですね。 素早い回答ありがとうございました。
ボタンを押すとカレントフォルダを開くようにしたいのですが ご教授くださいませ。
>>649 GetCurrentDirectory、ShellExecute
>>650 ShellExecuteでディレクトリだけ渡せばよいのでしょうか?
びくーり。
>>651 /* Delphi2006対応 */
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char path[MAX_PATH];
GetCurrentDirectory(sizeof(path), path);
ShellExecute(Handle, NULL, path, NULL, path, SW_SHOW);
}
TEditを継承して新しいクラスを作ったのですが、デフォルトのフォント周りのプロパティを 変更したいと思っています。 どこを修正すればよいのでしょうか。
>どこを修正すればよいのでしょうか。 デフォルトのフォント周りのプロパティを変更するんだよ。いつ変更したらよいかの 方が難しいと思うが。
655 :
デフォルトの名無しさん :2005/10/20(木) 13:11:55
TListViewコンポーネントで選択行が移動する度に 特定の処理をおこないたい場合はどのイベントを使えばよろしいのでしょうか?
>>653 コンストラクタoverrideして
constructor TMyEdit.Create(AOwner: TComponent);
begin
inherited Create
Font.Color := crRed;
end;
とかすればいいんじゃないの。
657 :
デフォルトの名無しさん :2005/10/20(木) 13:30:12
keypressってどうやって使えばいいの? 文法がわかんない
こんなんじゃ駄目か Editに入力されたキーを表示する procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin ShowMessage('Key = [' + Key + ']'); end;
こんなのとか procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin case Key of '0'..'9': Key := #0 // 数字なら捨てる else Key := Upcase(Key); // アルファベットなら大文字化 end; end;
仮想キーボード使えばこんなのも procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin //バックスペースキーを使用不可にする if Key = Chr(VK_BACK) then Key := #0; end;
661 :
デフォルトの名無しさん :2005/10/20(木) 14:01:01
>>658-660 Editでしか使えない?
描画した図形をあるキーを押したら少し移動するみたいな使い方をしたいんだけど
ヘルプの検索にKeyPressって入れると対応するクラス一覧が出る。 TWinControlならほぼすべて使えるから KeyPreview:=TrueしてFormでキー入力をトラップするのが楽かも。
Form.KeyPreview := Trueでフォームがキー入力を受け取るようにして フォームのOnKeyPressイベントに下のような処理を追加する。 後は十字キーが押された時の処理を書けばいい procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin case Key of Char(VK_UP) : //図形上へ移動; Char(VK_DOWN) : //図形下へ移動; Char(VK_LEFT) : //図形左へ移動; Char(VK_RIGHT): //図形右へ移動; end; end;
664 :
デフォルトの名無しさん :2005/10/20(木) 14:48:01
>>663 早いレス、どうもです
家に帰ったら、さっそくやってみます
次の授業が始まりそうで、これ以上学校でやれないのが悔しい
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
TntRichEdit と EM 系メッセージ… Win9x じゃ使えねーじゃねーかよ!ぷんぷん!!
667 :
629 :2005/10/20(木) 22:38:02
629で質問した件、誘導されていったIndyスレで解決しました。 もしかしたら他にも興味あるかたがいるかもしれないのでご報告。 > 日本語のSubjectでちょっと長いやつ(エンコード後に2行になるやつ) > だと変なことになります。 > 例) 日本語おかしいよ → 日本語おかし 日本語おかしいよ IdCoderHeader.pas function DecodeHeader(Header: string):string; (略) begin s := ''; ←追加 while Length(substring) >= 4 do いじょ
音楽の一括エンコードができるようなソフトを作っています。 Delphiは6Personalです。 エンコードリストにTListBoxを使っているんですが、 デスクトップなどからD&Dしたときの処理に困っています。 ・D&Dしたファイルが.wav、.ogg、.mp3なら追加。 それ以外なら追加しない。 ・フォルダがD&Dされた場合、フォルダ内の.wav、.og(ryを検索して追加。 発見できなければShowMessage('使えるファイルねぇよ!(`Д´)プンプン'); お願いします。
お願いしますって・・・・その通り書けばいいんじゃないの? 何かわからない所があるならチャント言ってくれ
早朝からサポートご苦労様です。 Q1 D&Dはどうやるのですか? Q2 拡張子の比較はどうやるのですか? Q3 フォルダの識別はどうやるのですか? Q4 フォルダ内のファイル一覧はどうやるのですか? といったところです。 お願いします。
A1 google「delphi ドラッグアンドドロップ」 A2 ケツの4文字 A3 ↑ A4 findfirst next 人に教えられる程スキルを持った人間ではないけどこんな感じ?
if AnsiMatchStr(LowerCase(ExtractFileExt(filename)), ['.wav', '.ogg', '.mp3']) then ShowMessage('sound file');
673 :
668 :2005/10/21(金) 08:12:59
中途半端ですみません。 複数ファイルがD&Dされると渡されるファイル名はTStringなので、 その中からサウンドファイルを抜き出す→リストへ追加という動作をさせたいと思ってます。 フォルダ判別に関しては解決しました。 ありがとうございました。
674 :
668 :2005/10/21(金) 08:22:13
訂正 TString→TStrings
675 :
668 :2005/10/21(金) 08:51:48
何度もすみません、自己解決しました。 ListBoxの各行にアクセス→判別→処理 この繰り返しです。 スレ汚し失礼しました。
TWebBrowserで
TWebBrowser.Cursor := crNone;
っとしているのですが、Navigate('
http://localhost/ ');などとすると
マウスカーソルが出てしまいます。
TWebBrowserのマウスカーソルを出ないようにする方法ありますでしょうか?
677 :
デフォルトの名無しさん :2005/10/21(金) 22:52:03
すみません。書き込む場所を間違えました。 こちらで質問させてください。 Googleで検索しても見つからないのですが、 指定したフォルダの下層フォルダ一覧を調べるにはどの関数を 使えばいいでしょうか。
>>677 FindFirst,FindNext,FindClose辺りの関数でゴリゴリと書く。
フォルダの階層がいくつもあって、それらも処理したければ再帰処理で繰り返す。
ボタンの色を変えたいのですがプロパティにないようです。 変更不可でしょうか?
確かボタンの色はゲイツのお気に入りだから、 変更するには独自描写が必要だった気がする
まじっすか?ここだけはVBに負けますね
>>679 自分で描けばできるけど、キャプションも自分で描く必要有り。
詳しくはオーナードローで。
>681
VBはランタイム自体が独自描画している(RADを実現するためらしい)
その副作用で色が指定できるになった。
最近Delphiを始めた者です。 BorlandのHPにDelphi6 Presonalのアップデートパッチがあるのですが、 何度やっても接続に失敗します。 Irvineをつかってもダメでした。 この事項は既出でしょうか? 対処法のご教授願います。
あとFWソフトでFTPの使うポート20,21をブロックしてたら首吊るといいお
>>684 ,685
回答ありがとうございます。
が、いずれの方法でもダメでした。
FFFTP…「"
ftp://ftp.bor (略"が見つかりません」
IE…パッシブモードは既にON
FW…port20,21は通過
コマンドプロンプトでpingしてみると「ホストが見つかりません」になるので、
サーバーが停止しているようです。
元を正せば、エラー「classes.pasが見つかりません」を解決したいだけなんですが。
>>回答していただいた皆様 常駐していたPeerGuardianを停止したところ、即繋がりました。 ご迷惑をおかけしました。 LAN・USBの二重コードで吊ってきますo...rz
逆に良くある
二つのフォームを用意して、片方のフォームにEdit欄用意してURL入れてNavigateしたら もう一つのフォーム(Editの欄が無いフォーム)にWebbrowserを表示させるように連動(?) させたいのですが、どう記述すべきでしょうか。
一つのフォームでは出来るの? それなら話は早いが
「どう記述すべきでしょうか」って質問って、 どう答えれば良いのか分からん。 どういう答えを期待してるのか? 「ソース出して」ってこと?
695 :
デフォルトの名無しさん :2005/10/23(日) 17:24:10
>>690 とりあえず、Form1のEdit1に入力された文字列をForm2のLabel1に表示させるコードは書けるのかな。
696 :
690 :2005/10/23(日) 17:39:58
すいません、返答が遅れました。
無事解決しました。ほぼ
>>519-526 と同じような事でした。
ありがとうございました。
XPスタイルに対応させようと思い、Delphi6 Personalでコンパイルした実行ファイルと同じフォルダ内にmanifestファイルを作成しました。 ところがViewStyleをvsReportにしたTListViewを設置しているフォームが開かれた瞬間 「モジュール 'kernel32.dll' のアドレス 77E683EC でアドレス 00467088 に対する書き込み違反がおきました。.」 と言う内容のエラーダイアログが表示されるのですが、何故でしょうか? 違うマシンで試しても同じ結果に至ったので恐らくDelphi側の問題だとは思うんですが・・
698 :
697 :2005/10/23(日) 23:46:48
http://leo10.cse.kyutech.ac.jp/yamada/builder_bug.html [manifest]
アプリケーションをWindowsXPスタイルにする方法に、manifestファイルを用いる方法がある。
しかしこの方法では、TListViewを用いているアプリケーションでは kernel32.dll が読み込み違反エラーを吐いて
起動に失敗する場合がある。(Delphi,C++Builderで作成されたアプリケーションの場合)
(回避方法)
→TListViewのカラムヘッダにイメージを入れると正常に起動される。
または、カラムヘッダを表示しないようにする。
ググってみたらこんな物を見つけたんですが、これ以外に回避法はないんでしょうか?
699 :
186 :2005/10/23(日) 23:54:31
やはりカラムヘッダにイメージを挿入する事にしました。お騒がせしましたm_m
treeViewとListViewの連携がやりたいですが うまく動きません。 OnChagingでListViewのアイテムを数えて メモリを確保して、配列に入れて、Nodo.Dataにポインタ OnChangeでListViewのアイテムをClearして、指定したNode だったら、配列を数えて、ListViewにItemを追加のですが treeViewでどのNodeをクリックしても、最初の配列が残ってしまいます ------------------------------------ treeView | ListView | rootnode | caption | subitems ┣-aaa |------------ ┃ ┣111 <-- | ┃ ┗222 <-- | ┣-bbb | ------------------------------| よろしくお願いします
701 :
700 :2005/10/24(月) 00:22:39
//つづき ///////////////////////////////////// type Pdata = ^TIndexData; TIndexData =Record code :string; index :string; end; IndexDataArray = Array of TindexData; TMainForm = class(TForm) //////////////////////////////////////// private { Private 宣言 } rootNode : TTreeNode; ////////////////////////////////////// var MainForm: TMainForm; CArray :IndexDataArray; ///////////////////////////////////////// procedure TMainForm.TreeView1Changing(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean); var c,i : integer; begin c := ListView1.Items.count;
702 :
700 :2005/10/24(月) 00:23:30
//つづき SetLength(CArray,c); For i := 0 to C-1 do begin CArray[i].code :=ListView1.items[i].subitems[0]; CArray[i].index:=ListView1.items[i].caption; end; node.Data := addr(CArray); end; procedure TMainForm.TreeView1Change(Sender: TObject; Node: TTreeNode); var C : integer; i :integer; ListItem :TListItem; begin ListView.Items.Clear; if (Node = rootNode) or (Node.Parent = rootNode) then exit; begin c:= Length(CArray); For i := 0 to c-1 do begin ListItem :=ListView1.items.add; ListItem.Caption :=CArray[i].index; ListItem.SubItems.Add(CArray[i].code); end; end; end;
チャットプログラムに最適な (サーバー・クライアント) クラスライブラリを教えてください。
Indy
Unzip.DLLとかない環境でzip解凍圧縮を可能にするコンポーネントが あったような記憶があるのですが、そういうのありましたでしょうか?
あったねぇ
おしえてくだせぇー
torryというところにあるのでいいのでしょうか? よくわかりませんが、ダウンしてみます。ありがとうございました。
>>705 むかしイロイロと探したが日本語使うとおかしくなるのが多かった。
ヘッダーとフッターの作り方さえ知ってれば圧縮自体はzlibだよ。
僕ならUnzip.DLLをリソースに仕込んどいて使う時にどっか(Tempフォルダあたり?)にピーコして使います。 本末転倒ですが(w
>>711 小心者の僕も同じですね〜プログラム終了時に消しておけばバレない(マテ
環境非依存にしたいならスタティックリンクしとけ
cabを使うのが流行りですよ
ルータのUPnPのコンポーネントはありませんか?
Delphi6PersonalにはUDPコンポーネントって無いのねorz
>>717 Indyはちょっと大げさなのでAPIで実装することにしました。
VCL つかってて Indy が大げさってことはないだろ
UPnPごときにIndyはおおげさだろう
UPnPごときにVCLにおおげさだろう
ツンデレが似合うのはおさげだろう
苦しすぎ
今IEをコンポーネントとして、ブラウザ作ってるんですが SleipnirやOperaにあるようなwebページのズームイン・ズームアウト表示がやりたい んですが、そどうすれば良いんでしょうか。
726 :
デフォルトの名無しさん :2005/10/25(火) 00:06:58
delphiに限らない質問かもしれませんが・・・。 プログラミング未経験者で初めて参考書を買って独学をしているのですが、 そのdelphi参考書は「ここはこういう理由でこういう書き方がされている」等の 理由や説明がほとんどなく、例題にあるソースをそのまま自分のパソコンに 打ち込んでいるだけで、「理解している」のではなく「例題をそのまま覚えている」 だけのような気がします。 (私と同じ本を買った人もアマゾンのカスタマーレビューで同じようなことを書いてました・・・。) みなさんは最初にdelphiを勉強した時は、最初は取り敢えず丸暗記で、後から 内容を理解するという方法だったのでしょうか?それとも1個ずつ理解しながら 勉強していったのでしょうか? 本当に初心者なので、今の丸暗記方式をこのまま続けていってもいいのか心配です。
>>726 質問部分には答えよう
オレは丸暗記も1個ずつ理解とやらもしなかった
文法以外は面倒だから覚えず、作りたいものを
サンプル見ながら適当に作っていたら
いつの間にかここで回答者にまわってた
>>726 自分は、ずーっと前にその段階だったので記憶が定かではないが、最初は操作自体を
覚えるのも重要です。その本は、それだけのものと思って割り切ることが必要です。
でも、どうしてこうなるのか、と考えながら、自分は何が分からないのだろうか、
ということを知ることが重要です。
自分の場合は、*.pas ファイル、つまり、ユニットファイルの構造を理解し始めた
ときから急速に理解がすすんだように思います。OOP も、IDE では設計時に
TForm の派生クラスを作っているんだ、イベントはそのメソッドなんだ、と
分かりはじめたらしめたものです。
その本より優れた入門サイトがけっこうあります。おすすめは「Seventh Delphi」
です。ググって見ればすぐ見つかります。コードと説明の対応をじっくり学ぶと
じわじわと理解が進むことを実感できるようになります。
>>726 そうは言うけどな、いきなりクラスがどうたらバーチャルがなんたらの説明ば
かりあっても初心者では理解できんよ。確実に。
サンプルを暗記っていうのはまず第一歩としてはいいと思うよ。
んでそれをちょっとづつ改造していくと。そのうち壁にぶつかるからその時に
ぶつかった壁をいっこづつ調べて理解していけばいい。
まあ学習の仕方なんて人それぞれだろうからいちがいには言えんが、俺の
場合はそうだった、という例で参考にしてくれ。
ところでその本のタイトルもあげると先人のアドバイスもつきやすいのでは
ないかな。いくらサンプル丸暗記といってもダメなのとイイやつの差はあるし。
731 :
726 :2005/10/25(火) 01:01:01
みなさんご助言ありがとうございます。
>>727 そちらの方が適したスレだったかもしれません。すみません。
>>728 作りたいものがあるっていうのは、やはり勉強を進めるには
大きな力になりそうですね。私がしたいことは、私が勤めている会社で
作っているソフトがdelphiで組まれてて、そのソフトがどうして
こういう動きをするのか理解したかったのでした。
>>729 今そこのサイトを拝見させてもらいました。私が買った本よりも
情報量が多くて親切な気がします。これからはそのサイトもみて勉強してみます。
>>730 そうですね。確かにいきなりレベルの高い話をされても理解できなくて
投げ出してしまうかもしれませんね・・・。ちなみに私が買った本は
「delphi はじめの一歩(池田成樹著)」という本です。
池袋の大きな本屋さんを2箇所と、地元の本屋さんを回って、どこでもこの本が
売っていたので、余程支持されている本かと思って購入しました。
「Delphi Acid Floor」ってサイトも良いぞ オレは「Seventh Delphi」とそこを見ながら基本を覚えた
Delphiでビットフィールドは使えるのでしょうか?
>>733 ": 1"しか要らないのであればビット位置を値として指定した列挙型のset。
2ビットとか4ビットとか要るのであればシフト演算でなんとかするしかないなあ。
最初は基本を暗記、慣れたら応用、はごくあたりまえのことだろ。 1ヶ月たって応用が利かないようならプログラマの素質ないからあきらめろ。 プログラマもプロ野球選手と一緒で誰でもなれるようなものじゃない。 コーダーなら誰でもなれるけど。
屁理屈だな
やりたい奴がやる。やらなきゃいけない奴がやる。それでいいんだよ。
使えません
739 :
デフォルトの名無しさん :2005/10/25(火) 12:33:58
クラス名の前につくTって何?
型(Type)の略。Fはフィールド、Iはインターフェース。他にあったっけ?
Eがあった。例外(Exception)だったね。
742 :
デフォルトの名無しさん :2005/10/25(火) 13:15:53
んじゃDelphi2005でも名前空間のことはunit、クラスのことはtype、メソッドのことはプロシージャと呼んだほうがいいのかな?
> クラスのことはtype ちがうでしょ
744 :
デフォルトの名無しさん :2005/10/25(火) 13:22:29
>>743 そうなんですか。
でもとりあえず、unitは名前空間のことでいいんですよね。
TってTypeだったんだ てっきりAPIのTag×××のTかと思ってた
意味は無いけど慣習上 T をつけるって聞いたぞ
Typification じゃなかったか。
お前らソースを出せ
Delphi 6 プログラミングバイブルの83ページに慣習って書いてある・・ が、これが正しいかどうかは知らないよ
結局「T」ってなんなんだ? Delphiの中の人の発言はないのか?
751 :
デフォルトの名無しさん :2005/10/25(火) 15:50:57
わーん。 派遣会社からDelphiとOracleの仕事どうですかって言われたよ。 javarerの漏れにはまったくわからない…
MFCだってクラス名の頭にC付けるんだから深く考えんな
TObject派生クラス = Txxxx それ以外のクラス = Cxxxx にしてるBCB使いの漏れ
>>753 TObjectから派生しないクラスってあるの?
いや、ハア?じゃなくてあるかないか聞いてるんだけど
Delphiではなく BCBではという事なんじゃないの?
>>754 C++Builderの話だろ。
C++にはVCLの最上位クラスを継承しない野良クラスを作れる。
作れなかったら、newしなきゃならんという制限を受け継ぐので大変
761 :
751 :2005/10/25(火) 22:01:59
Delphi.netのイベントにイベントハンドラを登録したり外したりするわけのわからないメソッドIncludeとかExcludeって何? どこの名前空間なの? C#にはこんなのなかったぞい。
>>761 Pascalには無い+=と-=の両演算子の代わりとして、元々集合を扱う手続きが流用されてる。
名前空間はBorland.Delphi.Units.Systemになるんだろうけど、実体の無いコンパイラマジック。
764 :
751 :2005/10/25(火) 23:11:14
>>763 それにしても
System.EventHandlerデリゲートがまったく出てこないのはどういうこと?
26日をお知らせします
誤爆スマン
誤爆の上に一秒遅いとは何事か 反省正座
26日キタ━━━━━━(゚∀゚)━━━━━━ !!
>>754 type THoge = object
end;
質問です。 ClientDataSetに対してSQL(Select)文を発行し、 その結果をGridに表示したいのですが、可能でしょうか? ↓のコンポーネントを用意して自分でやってみたのですがどうも上手くいきません・・・ ・ClientDataSet ・Query ・DBGrid ・DataSorce Delphi始めたばかりなので、コンポーネントの使い方とかよく分かっていない状況です。 これだけのコンポーネントを用意しておけばできるものなのでしょうか?
スタンドアローンならClientDataSet使う必要ないと思うけど C/Sもしくは3層以上のシステムだったらTClientDataSetにデータプロバイダってのが必要
>>772 レスありがとうございます。ClientDataは使わないとダメなのです・・・(事情は省略させて下さい)
やりたいことは、、、
現状こうなっているのを↓
ClientDataSet ⇒ DataSorce ⇒ DBGrid
こうしたいんです↓
ClientDataSet ⇒ Query(ClientDataSetに対してSUM関数、GroupByを使用したい) ⇒ DataSorce ⇒ DBGrid
これのどこにデータセットプロバイダというのを挟めばよいのでしょうか?
教えて君ですみません・・・。宜しくお願いします。
>>774 ClientDataSetは問い合わせの結果をもらうもの。自前で問い合わせを行うことはできない。
やるんだったら最低C/S形式する。C/S間の通信はTSockectConnectionでTCP/IPが楽
1台でやるならIPアドレスを127.0.0.1に指定する
図で書くとこんな感じ
クライアント部(サーバーに問い合わせ結果を貰う))
TDBGrid←TDataSorce←TClientDataSet → サーバーへ
サーバー部(クライアントからの要求に基づきSQLを発行して結果を返す)
クライアントへ←TQuery←TSession←TDatabase
Form1にあるEdit1にURLを入れて、Form2.Show で別窓(Form2)のWebBrowserにForm1のEdit1で指定した URLのページを表示させる事は出来たんですが、そのForm1から表示させたForm2がアクティブになったら もう一つ別窓(Form3とする)に同じWebページを表示させる って動作をさせたいのですが、 Form2側の、OnActivateイベントで Form3.WebBrowser1.Navigate(Edit1.text); Form3.Show; とやってもForm2にEdit1は無いのでエラーが出ます。Form3にNavigateする方法は他にあるんでしょうか? ご教授お願いします。
すっごくよろしくないやり方だけど Form3.WebBrowser1.Navigate(Form1.Edit1.text);
ひどいUIだな
どうでもいいが、ユニットファイルをまたぐ参照についていちいち質問するつもりですか? ちゃんと uses の意味を考えてくださいね
780 :
デフォルトの名無しさん :2005/10/26(水) 19:48:47
DelphiでC/Sシステムを開発するために、 書籍でステップごとに作りながら理解できる、お勧めの書籍はありますか? amazonでの評価を信じて買ったものが、どれも内容が薄すぎて・・・(TーT
オフィシャルコースウェアは、どうよ。 古めだがDelphi 4あたりの方がプロっぽい感じがする。
あ、ClientDataSetというかMIDASを使う予定なら Delphi4とはクラス名が異なるので、新しい奴を買ったほうが良いと思う。
>>780 Delphi 4プログラミングバイブルっていう青い表紙で分厚い本がオススメ
C/SのみならずDelphiに関する基本的な知識が網羅されてる
IDispatchって、アプリ終了前にnilを入れてやらないと、例外が起きるんですか?
今スレッドを使う練習をしています。 子スレッドからメインスレッドのTList,TStringList等や普通の変数といった 実行時に目に見える形となって出てこないものを操作するときも、 Synchronizeを使わなければいけないのでしょうか?
子スレッド動作中にメインスレッドでアクセスしたり、破棄したりといった事が 絶対に無いのであれば、Syncしなくても大丈夫です。 もしアクセスしてしまったりすると・・・
普通の変数については、一般的には ・片方が作って片方が読むだけ(32bit変数まで) ・そうして作ったセマファーで読み書きをブロックした上で双方が読み書きする というようなことをやらなければいけない 読み書き単位は32ビットなので、それを超える多倍長なデータ等は 同時に作成されたかどうかわからなくなるので注意。 もっともSleep命令の直後なんかは大丈夫だろうけど、どこまで大丈夫かわからんからね
>>786 TControlに絡まないデータ周りのものはCriticalSection使った方が軽い
790 :
780 :2005/10/27(木) 10:29:05
>>781-783 ありがとうございます 。・゜(ノ´Д`ヽ泣)゜・。
Delphi2005を使うのですが、
古いバージョンの本でも大丈夫なんですね
探してみます
791 :
751 :2005/10/27(木) 10:44:08
Delphi2005で.netフレームワークのデリケートを扱えますか?
>>791 デリケートってdelegateのことか?
Win32プロジェクトなら無理だし.NETプロジェクトなら当然使える。
>>787-789 ありがとうございます。
CriticalSectionは少し調べた限りだと、あまり難しくなさそうなので試してみます。
あと、ここの過去ログに書いてありましたが、スレッドセーフなTStringListとして
TThreadStringListというのがあるみたいなので、それも試してみようと思います。
>>786 シングルプロセッサと、SMPやAthlonX2のようなデュアル環境で
動作が異なる事のないように、できれば両方使える環境で
遊んでみられる事をお勧めしたい。
シングルで問題なく動いてたのに、SMPにした途端・・・・って
バグに泣かされてきましたから。
何言ってんだこいつわ
何の関係も無いな。
>>788 ,795
初心者スレで無理して答えなくていいよ。
799 :
デフォルトの名無しさん :2005/10/27(木) 21:05:17
ラベルを縦方向に中央表示させ、枠線を付けたいのですが、 TLabelでは枠線がなく、StaticTextでは縦方向に中央表示できませんでした どうすればよいのでしょうか?
二つ重ねる
TStaticText + SS_CENTERIMAGE
802 :
751 :2005/10/28(金) 00:06:05
>>792 そうです。
クラスでもなく、インターフェースでもないデリゲートです。
>>793 やっぱりそうなんですね!!
では、Includeとかいうのを使わないでC#みたくSystem.EventHandlerデリゲートを使った
イベントハンドラの登録の仕方を教えてください。m(_ _)m
delegateはデリゲートとは言いませんよ。 installのことをインストゥールと言うくらい恥ずかしい。
804 :
751 :2005/10/28(金) 01:01:34
わーん、そんなレス良いですから、Delphiでどうやってdelegateを扱うか教えてよ。 Google見てものっていないんだよ。
デリケートです
808 :
デフォルトの名無しさん :2005/10/28(金) 02:39:59
繊細です
きっと
>>803 は
gifはギフとは言いませんよ。
installのことをインストゥールと言うくらい恥かしい。
とか言ってしまう恥かしい人なんだと思うよ
install→いんすたるる gif →じふ
811 :
デフォルトの名無しさん :2005/10/28(金) 15:30:12
書き込み禁止にされているFDに対して AssingFileを行いReWrite手続きを行うとエラーが発生しますが 例外をtry〜exceptで捕まえられません。どうしてでしょうか?
{$I+}してないとか
>>811 ベタだけどダミーのファイルをCopyFileでコピーして
失敗したらプロテクトされてると判断するとか
エラーメッセージは OSが出してるんではないの? 10年くらい前に、その手のエラーを出さない方法云々でごちゃごちゃやった気がする。
FD SetErrorMode で調べたらそれらしい情報が
>BYTE*がPCharでもPByteでも どれも8Bits順序値へのポインタに変わりは無いから互換性がある。 しかし、 >UINT*がPCardinalでもCardinalでも動作する そんなことは無いだろう。 ポインタ型とプリミティブ型は明らかに別物だ。
819 :
818 :2005/10/29(土) 03:29:34
自己レススマン BYTE*に関しては、よく考えるとポインタなら何でもいいんだな。
あるバッチをdelphiから起動するのですが それが終了するまで待機させたいのですが どのような方法があるでしょうか? よろしくお願いします。
CreateProcess
822 :
デフォルトの名無しさん :2005/10/29(土) 11:42:33
質問があります。 今、TClientSocketを使ってプログラミングをしています。 これを使ってサーバに80ポートで接続をし、 ClientSocket1.Socket.SendText('Get /'+#13#10); とした所、501が返ってきて、ほしいページのHTMLは返ってきませんでした。 サーバに接続をして、HTMLのソースをダウンロードするには、どのようにしたらできますか?
>>822 用途に合わせて
URLDownloadToCacheFile
URLDownloadToFile
ついでにHTTPのリクエストヘッダは「GET / HTTP/1.1\r\nHost: hostname\r\n\r\n」だったような Hostヘッダ抜くとバーチャルホスト使ってるサーバだと要求してるデータが取れないぞ。
825 :
820 :2005/10/29(土) 12:11:23
ShellExecuteで起動しているのですが それで帰ってくるHINSTANCEを1秒おきにしらべて 起動しているかどうかというようなやり方がいいのですが 可能でしょうか?
Ex
>>822 ステータス501だからリクエストが認識されていないみたいだね。
"Get" ではなくて全部大文字の "GET" にしてみたら?
828 :
820 :2005/10/29(土) 12:16:33
GetModuleUsage() というのがあるようです。ちょっとやってみます。
telnetで叩いてみたけどApache1.3.29だとGETが小文字だと501、GETだと200返してくるな
830 :
822 :2005/10/29(土) 12:28:44
>>827 大文字にしてみたらうまくいきました。
大文字と小文字は区別されるんですね。Del使ってたからCの頃を忘れてました。
それで、データは見れたんですが、サーバがWinじゃないので日本語が文字化けをしてしまいます。
これをWinでも見れるようにするにはどのようにすればいいですか?
連続の質問で申し訳ない。
831 :
827 :2005/10/29(土) 12:43:58
>>830 >大文字と小文字は区別されるんですね。Del使ってたからCの頃を忘れてました。
HTTPのプロトコルレベルの話だから、DelphiだとかCだとかは関係ないだけどね。
日本語の件はデータ内のMETA情報から取得するなり、文字コードをスキャンして
文字コードを判定、変換する処理を自分で書く必要がある。
キツイことを言うようだけど、HTTP直叩きするのなら関連するRFCぐらいは
自分で読まないとしんどいと思うよ。
832 :
822 :2005/10/29(土) 13:06:19
>>831 ありがとうございます。とりあえず日本語なRFCをググってきます。
833 :
デフォルトの名無しさん :2005/10/29(土) 13:07:40
/´ ̄\ <ノ_(从_)> ∩ ヽ - / ∩ < (3 ) \/ ( E)
834 :
デフォルトの名無しさん :2005/10/29(土) 17:24:15
コンソールアプリで Writeln('hogehoge'); の1行だけ書いたものをバッチから @echo off Project1.exe pause というように実行すると、コンソールウインドウに hogehoge 続行するには何かキーを押してください . . . と表示されますが GUIアプリでEditとButtonを配置し バッチから実行してEditに文字を入力しButtonを押すと Editに入れた文字をリダイレクトするものを作りたいと思っています (バッチで直接入力を拾えとかは無しの方向で) AllocConsoleでコンソールに書き出す方法は解ったのですが、 バッチにリダイレクトする方法がわかりません。 ググっても子アプリの標準出力を得る方法とかは見つかるんですが 出力する方はよくわからないです 具体的な方法が解る方が居ましたら、ご教示お願いします WinXP Delphi6Personalです
ListViewで条件に一致するアイテムを全て削除するにはどうしたらいいですか? アイテムが削除される度に以降のアイテムのインデクスが1ずつ減っていくので上手くいきません・・
>>835 そういう場合は、お尻側から削除していくのが定石
>>836 その言葉を聞いて自分はまだまだだなぁ〜と実感してしまいましたw
ここまで瞬時に「成る程」と感じたのは久しぶりですた ありがとうございます><b
839 :
デフォルトの名無しさん :2005/10/29(土) 19:26:28
WideString版StringReplaceなんてのは存在しないのでしょうか?
841 :
デフォルトの名無しさん :2005/10/29(土) 20:52:48
1:多の関係にあるテーブルの 1側のTQueryコンポーネント(TUpdateSQLあり)を更新しようとした場合、 データベースにStartTransactionを行い、Commitするとエラーになります。 多側のTQueryコンポーネントが、この1側のTQueryコンポーネントをリンク設定しているので、 多側のコンポーネントのACTIVEをFALSEに設定して、 StartTransactionすると問題なく更新できました。 リンク設定されているTQueryコンポーネントで、 StartTransactionを使って更新するには、どうすればよいのでしょうか?
842 :
839 :2005/10/29(土) 20:56:50
>>840 TntSysUtils.pas内にTnt_WideStringReplaceというのがありこれがドンピシャでした。
本当にありがとうございました。
843 :
816 :2005/10/29(土) 21:35:44
CardinalじゃなくてIntegerか まあいいや
>>840 TntSysUtils.pas内にTnt_WideStringReplaceというのがあり、どう見ても精子です。
本当にありがとうございました。
?
848 :
834 :2005/10/30(日) 10:04:28
>>838 レスありがとうございます。
でもダメでした。
>>834 について、ちゃんと動くサンプルを知ってる方、又は書ける方
どうかよろしく御願いします。
一旦ファイルに書き出して、cmd.exe経由で、 <, >, |でリダイレクトさせたらどうなるんだ?
850 :
834 :2005/10/30(日) 10:40:03
>>849 現在、リダイレクトを使わず、ファイルへの書き出しと読込で処理してますが
ファイルへの書き出しなどをしたくない為に質問に来た次第です。
よろしく御願いします。
つか動かないにしてもコードがあるんだからキーワード拾って検索かけろよ。 C/C++のコードくらいは見つかるだろ。
ごちゃごちゃ言わずに知ってたら回答しろよなぁー。 知らないなら黙れ。
で、君はわかるの? ここは超初心者スレなんだから Cのコード拾えなんてレスは検討違い わかるなら答える、わからないなら黙ってる たったそれだけでいい 漏れは今回の件はわからないから質問者には無駄レス付けない
> わかるなら答える、わからないなら黙ってる
禿道!
>>851 みたいのないほうがいいな
855 :
834 :2005/10/30(日) 11:08:01
>>851 C/C++のコードを見つけても、無知な私では何の用も足せません。
Delphiでの具体的な方法を知ってるなら示教して頂けませんか?
知っているがお前の態度が気に食わない
と、言うだけなら知らなくても言える
>>834 単純にGUIアプリで作った後に
{$APPTYPE console}
を入れたのではダメなの?
TList とか TStringList は Free すれば Clear する必要はないのでしょうか? それとも Clear してから Free すべきなのでしょうか?
FreeするときClearされるよ たぶん
ClearすればFreeされる それよりも Freeする前にTListの場合は保持しているオブジェクトを解放 TStringListの場合はAddObjectでオブジェクトを関連付けている場合解放 これを忘れると嬉し恥ずかしメモリリークが発生します
TMemoryStreamやTFileStream、TStingStreamはSizeプロパティより先に書き込もうとすると勝手に領域確保してくれますか?
はい。 普通は Size を意識する必要はないです。
>>861 わかってると思うけど、
>ClearすればFreeされる
というのは逆
865 :
861 :2005/10/30(日) 16:55:00
恥ずかしい・・欝だ
866 :
834 :2005/10/30(日) 16:56:06
>>858 レスありがとうございます。しかし知りたいのはコンソールアプリにGUIを付ける方法
(=GUIアプリで作った後に{$APPTYPE console}) ではなく
GUIアプリでリダイレクト出力する方法です。
コンソールアプリとして出力するのではなく、コードに因って出力する方法をお願いします。
867 :
デフォルトの名無しさん :2005/10/30(日) 18:17:26
>>866 出先からなんで検証はしていませんが、writelnは、GUIからでも標準出力に書き出せるはずだけど。
ボタンのクリックイベントにwritelnでコードを入れてはどうでしょう。
> バッチにリダイレクトする方法がわかりません。 標準出力のことじゃないんだよ。 バッチはそれ自体がプロセスじゃないから、リダイレクトとは違うんじゃないの? ファイル経由とか・・・
>>866 いいから試してごらんよ。
GUIとしてコンソールを持たずに起動したら、標準出力したって、誰が受け取るんだい?
リダイレクトするには、GUI付のコンソールアプリにするしかないだろ?
だからコンソールにして出力できたとして、どうなるわけでもないでしょ。 当たり前なんだから。
871 :
869 :2005/10/30(日) 19:04:45
だから、やりたい事はなんなのよ。 >バッチから実行してEditに文字を入力しButtonを押すと >Editに入れた文字をリダイレクトするものを作りたいと思っています という事をやりたいなら、 1) GUI付のコンソールアプリか、 2)コンソールアプリとGUIの2つを作って通信 させるしかない。 で2は面倒くさいだけで1と見かけは変わらない。 コンソールから起動したアプリに出力しなければリダイレクト出来ないのだから。
872 :
869 :2005/10/30(日) 19:06:10
とにかくさ、とりあえずやってみて、それでドコが気に入らないのか言ってくれよ。
なんでこの子は熱くなってるの?
まだ誰も例のコンポにたどり着けないのか。 アホやね。特に869
例のコンポwwww
876 :
846 :2005/10/30(日) 23:42:42
877 :
デフォルトの名無しさん :2005/10/30(日) 23:52:34
delphi 2005の無料版をダウンしてインストールしたらエラーが出てきました。
878 :
デフォルトの名無しさん :2005/10/30(日) 23:59:06
よかったですね♥
879 :
デフォルトの名無しさん :2005/10/31(月) 00:39:51
Delphi6 Personalです。 RichEditで文字列を入力するようにしているのですが、64k(65,546バイト)以上は 入力することが出来ません。コードでTextプロパティに直接入れると64k以上でも 入るのですが・・・ この制限を回避する方法はないでしょうか?
>>879 RichEdit.MaxLength := $7FFFFFF0;
とか
SendMessage(RichEdit.Handle, EM_EXLIMITTEXT, 0, $7FFFFFF0);
とか。
>>879 MaxLengthの値を増やすんだ。0だと64Kに制限される。
ただしあまり大きな数指定するとやたら時間かかることがある
882 :
879 :2005/10/31(月) 01:13:28
>>880 ,881殿
即レス感謝です。
MaxLengthを適当な値に設定することにより実現できました。
どうもありがとうございました。
サイズをメガバイト単位で指定できるコンポーネントなんかを TCustomRichEditを継承して作ってみるといいよ 自分でコンポーネント(クラス)を作れるともっとDelphiが楽しくなる
> Application.ProcessMessages; じゃなくて Image1.Refresh;
TListViewでどこをクリックしてもクリックした行の先頭(Columnsの0の列)にある captionの内容を取得するにはどうすればいいのでしょうか?
ListView1.Selected.Caption;
>>884 システムパレットのエントリを使ってるのが間違い。RGB の換算できない。
Pixels[] だと TColor の定義上うまくいくが。
あと、ScanLine をつかってもあまり速くならない。for ix ループで再描画してる
のが遅い原因。再描画を最後の1回だけにすると劇的に速くなる。
890 :
887 :2005/10/31(月) 06:55:10
>>888 遅くなって申し訳ないです。
RowSelectをFalseにしたままだと取れないんですね。Trueにしたら問題なくできました。
有難う御座いました。
>>889 > システムパレットのエントリを使ってるのが間違い。RGB の換算できない。
> Pixels[] だと TColor の定義上うまくいくが。
DotColor := PaletteIndex(i mod 20) + 1;
のところだと思うのですがこれ以前ぐぐって見つけたものをそのまま使っただけです。
RGB の換算は具体的にはどうすればいいのでしょう?
地道に普通の TColor の配列つくる
あと ScanLine[ix] じゃなくて ScanLine[iy] とし、ix の分だけ PRGBTriple ポインタを インクリメント
894 :
デフォルトの名無しさん :2005/10/31(月) 10:50:47
こんにちわ 今デルファイ6パーソナルで写真から目標物の座標を自動で検出するようなプログラムを作ろうとしてるのですが、まず1、写真を2値化 2.その写真を0〜255で表示 3.その写真をラベリング 4、ラベリングしたグループの中心の座標を計算して出力 というような手順でやろうとおもってます。 今のところ、テキストイメージから2番をすることしかできてないのですが、3のラベリングとはどのようにすればいいのでしょうか?今は写真の数値をstringgridにひとつずつ入れてやってます。。。 空気読んでなくショボイ質問ですがよろしくおねがいします あと画像の処理においてどこか参考になるサイトとかありましたら教えてください。おねがいします!
xpでdelphi6で使って作ってるのですが、 別の古いパソコンwindows2000で.exeを起動したのですが、エラーがでます。 xpで作ったものは2000で動かなかったりするものなのでしょうか? それとも何か設定をしないといけないのでしょうか? 宜しくお願いします。
XPにあって2kにないWindowsのモジュール使ってれば動かない事もある。 2kに追加でインストールできる事もあるし 両方の環境で動くようにデバッグしないといけない事もある。
>>895 どんなエラーが発生するのか書かないとフォローのしようがない。
今のままだと、場合によっては動かないこともあるよ、としか答えられない。
>>895 です。
>>896 >>897 ありがとうございます。
エラーは アプリケーションエラー
えらーが発生したため、Project1.exe を終了します。 プログラムを一度閉じる必要があります。
エラーログを作成しています。
と、言うメッセージでエラーログが何処なのかが分かりませんでした。
以前試した時は動いたので、変更した点と言えば、bmpをbmpにコピして貼り付けたことくらいで、これが原因かな?
そのbmpがexeの中ではなくimageフォルダの中にそれを拾いきれてないのか?
exeの中にこのようなbmpを同封することはできるのでしょうか?
出来る。リソースファイルでヘルプを引け 後はBMPの処理を行ってる部分で発生する例外を補足すれ そんな当たり前のメッセージじゃニュータイプでもない限り理解不能
それだけじゃまったくわからん。 ソース2kもってってデバッグしろ。 OSの差より環境の差によるバグって気がする。 c:\delphi\proj1\ってディレクトリがないとエラーが出るとか。
>>895 です。
どうもGetCurrentDirを使ってるので思ってるディレクトリより一つ上で保存されたりしていました。
.exeがある現在のディレクトリを指定するにはどのようにすればいいのでしょうか?
ExtractFilePath(Application.ExeName);
>>894 すみませんが、「写真をラベリング」とは、具体的にどのような処理なのか
教えてくれませんか?
>>903 ありがとうございます。
やっぱりimageディレクトリのようです。
一つ上のimageディレクトリの名前を変えたところ、xpでも動かなくなりました。
ExtractFilePath(Application.ExeName); で全部修正をこころみたのですが、
やはり一つ上のimageディレクトリを探しるようです。
何故かファイルを開いた時はやはり一つ上のimageディレクトリを開くのです。
何か対処方法ありましたら教えてください。
>>905 try exceptで思ってるところでLOG出してみたら?
ひとつ上のディレクトリを指定しているのは、お前が指示しているはず。
コンピュータは支持通り動く
> 何故かファイルを開いた時はやはり一つ上のimageディレクトリを開くのです。 自分のコードに責任を持ちなよ。なぜか、なんていってるうちは解決できない。
教えてください。 ListView1.Items.Delete(ListView1.Selected.Index); としてボタンを押したときに項目を消したいんだけど、 何も選ばれて無いとエラーになる。 どうしたらいいの?
>>905 どうせソースに'Image'なんてベタな指定してるんだろ
>>910 リストで行を選択してないだけ
>>910 TListView.SelCount見て0ならなにもしない
if Assigned(Selected) then Delete
915 :
894 :2005/10/31(月) 20:48:26
返事ありがとうございます!
916 :
894 :2005/10/31(月) 20:51:11
げ エンター押しちゃった。。「写真をラベリング」と言うのは 2値化したの黒の部分のピクセルの座標からその隣がもし黒であったならそれを一つのグループにするみたいな作業です これをすることによって写真の物体の輪郭がわかったり重心の座標が求めたりしたいのです ええっとこのような説明でわかりましたでしょうか? 汗
Stringgridの指定したマスに色を塗るにはどうしたらいいのでしょうか? よろしくお願いします。
>>895-
>>909 です。
アイコンでもなく、xpのエラーは
デバッガ例外発生
プロジェクト Prodect1.exがExceptionクラスの例外を発生しました。
'Error setting path:"C\Program File\Borland\Delphi6\Projects\gazo\image"'
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。
というもで、単にsetting path 変更すればいいのかな?と、
そのsetting path を探せど見つからずで、どこで変更できますでしょうか?
宜しくお願いします。
>>916 = 894
> 2値化したの黒の部分のピクセルの座標からその隣がもし黒であったならそれを一つのグループにするみたいな作業です
ありがとう。
で、具体的には、2値化(って白と黒の2色だよね)した画像の内部データにアクセス
できると問題が解決しますか?
速度を重視しなければ、TBitmap.Canvas.Pixels[] でアクセスできますし、
pf1bit の PixelFirmat でも、ちょっと工夫すると ScanLine で高速に
アクセスすることもできます。
つづき 輪郭を求めるには、いちいち各ピクセルを順番になめていくだけです。 白から黒へ変化するときと黒から白に変化するときを記録していきます。 あと、リージョンをつかう方法もあります。
922 :
894 :2005/11/01(火) 08:50:57
>>919 ありがとうございます。画像がJpegなんですけどその場合はあらかじめBMP
に変えておいたほうがいいでしょうか?とりあえず今ラベリングの処理をしてみたところ思いっきり無限ループにはまっちゃいまいした
グループ化する時にきっと再帰関数を使うのでしょうがその使い方がわからずとりあえずifとforで作ったのが原因だと思います
再帰関数使って作ってみますね!
起動しているアプリの一覧って取得できますか?
>>923 できるよ。
WindowsNTをサポートしなくても良いのならProcess32First,Process32Next,OpenProcess辺りの
APIを使えばオケ。
WineでDelphi動きますか?
どうみても精子です。
928 :
デフォルトの名無しさん :2005/11/02(水) 07:39:44
Delphi 7 Personal 安いので買いたいのですが、 Indyコンポーネントとかふつうに使えますか? その他になにか不便なこととか ありますでしょうか? よろしくおねがいします! 30000くらいまで出せますので これを買ったほうがいいっていうのが あったらそちらも教えてください。 ちなみに学生です。
>>928 > 30000くらいまで出せますので
Delphi7 Professionalを買った方が良いです。
> Indyコンポーネントとかふつうに使えますか?
使えます。
> その他になにか不便なこととか
Delphi7 Personalにはソースが付いてません。
無料のD6 Personalと大して違わないと思います。
新しい物が好きなら年末まで待って、Delphi2006を購入するという手もあります。
Delphi2005はあと1ヶ月少々で終了なのでお勧めしません。
930 :
デフォルトの名無しさん :2005/11/02(水) 08:11:58
>>929 ありがとうございます!
ソースって大事ですか?
Delphi2006は30000以内で買えますか?
> ソースって大事ですか? ソースを読めば、コンポーネントがどんな仕組みで動いているのか分かりますので 勉強になります。またちょっとだけ動作を変えたり、バグを発見したり、 いろいろ役立ちます。 > Delphi2006は30000以内で買えますか? 価格は未発表ですけど、アカデミック版なら買えると思いますよ。 ただしDelphi2006はDelphi6/7と違って、いろいろな機能がついているのでIDEの動作は 重たいです。また発展途上なのでバグも残っています。 チャレンジする余裕があるなら、Delphi2006は楽しみな製品ですけど .NETやリファクタリング、モデリングに興味がなければ、Delphi7でも良いと思います。
>>930 おれは学生の時にDelphi1を買った。
プログラミング初めてだったしチンプンカンプンなままほとんど使いこなせずに
Delphi2Pro版を買った。その頃コンポーネントを作ろうと思い立ち、初めて
VCLソースをまじめに追うようになって急激に理解度が増した。目から鱗が
落ちる気分だったよ。
933 :
デフォルトの名無しさん :2005/11/02(水) 09:17:15
JavaやPHP、C#などでいろいろアプリケーション 作ってるんですが、 Delphiでしかやれないことが いろいろあるんですよね〜。 だからDelphiにはあこがれています。 年末まで待ってDelphi2006買うことに決めました。 アドバイスありがとうございました。
まずは Del6personal を使ってみることをオススメする。無料だし。 最初はソースはなくてよい。軽いし、バグに悩まされることも少ない。 Indy も使える。
日本語ドキュメント皆無だけどな
学生版で商用ソフト作れますか?
たしかフリーソフトの配布も無理になったんじゃなかったっけ。 学生用。なんか揉めてたような。
ユニット参照について、 interface部の uses と implementation部の uses の違いをご教示ください。 ヘルプを参照しても、usesは 「実現部が独自のuses 節を含む場合もあります。」 とまでしか書いてありません。 今は、コンポーネント貼り付け等による デフォルトでセットされるユニットではなく、 独自で作成したユニットを、明示的に 参照させる場合に implementationの uses節にユニットを追加するようにしています。
>>938 interface部でそのユニットが必要なら、interface部のusesに書く。
interface部でそのユニットが不要なら、implementation部のusesに書く。
interface部のusesに書くと循環参照(ユニットが相互に参照し合う)が発生したりして面倒なので
implementation部のusesに書けるものはそちらに書いた方がいい。
>>938 C++の.hに書く#includeと.cppに書く#includeの違いみたいな物だと思ってる
>>939-940 どうもありがとうございます。
なるほど、外部参照、内部参照定義
みたいなものですね。
質問なんですが、フォームにTButtonとTMemoを置いて、 procedure TForm1.Button1Click(Sender: TObject); begin repeat ・・・ Application.ProcessMessages; until hogehoge; end; という感じで、ボタンクリック時にかなり長めの処理をしてます。 で、ProcessMessagesを呼んでるのでフォームが固まったりとかはないんですが、 例えばMemo上で右クリックをしてポップアップを出したり、フォームを移動させたりすると、 その間ループ処理が止まってしまいます。 これをスレッドを用いる以外で止まらせずに処理を継続する方法ってあるんでしょうか?
おれがやった限りではスレッド使わないと無理だった
そりゃそうだろな。モーダルダイアログ表示でも止まるな。当たり前。
当たり前というわけでもないな。
当たり前だろが。意外に思うのはなぜ?
シングルスレッドではループは一つしか回せません。メニューループやモーダルループは プログラマが必ずしも立ち入れるものではないので、回避策はありません。
無理矢理割り込めば回避できなくはないだろうな
どうやって?
タイマーつかえばええんでない
せっかくスレッドが簡単に作れるようになってるのだから スレッド使えばいいじゃん。あほか。
タイマですむなら初めからループ使わねぇだろ
なにこのゴミレスの山
少なくとも954よりはマシ
タイマーでモーダルループに割り込めるよ。 でも、そっから先がめんどくさい。素直にスレッド使ったほうが楽。
というかなんでスレッドコンポを標準で提供しないのか謎だな。 タイマーコンポと同じ感じで遥かにレスポンスよく作れるようになるのに。
>>957 やっぱある程度理解を深めてから使うのが無難だからじゃ?よく分からんけど。
コンストラクタ実行するのがめんどくさいヤツはポトペタしかできないんだろうなぁー パレットにないとつかえないとか思ってる?
>>959 はい、クラス名とnewとアスタリスク書くのがめどいです。
静的生成させてくだしあ
byBCB使い
TThread はユーザが派生クラスをつくって使う仕様になってるよね。 コンポにして隠蔽してしまうとかえって使いづらいと思うんだが。
ダブルクリックしてコード書くだけでマルチスレッドって素敵やん
Delphi6でSSEを使う方法ありますか?ないでしょ、ないんですね? つまりDelphi6はゲーム製作やマルチメディアには向かないということですね?
>>964 asm
ま、その調子だとお前さんには無理そうだし、
ないと思っておいていいんじゃない?
>>965 そんなことはわかってますよ!
あなたasmばかり繰り返して問題の本質をわかってない
わたしはどうやってそれを実現するんですかと聞いてるんです
誤魔化さないで具体的に答えてください
> ダブルクリックしてコード書くだけでマルチスレッドって素敵やん そうだね。「ダブルクリックして」してどのイベントにコードを書くのか不明だが。
>>966 ひとにものを尋ねる態度としては最低だね。あるかないかの質問だったはず。
>>967 自作のものだと
OnExecuteでサブスレッドのメイン
OnSynchronizeでVCLとの同期部分
後はおまけでOnInitialize, OnFinalize。
実装はTTheradのラッパーだからTThreadが呼び出すだけ。
あのう、RFCを見ていると ISO-3309:1984-PDAD1 を参照しろと出てきたのですが、 そのドキュメントってどうしたら見る事ができますか? ググっても、それを参照するドキュメントしか出てこないようです。
ヘルプ嫁
RFCがどうDelphiに関係して来るんだ
RFCに準拠してサーバアプリを組んでいるんです。 スレ違いなのは判っているのですが、もし判る方がいらっしゃったら教えていただきたいです。
RFCのスレってのは無いのか・・・
ネットワークスレがあるだろ
ネットワークスレはほとんどソケットスレと化してるし 新規に建てたいな
うるさい口答えするな
ネトワスレだとRFCの質問受け付けないじゃん
うるさい口答えするな
お前、上司みたいだな。
かわいそうに。もう少し知恵があれば 上司にいびられることもなく、こんな所で煽ってらなくても生きていけるのに。
上司がメガネ掛けてて美人でSっぽかったらどんだけいびられても・・・ 考えてるだけでも勃ってきた
全米が引いた
お前、俺の部下みたいだな。
メガネ掛けててブ男でMっぽいデブとは俺のことです
さらに、年に2度髪型の変わる男とは俺の事だ。
さらに、もう某製品は金輪際買うまいと決心した男とは俺の事だ。
おもちよりおもちろいのはわたくしのことであります
向こうでやれ
どうせ、もう終わりだろ、このスレ。ここであと5,6レスで何するつもり?
空気読めないマンセー低脳だろ。>向こうでやれ
というか、次作れよ
肩甲骨って背中に二つだよな? 俺いましらべたら3つあるみたいなんだが・・・。
実装が動いてるなら仕様を疑え
ヌルポ
1000 :
デフォルトの名無しさん :2005/11/05(土) 14:18:27
1000GET
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。