1 :
デフォルトの名無しさん :
2006/06/24(土) 18:56:50
4 :
デフォルトの名無しさん :2006/06/24(土) 19:17:00
次スレは無しって話だったろうが・・・
>>4 気軽に質問できるところがなくなるじゃん・・・
新スレたったところで早速質問です。 255文字を超える文字列定数を使うにはどうすればよいですか? 具体的には下のようなことがしたいです。 str: string; str := 'ああ・・・(255文字以上の文字)・・・ああ';
>>10 str := '(200文字)'+'(200文字)';
>10 仕様です。Delphiでは出来ません。
13 :
10 :2006/06/25(日) 00:12:47
>10 一行で書かないで、数行に書けばOK。 なお、長大な文字列はresourcestringで宣言しておいた方が無難。 処理が少し早くなる。
15 :
10 :2006/06/25(日) 00:50:49
>>14 そんなものがあるとは・・・delphiも奥が深いですなぁ
いやおぬしの知識が浅いだけ・・・
17 :
デフォルトの名無しさん :2006/06/25(日) 04:15:08
久しぶりにDelphi6使ってるんですが、 Object, 文字列Method, 引数を渡して文字列Methodを実行する Javaのinvokeみたいなのってありませんか?
>>17 ネイティブアプリでその手の処理を必要とする設計自体
なんか間違ってる気がするが、たまたまDelphiは出来てしまう
メソッドのシグネチャが固定ならpublishedに置いておいて
TObject.MethodAddressの結果をTMethodに詰めて
自前のprocedure(...) of object型にキャストして呼ぶ
シグネチャも可変なら、TypInfo.pas(Personalでも宣言部は見えた筈)と格闘する。
interfaceでやりたいなら、dispinterfaceとIInvokableとやり方が2つあるが、
前者ならCOMオブジェクトとして作ってVariantに詰めれば
スクリプト言語の型無しオブジェクトみたいにふつーの呼びだし構文で直接呼べる。ただしCOMの知識が必要。
後者(IInvokable)はやることはTObjectのとほぼ同じ。TypInfoと格闘。
>>18 これでやっと進みます。
ありがとうございました。
>>19 ありがとうございます、参考にさせていただきます。
>ネイティブアプリでその手の処理を必要とする設計自体
>なんか間違ってる気がするが
そう言われてしまうとそれまでなんですが・・・
パス付きの圧縮ファイルが作れるコンポ-ネントってありませんか?
unlha32.dllでもunzip32.dllでも好きなのをどうぞ。
24 :
デフォルトの名無しさん :2006/06/26(月) 16:26:05
comettrees.pasてどこにあるか知っていませんか?
知っていません。
グローバルIPを取得するにはどうすればいいのでしょうか?
外に置いてあるサーバに接続して教えてもらうしかない。 自力で知るのは不可能。
UPnP
D7でDBGRIDで編集するときに最下行の編集が終わった後の自動的な行の追加を禁止したいのですが どうすればいいですか。
自動的な行の追加を禁止する。
string型は255文字を超える文字列は代入できないんですか!? Delphi使い始めて日が浅いんですけど、ベテランのかたは255文字を超える文字列はどんな変数に格納してるんですか?
>string型は255文字を超える文字列は代入できないんですか!? それ、ShortString型。 String型は 2ギガ代入できるはず。
リテラルの代入と一般の代入は違うでしょ。
文字列「定数」なわけだ。
リテラルは何で制限あるんだろ・・・
>>36 ソースの一行に2ギガバイトの文字列書かれても困るからじゃないか?w
38 :
デフォルトの名無しさん :2006/06/28(水) 00:53:17
今日配列の勉強をし始めたのですが、分からないことがあります。 var test : array[1..3] of integer; begin label1.caption := inttostr(test[1]); end; と記載すると、label1には1244704という数字が表示されます。 本当は「1」とだけ表示させたかったのですが、どうすればいいでしょうか? また、1244704はどこから出てきた数字なのでしょうか?
確保したメモリ領域にたまたまあった数値がそのまま出力されている。 自分で初期化しないといけない。 あるいは const を使う
40 :
デフォルトの名無しさん :2006/06/28(水) 03:33:15
メソッド名; virtual; と メソッド名; virtual; abstract; の違いがイマイチよくわかりません。 自分なりに試した結果、virtual; abstract;はimplementation以下がなくてもおkってことが判明したんですが、この他に違いがあるんでしょうか?
abstractは抽象メソッドていうんだ 派生クラスでは必ずabstractなメソッドを継承しなければならない 逆を言えば、そのクラスの派生クラスは 必ずそのabstractなメソッドを持っているてことだ
メソッドは Delphi コンポーネント内で abstract として宣言されることがあります。VCL と CLX で一般に抽象メソッドが現れるのは,TCustomGrid のように名前が「Custom」で始まるクラスです。下位クラスの派生専用という意味で,そのようなクラス自体が抽象になります。 抽象メンバーが入っているクラスのインスタンスオブジェクトは作成できますが,これはお勧めできません。抽象メンバーを呼び出すと,EAbstractError 例外が生成されます。 abstract 指令の用途は,下位コンポーネントでの明示と定義が必要なクラスの各部を示すことです。これを使った場合,コンポーネントの開発者は下位クラスに抽象メンバーを再宣言してからでないと,クラスの実際のインスタンスを作成できません。
44 :
41 :2006/06/28(水) 08:57:52
@abstractメソッドは必ず継承しなくてはならない。
それと、Aabstractメソッドのあるクラスはそのままインスタンスをつくっちゃいけない。
てことでおkですか?
>>43 のヘルプは読んだんですけど、初参には言葉足らずでわかりにくい・・
Delphi本がすくないので(地方者だす)苦労してまつ。
×@abstractメソッドは必ず継承しなくてはならない ○@abstractメソッドは必ずオーバーライドしなくてはならない
便乗で質問、抽象メソッドってどういうときに使えばいいんでつか? 使い道がよくわからないので自分で作ったことがないのですが。
クラスの階層は、普通、機能の共通化・抽象化から具体化に向かう物。 たとえば、昆虫クラスを作るとして、足が6本、羽が4枚、体節が3つ、とかは すべての昆虫に共通。これらの特徴を表す性質を抽象クラスとして整理し、 abstract なメソッドにしておけば、カブトムシクラス、はえクラス、 コオロギクラスなどをその基本クラスから派生することにより、むりやり abstract なメソッドを実装させる事ができる。共通のメソッドが実装されている事が保証され、 昆虫クラスの基本クラスとして、あるメソッドで受け取っても、それがカブトムシなのか コオロギなのか、はえなのか、にかかわらず、飛んだりはねたり出来る。これを多態性 という。
多態性(ポリモーフィズム)については、Javaの初心者向け解説書読むと分かりやすいかもね
中傷メソッドなんていらないのでは? 空の仮想関数を定義すればいいだけ。
51 :
41 :2006/06/29(木) 06:53:48
>>50 implementation以下が短くて済むんじゃないですか?
タスクトレイのアイコンにマウスを乗せると、「音量」とかヒントが出ると思うのですが、 タスクトレイのヒントの一覧を取得する方法ってありませんか?
いい加減な解説するので、間違ってたら指摘よろ。 円を描画するクラスTEnと四角形を描画するクラスTShikakuを考える。 描画するにはByougaメソッドを使う。 var En: TEn; Shikaku: TShikaku En := TEn.Create; Shikaku := TShikaku.Create; En.Byouga; Shikaku.Byouga; 円も四角形も図形の一種と考え、汎用図形クラスTZukeiを作る。 しかしTZukeiは汎用であるためByougaメソッド自体は何もできない。 そこでvirtual; abstractで抽象メソッドにしてガワだけ作っておく。 TEn、TShikakuはTZukeiから派生させByougaメソッドをオーバーライドし それぞれの図形を描画するように実装しておく。 TZukei型の変数には派生したTEnやTShikakuのインスタンスを代入できるから 以下のようにすればインスタンスを代入した後は何のインスタンスか考慮せずに それぞれの図形を描画できる。 var Zukei: array [0..1] of TZukei; Zukei[0] := TEn.Create; Zukei[1] := TShikaku.Create; for i := 0 to 1 do begin Zukei[i].Byouga; //インスタンスの中身を気にせずともそれぞれの図形を描画 end;
> 空の仮想関数を定義すればいいだけ。 機能的にはそうだけど、上位クラスの実装者と下位クラスのそれが一致するとは限らず、 「おまいら、派生したら必ず override しろよ! 」という強制が生ずるのは abstract の特徴と言えるよ。
抽象クラスのインスタンスを作った時点でコンパイラの警告が出たっけ? 出るなら完璧なんだが・・
2005 以降なら TMyclass = class abstract
>>38 vbワールドからやってきた人ですか?
vbはそんなこと気にしなくていいからね。
だからvb最高ー!
ヒント:抽象クラスのインスタンスは作ることは出来ないが、 抽象クラス型の変数に継承クラスのインスタンスを代入することは出来る。
ま、一般に上位クラスの変数に下位クラスのインスタンスは代入可。 逆は不可。これってかなり重要。
単純型のイメージと正逆だからなぁ。 だからOOPは地獄だぜフゥ(略
VBってクラスとか継承あるの? 弄ったことないからわからない。
VB/VBAはOOP風だが不完全。継承は無し VB.netはVBというより.netの機能としてOOPが可能。故に言語を超えて派生できたりする。
bmpまたはjpgをpngに変換したいのですがどうすればできるのでしょうか?
方法はいろいろあります
>>64 いじわる
プニュ( ´∀`)σ)Д`)
いじわるしてる訳ではありません。逆です。 私はあなたの好みを知りませんので 数多の方法のなかで私が選んだものが 的確にあなた好みの方法に一致している とは限らないですから。
TJpegImage TPngImage
bmpからjpgに変換する時のように TJpegImageにBitmapファイルをassignして吐き出すくらい簡単にできる方法があるならそれが一番良いのですが・・・
TPngObjectとかTPNGImageでぐぐってコンポーネント探せ
こんなところで質問してるんだから、「好み」とかの問題ではなく、 もっとも簡単に解決する方法を回答すべきだろよ。 いちいち質問者の「好み」を聞いてからでないと回答するつもりがないなら レス書くなよ。
回答者の質に不満ならC#スレ逝けよ ウンコが臭いと嘆いてもどうにもならないだろ
72 :
デフォルトの名無しさん :2006/06/30(金) 10:05:27
>>71 私はあなたの好みを知りませんので不満ならC#スレにいってください。
C#への誘導レスかよ。 何通りもあるっていっても何十種類もあるわけじゃないだろ? 簡単なの2つくらいあげてやればいいのに。
74 :
74その1 :2006/06/30(金) 18:26:09
教えてください。 ボタン1を押したら「b1(←editの名前)×c1(←editの名前)の結果をLabel1に表示」 ボタン2を押したら「b2(←editの名前)×c2(←editの名前)の結果をLabel2に表示」 (ボタン3以降も同様の処理) という計算をさせたくて、試しに下記のように記載しました。 「procedure keisan」の定義中の「b(x)」の書き方でエラーになってしまいます。 xはbutton1で代入した値で(例えば下記の場合「b1.text」となって欲しい)のですが、 どのように記載すればエラーにならないでしょうか? ちなみにエラー内容は「未定義の識別子:'b'」です。 よろしくお願いします。
75 :
74その2 :2006/06/30(金) 18:28:42
a1: TEdit; b1: TEdit; Label1: TLabel; a2: TEdit; b2: TEdit; Label2: TLabel; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); public x : integer; y : integer; procedure keisan; end; (中略) procedure TForm1.Button1Click(Sender: TObject); begin x := 1; keisan; end; procedure TForm1.keisan; begin y := strtoint(b(x).text) * strtoint(c(x).text); ←ここのb(x)がエラー label(x).Caption := inttostr(y); end;
y := strtoint(tbutton(findcomponent(b+inttostr(x))).text) * strtoint(tbutton(findcomponent(c+inttostr(x))).text); コンパイルしてないから動くかどうかはわからん
全然違った y := strtoint(tedit(findcomponent('b'+inttostr(x))).text) * strtoint(tedit(findcomponent('c'+inttostr(x))).text);
78 :
74 :2006/06/30(金) 19:00:22
>>77 どうもありがとうございます!b(x)の部分は無事クリアしました(´∀`*)
あと、もうひとつ教えていただけないでしょうか?
今度は
>>75 の下から2行目「label(x)・・・」がうまくいきません。
「(tbutton(findcomponent(b+inttostr(x))).text)」の部分は
まだ勉強してなくて理解できなの所なのですが、そこを無理やり
labelバージョンに書き換えてみたけれど、やっぱりダメでした・・・(・ω・`)
labelバージョンに書き換えるだけでできるよ
>>77 が書いてくれてる
tedit(findcomponent('b'+inttostr(x))).text
の意味を調べてみればわかる
80 :
74 :2006/06/30(金) 21:47:36
>>79 ヤターできたよ(*´ω`*)えらく時間掛かったけど。
ヒントをもとに自分で調べて解決へもっていけたか 素晴らしいぞ74
Delphi6を使っているのですが いつの間にかimplementationの上のvarで宣言した 変数の値が消えてしまいます(参照出来ない) どのようにすれば内容を保持しておけるでしょうか
ログを取る。
消えるってすごいな 俺は経験した事ないぽ
値が消えても参照出来るよ。意味不明で気のせいだから気にするな。
87 :
82 :2006/07/01(土) 07:47:11
タイマーで実行される関数で暫くするとエラーが起こって、そのときの変数の値が 参照できません となるのですが… 取り合えずもう一度ソースを見直しておきます
90 :
デフォルトの名無しさん :2006/07/01(土) 18:54:57
外部の実行ファイルを起動して その数秒後に終了させたいのですがどのようにすればよいのでしょう? 現在わかっていることは起動はWinExec() 終了は???というところまでです。 宜しくお願いします。
91 :
デフォルトの名無しさん :2006/07/01(土) 19:25:04
93 :ひよこ名無しさん :2006/03/28(火) 02:03:32 0 別に竹石圭佑がゲイでもホモでもどーでもいいだろ。関わらずに無視すりゃ良いだけだし。 大体、ほっとけば勝手に犯罪起こして、また逮捕されて社会から消えるような野郎だしな。
'○○県○○市○○町xxxx番地 , 株式会社△△' みたいな文字列があるばあいに、”,”カンマの前後で文字を 切り分けて取り出すにはどうしたらいいでしょうか? vbでいうところの x = mid(strData, 1, instr(strData, delimier) - 1 ) y = mid(strData, instr(strData, delimier) + 1 ) みたいなことなんですけど。 ちなみに、文字列は1バイト文字2バイト文字混在です。 posとかAnsiPosとかMisStrとか調べたんですけど、 MBCSとSBCSの関係かうまくできないんです。 全然別のアプローチしたほうがいいんでしょうか? delphiかじりだした厨が早くも根を上げそうなんです。 助けてw
93 :
92 :2006/07/01(土) 20:16:08
ああ、vbもmidの第3引数は文字数だから書き方が違うや。 スマン、そこんとこは生暖かくスルーしてくださいw
stringlist.commatext
VBやってたんならおとなしくAnsiPosとCopyでもしとけ
96 :
92 :2006/07/01(土) 20:54:13
できたお! ありがとう。
>87 参照できません、がデバッガ上の話ならとりあえず最適化をOFFにしてみな。 ってかエスパーはまれにしかいないので、そうでない平凡な人間にもわかるように書け。
>>90 前スレでも言ったけど、だいたいはWM_QUITを送れば終ると思うのだが。
WinExec() 使ってるようじゃ、ポストするウィンドウハンドル捕まえるのも 難しそうだね。普通に CreateProcess() TerminateProcess() ならウィンドウ がないプロセスでも終了できるんだが。
>>92 VBだったら、そういうときはSplitを使わないか?
いや、そこはStringReplaceだろう。
StringReplaceネタはもう終わったんだよ 空気嫁
いい加減StringReplaceウザイ こうですか?わかりません!
orの使い方がよくわかりません。 procedure TForm1.Button1Click(Sender: TObject); begin if strtoint(Edit1.Text) = 1 or 2 then showmessage('1か2です'); end; end. こういうのはCase文で書くしかないのでしょうか?
それじゃ駄目だ if (StrToInt(...) = 1) or (StrToInt(...) = 1) then
106 :
104 :2006/07/02(日) 17:07:19
>>105 なるほど! 式ごとカッコで入れるんですね。ありがとうございました。
>>107 返信ありがとうございます。
ExeTerminate
ExeTerminateMult
WindowClose
WindowCloseMulti
とありますが、どれが強制終了、自然終了、単独、全部なのでしょう?
上から
強制終了
自然終了
単独終了
全部終了
といった認識でよろしいでしょうか?
単強 全強 単自 全自
if StrToInt(Edit1.Text) in [1, 2] then
114 :
デフォルトの名無しさん :2006/07/04(火) 01:10:36
課題なのですが 乱数を生成して 正方形 と 円(四分円)の面積を比較することにより, 円周率 π の近似値を求める方法がある。 以下は,この方法に関する問いである。 (1) 乱数によって定まる点の分布の状況を PaintBox 上に図示せよ。 (2) 円周率 π の近似値を計算せよ。 という問題が出されました 取っ掛かりからわからないという初心者ぶりです ご教授願えませんでしょうか
116 :
114 :2006/07/04(火) 01:21:39
すみません専用板があったんですね。 そっちで聞いてみます。
117 :
デフォルトの名無しさん :2006/07/04(火) 03:01:15
Windows起動や終了時、ログオン、ログオフの時に飛んでくるメッセージは何になるのでしょうか?
>>118 行って来ます(:;´.(Θ).`;:)
TDateTimePickerでShowCheckboxをTrueにして、アップダウンで数値を変更すると フォーカスがCheckboxに移ってしまい連続で変更できません、どなたかフォーカスが Checkboxに移らない方法を知りませんか?
msVoice, msSE: TMemoryStream; msVoice := TMemoryStream.Create; msSE := TMemoryStream.Create; で、 sndPlaySound(msVoice.Memory,SND_MEMORY or SND_ASYNC); の再生中に sndPlaySound(msSE.Memory,SND_MEMORY or SND_ASYNC); を鳴らすとmsVoiceが止まってしまいます。ある程度、予想してたんですが… 声を鳴らしているときに「バシッ」とか音を出したかったんですが、waveを合成して出すのって、DirectSound使うしかないんですか? ちょっとDirectXまでわかりません。
>>121 DDSD を使えば割と簡単にできた気がする。
>>122 やっぱ、他人様のコンポのお世話になるしかなさそうですね…
Delphi+DirectSoundの初心者でもわかるサイトを探してたんですが、適当なのがなくって…
ありがとうございます。
124 :
デフォルトの名無しさん :2006/07/04(火) 22:06:13
SSL認証のサイトで一箇所だけindyでgetできないページあります。 I/Oエラー 103 ってどうゆう意味でしょうか。 アドレスをコピペしてプラウザで開くことが出来るのに、なぜindyは エラーを返すんでしょう。
125 :
デフォルトの名無しさん :2006/07/04(火) 22:09:33
×どうゆう ○どういう
126 :
デフォルトの名無しさん :2006/07/04(火) 22:15:43
>>125 すみません。
[I/Oエラー 103] とは、どういう意味でしょうか。
127 :
デフォルトの名無しさん :2006/07/04(火) 22:49:37
他の端末で作ったdelphiファイルセット(dprとかpasとか)をそのまま 別の端末にもってきてからdprファイルを開いたところ、dprファイルに 「unit1 in ***(前の端末のパス)」となっていて、開けませんでした。 最初に作った端末内のパスまで書かなくても、同一フォルダ内にある unit.pasを名前だけから探してくるのは無理なのでしょうか?
128 :
127 :2006/07/04(火) 22:55:48
今再度別の名前でプロジェクトを保存したら、今度は問題なく開けました。 ちょっと調子が悪かっただけかもしれません。 お騒がせしてすみませんでした。
そこは相対パスでいいはず。 っていうか、IDEに任せれば相対パスになるはずなんだけどなあ・・・?
インクルードの設定するか、プロジェクトファイルに書けばいける。
インクルード?
132 :
127 :2006/07/04(火) 23:44:00
皆さんレスありがとうございます。 さっき開けなくて今は開けるようになった理由がはっきりわかりません。 ごちゃごちゃ何か作業をしてたらいつのまにかファイルが開けていたので、 最初の原因の見立て(初心者が見立てるも何もないですが…)から違っていたかもしれません。 今は携帯から書き込んでいるので、見づらかったらすみません。
MSゴシックなどの等倍フォントを使用しているコントロールで フォントサイズを自由に変更できるようにしておいて、 フォントサイズが変更されるとそれに併せて コントロールのサイズを変更させようとしたのですがうまくいきません。 TCanvas.TextWidthを試してみたのですが 'i'にすると他の半角文字のサイズより小さすぎる値が、 '%'にすると大きすぎる値が帰ってきてうまく半角1文字の大きさが習得できませんでした。 等倍フォントでの半角1文字の幅を取得する方法はないのでしょうか?
なぜ実際に描かれているテキストで幅を取得しないの?
TCanvasのフォントがMSPゴシックだったとかのオチはアリ?
>>133 GetTextMetricsを使って使用フォントの平均幅を使ってみれば?
137 :
デフォルトの名無しさん :2006/07/06(木) 12:15:16
138 :
デフォルトの名無しさん :2006/07/06(木) 20:18:50
TUnko = record age : integer; smell : integer; name : string; end; Unko : array[1..1000] of TUnko; こういうレコードを一気に初期化する方法ってありますか?
>>138 stringをShortStringに変えてZeroMemoryか
ZeroMemory&Initialize
142 :
138 :2006/07/06(木) 21:01:46
回りくどいから classにします
回りくどいから StringReplaceにします
>>138 特定の値で(例えば、age=100とかで)、初期化する方法はないはず
constで初期値定義して、forでまわして代入かな
145 :
デフォルトの名無しさん :2006/07/06(木) 23:50:53
senderをヘルプで見ると、imagelistと書かれていますが、 button1click(Sender : Tobject); のSenderはどういう意味ですか?
イベントハンドラのSender引数は、そのイベントを発行したオブジェクト。 TButton.OnClick なら 押されたボタン。
147 :
デフォルトの名無しさん :2006/07/07(金) 12:00:36
タスクトレイでバルーンヘルプだすコンポ作ってるんだけど WinXP SP 1 or SP 2でバルーンヘルプの タイムアウトで閉じないバグはどうやって回避してる?
148 :
Indy10嫌い :2006/07/07(金) 15:53:38
ちょいと質問いたします。 Delphi7 + Indy10(IdTCPServerとIdTCPClient)でMOゲームの基礎を組んでいるのですが、 どうも挙動不審なので、IndyはやめてTCPServerとTCPClientで組もうと思っています。 今回お教えいただきたいのは、サーバーの実装に関してデス。 いろいろ考えましたが、OnAcceptイベント内で無限ループを回すくらいしか思いつきませんでした。 この方法で何か問題はありますでしょうか。なければこの方法で実装したいと思います。 あと、できればIndyのOnExecuteイベントのような使い方をしたいので、 他に良い方法をご存知の方おられましたらアドバイスお願いします。
OnAcceptイベント内でスレッドを作ってスレッドのExecuteに IndeyのOnExecuteイベントの内容を書いたらどうだろう
150 :
デフォルトの名無しさん :2006/07/07(金) 16:04:34
TFormにいっぱいイベントハンドラとかつけてコーディングしてますが、 これを一気にTFrameに変えるにはどうしたらよいですか?
151 :
Indy10嫌い :2006/07/07(金) 16:37:35
>>149 回答ありがとうございます。
それも考えてみましたが、コンポ側で1クライアントごとにスレッドが作られているようなので、
スレッドの無駄遣いになると思ってやめました。
もしかしたらコンポで作られたスレッドのExecuteでOnAcceptが呼ばれているのかな?、
と思ってVCLのソースをみたらスバリその通りでした(^^;
スレ汚し&駄文大変失礼しましたm(_ _)m
ショートカットの設定に実行時の大きさがあります。 その値はそれぞれ通常のウインドウ、最小化、最大化となっていますが、 これをDelphiで作ったアプリケーションで設定をキャッチするにはどのようにすれあよいのでしょうか?
>>150 ごめnFrame使ったことない
>>152 試してないけど
Application.MainForm.WindowState
154 :
デフォルトの名無しさん :2006/07/07(金) 19:08:36
質問です。TMediaPlayer を使って mp3 を再生させています。安定して再生 できていたのですが、最近になって以下のエラーが発生するようになりました。 EMCIDeviceError クラスの例外を生成しました。 '指定されたデバイスが開かれていないか、または MCI で認識されません。' 心当たりのある方はお願いします。(WinXP + D7 です)
delphiの話題じゃない XP mp3 でググれ
>>153 遅くなりました。
メインフォームのOnCreateに下記のように記述しましたが
AVが出てしまいました。
if Application.MainForm.WindowState = wsMinimized then
ShowMessage('Mini');
そこでSelf.WindowStateでもやってみたもの例外こそでませんが
検知できませんでした。
何かよい方法はないものでしょうか?
>>150 pasとdfm開いて、TFormをTFrameに書き換える
dfmの先頭のobjectをinheritedに変える
IDEで開き、プロパティがないと言われたら全部無視してから保存
TFormにしかないイベントがあったらシラネ
>>152 var si: STARTUPINFO;
begin
GetStartupInfo(si);
if (si.dwFlags and STARTF_USESHOWWINDOW) <> 0 then
case si.wShowWindow of
SW_SHOWMAXIMIZED: ShowMessage('Maximized');
SW_SHOWMINNOACTIVE: ShowMessage('Minimized');
end;
end;
>>157 ビンゴです!
ありがとうございました。
Delphi6Personalから直接扱えるXMLパーサって何があるんですか?
MSXML
162 :
デフォルトの名無しさん :2006/07/07(金) 23:37:37
>>147 タイマーか何かのタイミングで、空文字列をセットするとバルーンヘルプが閉じるとか?
>>156 なにを検知したいのですか?
ここ良く解からない。
164 :
163 :2006/07/07(金) 23:42:10
あ! 自分がどういう状態で表示されるかを知りたいのか。
自前のアプリケーションを超えてKeyを押したいのですが どのようなことを調べればよいのでしょうか? たとえばCtrl+Alt+Deleteを押すとタスクマネージャーが起動されます。 これをF9などを押した時にCtrl+Alt+Deleteを押されたことにしてタスクマネージャーを起動させたいのです。
Ctrl+Alt+Deleteはシステム用なので使えない。 それ以外ならkeybd_eventでキー操作のエミュレートが可能。 タスクマネージャ立ち上げるだけならShellExecuteで"taskman.exe"を起動すれば立ち上がる。
HotKey で F9 になにか割り当てたら、 DelphiでF9が使えなくなるよ!
169 :
デフォルトの名無しさん :2006/07/08(土) 02:32:44
Delphiのエディタでは、文字と文字の間にカーソルを入れて文字を打つと 後の文字が消えてしまうのですが、どうしてですか?
上書きモードだから。 Insertキーを押せば挿入モードになる。
171 :
デフォルトの名無しさん :2006/07/08(土) 03:26:54
ここはパソコン初心者板かよ
グラフィックのプログラムで、F9で実行しても実行画面が出てこないのですが、 どうすれば良いのでしょうか?
グラフィックじゃないプログラムではちゃんと出るのか?
175 :
173 :2006/07/08(土) 17:33:28
コンソールアプリケーションのプログラムは実行できるんですが・・
空のプロジェクトなら実行できるのか?
177 :
173 :2006/07/08(土) 17:47:45
>>176 空のプロジェクトとは具体的にどうすればいいのでしょうか?
>>177 Delphi起動→メニューバー→[ファイル]→[新規作成]→[アプリケーション]
グラフィックのプログラムって何かと思った
180 :
173 :2006/07/08(土) 18:11:06
>>176 実行できるようになりました!!どうしてさっきまで実行できなかったのでしょうか?
シラネーヨw
エスパー勢ぞろいだな。このスレ
>>160 俺はOpenXML使ってる。
重いけど(他と比較してじゃないからなんとも言えんが)
>>160 追加追記
ここにもいくつか出てるので引用
http://lowlife.jp/nobonobo/wiki/delphidexml.ht > DelphiでXMLを利用するには、
>
> -TClientDataSetを使う。
> -OpenXMLの日本語版XDOMJを使う。
> -MSXMLのActiveXを使う。
> -simdesignのXmlDocumentsを使う。
> -JVCLのなかのTJvSimpleXml(JEDIプロジェクト)
>
> 等がありますね。TJvSimpleXmlが簡単で使い勝手がよかった。(他のDLLが不要なので)
> TClientDataSetはProfessional版以上で使えます。
ml
集合型の変数に現在何個の要素が含まれているか知りたいときはどうすればいいのでしょうか?
ループ回して各要素について含まれているか調べる。
シフトしていって各ビットが立っているか調べる、とか
>>187 のほうが読みやすいコードになるが
RaveReportsで日本語を表示しようとすると行の右端がおかしくなって しまう場合があります。2万円以下で日本語OKなreportツールってないですか?
ACCESSとかExcelとか。
Win2000とかXPってスレッドの上限いくつ?
255 だと勝手に思ってるけどどうなんだろう
194 :
デフォルトの名無しさん :2006/07/10(月) 09:04:09
正規表現で任意のn文字ってある?
{n} か?Delphi関係ない気が
196 :
デフォルトの名無しさん :2006/07/10(月) 22:17:25
Cのu_longってDWord(LongWord)だよね? なんで検索するとLongIntでヒットするの? もしかして私が間違ってます?
しらねーよ。
>>196 たしかにたくさんあるよな
他にもいろいろね
ちなみにDWordが正解
LongWord だろ。DWord は API 用のエイリアス
>>199 ならどっちでもいいんじゃないの?
何か変わる?
別名より本名が正解でしょ。
コンパイルすれば同じだし。 API使う場合はDWORD、他ではLongWordと利用目的で使い分けたらいいのでは 少なくとも俺はそうしてる(趣味PGでは)
indyちゃん使ったことがある人に質問。 これさ、一部にメモリーリークあるよね。 やっぱ、あの部分はコメントはずしてる? それともICS等の他のコンポ使ってるの?
メモリリークは確認してないけど、 NNTPのモジュール使ったらバグとかRFC中途準拠とかで困ったな あんまり使われてないだろうから、適当に実装したままだったと思われ indyスレあったと思うのでそちらで
初心者です。 クラスをCreateしてFreeしなかったら、メモリリークが起きるっていうのはわかりました。 ベテランの人たちはメモリリークが起きてるかどうかをどうやってしらべてるんですか?
明らかに分かるリークならタスクマネージャでも分かる
メモリマネージャをオーバーライドして、確保した回数と解放した回数を比較するとか。
209 :
sage :2006/07/11(火) 07:03:09
ReportMemoryLeaksOnShutdown := True;
>>196 DelphiのWinSock.pasみてみるとLongintになってるな。
なんじゃこりゃ。
でもDelphiってガベージコレクトあるよね?
ない
>>209 を探してたらこういうの見つけました。
ReportMemoryLeaksOnShutdown := DebugHook <> 0;
変数 := 変数 <> 0 ;
代入式になっているみたいですが、どういう処理をしているのでしょうか?
DebugHookが0ならReportMemoryLeaksOnShutdownがFalseに 0じゃないならTrueとなる
True False ってどこで判断してるの?
>DebugHook <> 0; この式じゃまいか
変数 <> 0 が論理式だから true または false を返す、と。
ありがとうございます。 以下の式の使い方が正しいかを教えて下さい。 foo := hoge <> 0; if (foo = true) then begin siki := A ; else siki := B; end;
何を持って正しいとするのかが理解出来ないが hogeがInteger型、fooがBoolean型、sikiが文字列型とするならば たぶん正しいと思われる
sikiはstringとは限らず、A,Bと同じ型ならintegerでもbooleanでもいいと思う
var a: boolean; b: integer; begin a := true; if a then b:=1 else b:=2; showmessage(inttostr(b)); end; b:=1 else b:=2の部分がもっと短くできた気がするんだけど・・・
b = a?1:2;
>>223 それCじゃね?
Pascalで使えるっけ?
b := IfThen(a, 1, 2);
3月222日、とかありえない日付を入れたら「そんな日付ありません」みたいな 文章を返すためにif day<=32 thenを入れてみたけど、これでは 28(29)日までしか無い2月とか、その他31日の月と30日の区別ができない のですが、どうすればいいのですか?
>>227 StrToDateでもStrToDateDefでも好きなのどうぞ。
IsValidDateほにゃららって関数を使うか上の変換関数で変換してみて 例外を捕捉するかのどちらかだな。
やり方がいろいろあると目移りして駄目だ 高級言語はこれだから嫌い
WinSocket2のヘッダをDelphi用にコンバートしたのどっかにない?
すまん。JEDIの中にあった。
よろしくお願いします。Delphi 6 PersonalをWindowsXP SP2で使っています。
Delphi 6でXPスタイルに対応するために、
1.
http://www.delphi-gems.com/ThemeManager.php ここでWindows XP Theme ManagerとWindows XP manifest resourceをダウンロード
2.. Windows XP Theme Managerをインストール
3. Windows XP manifest resourceを解凍して、出てきたwinXP.resをパスの通ったフォルダに入れる
4. プログラム内のimplementationに {$R WinXP.res} と追加
以上のことを行い、いまのところ無事XPスタイルに対応できてるみたいですが、
何か間違ってるところや、他にやるべきことなどはありますでしょうか?
自作関数や自作手続きって一番最初に書かないとだめなの? C言語だとmainプログラムの後に自作関数を書いても良かったんだけど・・・
げ、JEDI微妙に古くて結構抜けてるよ・・・。
結局自分で書くはめになるのかozr
>>235 一番最初ってどこだよ。
もっとくわしくかけ!
別に何処に書いても構わんけど、前方参照はできんよ
>>233 では、実際にプログラム使ってみて何か問題が露見しているのか?
あるなら報告しる。無いならもうやることはない。
たぶんお前には聞いていないと思う。
>>235 プロジェクトファイル(*.dpr)なら、メインより上に書かないと駄目。
Type TSE = record Name: string[20]; Age: integer; Gengo: array[0..5] of string[10]; end; として、 const SE: array[0..20] of TSE = ( (Name: 'ほげ山'; Age: 36; // ↑ これらは入るんですが、 ・ ・ Gengo[0]: 'C++'; Gengo[1]: 'Pascal'; のように言語の配列にconstで入れられなくて困っています。 どういう書式にすればいいんでしょうか?
型付き定数でヘルプ検索
const GENGO: array[0..1] of string = ('C++', 'Pascal();
>>244 >const GENGO: array[0..1] of string = ('C++', 'Pascal();
これだとエラーが出るようなんですが、
SE: array[0..20] of TSE = (
(Name: 'ほげ山'; Age: 36;
Gengo: ('C++','Pascal','','','')
・
・
=じゃなくて:だと通ってくれるようです。
… 大丈夫ですよね?
おk
type ULONG_PTR = LongWord; size_t = ULONG_PTR; int = Integer; type LPADDRINFO = ^addrinfo; addrinfo = record ai_flags: int; ai_family: int; ai_socktype: int; ai_protocol: int; ai_addrlen: size_t; ai_canonname: PChar; ai_addr: PSockAddr; ai_next: LPADDRINFO; end; TAddrInfo = addrinfo; PAddrInfo = LPADDRINFO; var hints, res_hints: PAddrInfo; WSAData: TWSAData; begin WSAStartup(MakeWord(2, 0), WSAData); New(hints); hints^.ai_family := AF_INET; hints^.ai_socktype := SOCK_STREAM; //getaddrinfo(PChar('127.0.0.1'), nil, nil, res_hints);//これだとOK getaddrinfo(PChar('127.0.0.1'), nil, nil, res_hints);//addrinfo使うとEAI_FAILが出てくる
248 :
274 :2006/07/14(金) 17:38:20
上記のソースでaddrinfo使うとEAI_FAIL(障害発生だぜベイベー)が返ってくるのですが 何がよくないのでしょうか? さっきからこれで2時間も悩んでる・・・。
249 :
247 :2006/07/14(金) 17:42:50
getaddrinfo(PChar('127.0.0.1'), nil, nil, res_hints);//addrinfo使うとEAI_FAILが出てくる これは getaddrinfo(PChar('127.0.0.1'), nil, hints, res_hints);//addrinfo使うとEAI_FAILが出てくる こうでしたね。 てんぱってすみません。
250 :
デフォルトの名無しさん :2006/07/14(金) 18:17:43
VB 2005 ・最新の.NET Framework 2.0に対応 ・最新のUI・ジェネリックプログラミングにも対応 ・驚きのIDE無償化 Delphi 2005 ・未だに.NET 1.1(笑) ・あまりの出来の悪さに世界中で不買運動勃発(笑) ・驚愕のIDE事業売却、しかも未だに売り手見つからず(爆笑)
>売り手見つからず >売り手見つからず >売り手見つからず >売り手見つからず >売り手見つからず
へぇ、VB2005って無償なんだ まあ触らんけどな
>>247 よう分からんが
New(res_hints);
が無いからじゃ・・・
>>253 書いてみましたが結果は変りませんでした。
FillMemoryで初期化したりしてみても結果は変らず。
う〜ん、なんでだろ。
MSDN の例文と比較すると hints^.ai_protocol = IPPROTO_TCP; がないのと、第二パラメータ '27015’ がないこと。 普通はレコード型のポインタが必要なときは New() Dispose() を使わずに、 ローカル変数にレコード型を設定して、そのアドレスを @ で渡す。 それから文字列リテラルは、PChar と互換なので、キャストしなくてよい。 レコード型の初期化は FillChar() で行う。
>>255 ばっちりでした!
ありがとうございます。
問題だった点は
>普通はレコード型のポインタが必要なときは New() Dispose() を使わずに、
>ローカル変数にレコード型を設定して、そのアドレスを @ で渡す。
これでした。
後学の為に幾つか質問させてください。
レコード型の初期化なんですが、FillCharのほかにもZeroMemory、FillMemoryとありますが
これらは以下のような認識でよいのでしょうか?
ZeroMemory - 0で初期化専用
FillMemory = FillChar = 汎用初期化
257 :
デフォルトの名無しさん :2006/07/14(金) 23:49:10
FileCreate();でファイルが作成されるまで次の処理に進みたくないのですが どのようにすればよいのでしょうか? 私は以下のようしてみましたが、上手くいきませんでした。 h := FileCreate(Path); WaitForSingleObject(h, INFINITE); FileClose(h);
そう。API を使うより、ライブラリの関数を使う方がパフォーマンスも 再利用性もいいはず。ゼロクリアは FillChar() 使用を推奨。
259 :
257 :2006/07/15(土) 00:20:24
ごめんなさい。 他のミスで勘違いしてました。 忘れてください。
Delphi 6 Personalを使っています。 Edit1.Textなどに入っているURLをIEに開かせたいんですが、どのようにやれば出来ますか?
TExcelApplication等のコンポーネントを使ってExcel2000以降のExcelのバージョンで 動作するようにプログラムするにはどうしたらいいのでしょうか。 開発環境はD7とExcel2003なのですがExcel2000しかないマシンだとうまく動きません。
263 :
デフォルトの名無しさん :2006/07/15(土) 15:18:41
かなり初心者な質問かもしれませんが、 StringGridで指定のセルを選択したいわけです。 単純に StringGrid1.Col := x StringGrid1.Row := y ってすればいーわけですが、なぜかずれてしまいます。 たとえば、Col := 3 Row := 3 にすると、 OnSelectCellイベントであがってくるのは ACol := 3 ARow := 1 です。 なぜでしょうか...。 これがうまくいかなかったので、StringGrid1.Selectionにつっこむと うまくいくようになります。 けど、スクロールバーがついて行かないんですよね。 せっかく選択されてるのに、選択されてるセルがみえないってことになります。 どうでしょうか? バージョンはDelphi6 Personalです。
ちょっと教えてください。 delphiからQuickTime APIを使う コンポーネントってありません? ケータイ用に動画をエンコードしたいなって 思ってるんで・・・ よろしくお願いします。
タイプライブラリのインポートとかで無理かいな
C言語で「構造体」にあたるのが Delphiの「クラス」なんですか?
Cの構造体に当たるのはDelphiのレコード。 Cにクラスの概念は無い。
あれ、、、本当だ。 フィールドしかもたないクラスはレコード型と同じという認識でいいのかな?
メモリマップの構造上はそうかもしれんが、 決して正しい認識ではないし、安全じゃないとオモ。
DelphiはPascal
272 :
デフォルトの名無しさん :2006/07/15(土) 22:33:16
ステップ実行の方法を教えてください。 procedure TForm1.FormCreate(Sender: TObject); begin label1.Caption := 'ラベル1まで実行'; ←@ label2.Caption := 'ラベル2まで実行'; ←A label3.Caption := 'ラベル3まで実行'; ←B end; @Aの行の左端に赤いチェックをつけて、実行→ステップ実行を押しても unit1の隣にproject1のタブが追加されるだけで実行画面には進めません。 どうすればいつものような実行画面に進めるでしょうか?よろしくお願いします。
「ステップ実行」ではなく「実行」する
TForm1.FormCreateが呼ばれてないんじゃないの?
275 :
272」 :2006/07/15(土) 22:44:28
書き方が分かりにくかったですが、私がやりたかったのは、 いつものように実行すると「ラベル1まで実行
276 :
272 :2006/07/15(土) 22:47:03
書き方が分かりにくかったですが、私がやりたかったのは、 いつものように実行すると 「ラベル1まで実行」「ラベル2まで実行」「ラベル3まで実行」 と表示されるところを 「ラベル1まで実行」「ラベル2まで実行」 までしか表示されないようにしたかったのです。 アプリケーションの新規作成をしてからフォーム1をダブルクリックして、 そこに272の処理を書きました。その他には特に何も書いていません・・・。
ラベル3〜の行を消すなりコメントアウトするなり
278 :
272 :2006/07/15(土) 23:36:47
276の書き方がまた間接的だったので悪かったです。 「ステップ実行」という確認動作自体をやりたかったのです。 「ステップ実行がされる=276の"やりたかったこと"が実行される」 と思っていました。 私がステップ実行ってあんまり分かってなかったのかもしれません。 もう一度参考書見てみます。
1_処理中断させたい所にブレークポイントを設定 2_実行 3_(1)で設定した地点で中断される 4_ステップ実行で1stepごと実行 すまん、適当に書いた
他言語からきますた。ざっとDelphiのヘルプをながめてるとこですが、ちょっとひっかかるところが。 値パラメータと変数パラメータのとこなんですが /* 以下ヘルプより function DoubleByValue(X: Integer): Integer; // X は値パラメータ begin X := X * 2; Result := X; end; function DoubleByRef(var X: Integer): Integer; // X は変数パラメータ begin X := X * 2; Result := X; end; どちらの関数も返す結果は同じですが,渡される変数の値を変更できるのは 2 番目の DoubleByRef 関数だけです。 一方,変数パラメータはコピーではなくポインタのような働きをします。 ~~~~~~ 関数または手続きの本体部分でパラメータに加えた変更は,プログラムの実行が呼び出し側に戻り,パラメータ名自体がスコープ外になっても失われません。 */ ポインタの「ような」働きっていうヤツが気になるんですが、あくまで参照元の値も変更されるってだけのことで(いわば参照渡し風)裏でピュアな参照渡しをしてるわけではないということですか? C++なんかだと参照渡しの方が速いわけですが、Delphiでもスピードを稼ぎたければポインタで渡すように書くもんなんですかね?
いえ、ピュアな参照渡しです。 レコードや配列を渡す際にもconstやvarを使えば高速に渡せます。
上に便乗して質問 @procedure TForm1.Button1Click(Sender: TObject); var a,b:String; begin a:='Delphi'; b:=MyFunc(a); Label1.Caption:=b; end; Aprocedure TForm1.Button2Click(Sender: TObject); var a,b:String; begin a:='Delphi'; MyProc(a,b); Label1.Caption:=b; end; Procedure Myproc(x:string;var y:string); begin y:=x; end; Function Myfunc(x:string):string; begin result:=x; end; これって全く同じ動作するけど、どっちでも実行速度とか変わらないの? これみたいに短い文はいいけど大きくなってくるとFuncつかったほうがいいとかProcつかったほうがいいとかあるんですか?
283 :
280 :2006/07/16(日) 02:02:58
>>281 ふーん。うまく出来てるんですね。
初心者でも使いやすいわけだ…
関数の方は値のコピーが1回多く、手続きの方はポインタのコピーが1回多い事になる。
文字列のコピーはポインタのコピーなのでこの場合は同じだが、
返す値が大きければ手続きのほうが早くなる・・・カナ?
>>283 Delphiは(それともPascalは?ベースのパスカルはあんまり知らん・・・)ポインタの概念が余り表に出ないのが
Delphiを分かりやすくしてるひとつの特徴だからね。
その代わり変数(定数)引数はCみたくNULLを渡しづらいけど。
×返す値が大きければ ○返す値のバイト数が大きければ ゴメ
便乗して質問 >レコードや配列を渡す際にもconstやvarを使えば高速に渡せます。 constも参照渡し?参照元を変えられないからピュアな参照渡しとも違うような…
>>286 普通に参照渡し。
代入できないのはコンパイラが怒るだけ。
試しに参照して逆参照して代入すれば呼び出し元でも値が変化してる。
procedure T(const v: TPoint);
begin
PPoint(@v)^.Y := 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
p: TPoint;
begin
p := Point(1, 100);
T(p);
Caption := IntToStr(p.X) + ' ' + IntToStr(p.Y);
end;
但し、Integer みたいな小さな型だとコンパイラが勝手に値渡し扱いにする模様。
>>287 それconstの意味が無いじゃん・・・
289 :
デフォルトの名無しさん :2006/07/16(日) 05:28:43
既製のDelphi製のアプリケーションを、Delphiで制御したいのですが、 TListViewのハンドル値(Microsoft Spy++で調べた値)から 新規のTListViewオブジェクトを生成出来ませんか? ダメもとで ListView1を設置して、ListView1.Handle = (ハンドル値) を試してみましたが、 [エラー] Unit1.pas(31): 読み込み専用プロパティに書き込むことはできません と、ごもっともなお叱りを受けました。
まず君はHandleが何かを学ぶべきだ
291 :
デフォルトの名無しさん :2006/07/16(日) 09:00:40
独自形式で自作ソフトのデータを読み書きしたいのですが(photoshopならpsdなど)、 普通にごりごりとテキストを解析してやるしかないのでしょうか? SQLみたいに早く検索したりできる方法ってありますか?
ソフト次第。 そいういうソフトが読み書きするAPI類を提供しているなら比較的簡単だが、 そうでなければ自分で解析するしかない。 読み込みだけで良ければSusieのプラグインを流用すれば済むと思うけど。
>>290 詳しくは知らないですが、
Windowsが管理してる全ウィンドウのユニークなIDですよね。
ユニークなIDを代入してどうする (笑
しかも他プロセスのウィンドウだろ。
>>294 私も無理だろうなーとは思いました。
ウィンドウ(TListViewのインスタンス)は既に存在するわけですから、
オブジェクト自体は生成しないで、そのウィンドウへの参照だけを取得したいので、
コードで表現すると
MyListView: ListView;
MyListView := ListView.Create(ウィンドウハンドル値);
みたいなことをしたいんです。(こんなコンストラクタはありませんが)
このコンストラクタを呼ぶと、オブジェクトを新規生成する代わりに、
ハンドル値から勝手に参照(MyListView)を作ってくれて、以降MyListViewに対して
メソッドを呼んだら自在にそのウィンドウを操作できる、というようなイメージです。
そんな便利な機能はないにしても、これと似たようなことが実現できれば
多少面倒くさい方法でも良いので。
297 :
289 :2006/07/16(日) 11:19:01
MyListView: TListView; MyListView := TListView.Create(ウィンドウハンドル値); の間違いでした。
_________
∧,,∧ /
ミ,,゚Д゚彡 < お見事
>>287 さん
ミ つつヾ \
〜ミ ミ. パチパチ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
U U
_____________
∧,,∧ /APIだけでやれば
ミ,,゚Д゚彡 < できるんちゃう?
U つ \
>>296 @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∪''∪
VCLじゃないWindowに対して
VCLのコントロールでの制御をしようとしても
無理でしょう。
> APIだけでやればできるんちゃう? 単にウィンドウハンドルをつかってコントロールを制御するだけのラッパーを つくるだけだよね。他プロセスでも SendMessage() だから制御部分のコードは いっしょだし。あ、でも文字列やレコード型のやりとりは共有メモリつかわないと だめだからすこし面倒かな。
イベントに相当する部分はグローバルフックが必要だからさらに面倒。 うーむ、出来なくはないけどめんどくさいな
302 :
289 :2006/07/16(日) 12:03:18
>>299 SendMessage関数で制御するという意味でよろしいでしょうか。
そのアプローチでは、メッセージの仕様がわからずに困っています。
#最初はMicrosoft Spy++でメッセージを解析すれば、SendMessage API関数のみで何とかなると思ってましたが、
#Microsoft Spy++ではVCLコントロールに対して送られるメッセージの表示に対応しておらず、
#殆どのメッセージが"ユーザー定義"メッセージで、パラメータもただの数値でしかわからず、
#各メッセージの機能、wParam, lParamの意味がわかりませんでした。
そこで次のアプローチを考えました。
■VCL対応のメッセージ解析ツールを探す
■VCLのソースコードを読む
TListViewのソースコードって読めるのでしょうか。
インストールディレクトリをgrepしてみても見つかりませんでした。ちょっと自分で探してみます。
>>300-301 イベントを取る必要は(自分の用途では)ないので、もう少し楽かと思います。
仮想リストビューとかでないTListViewなら、CommCtrl.pasに書いてるはずの LVM_INSERTCOLUMNとかのメッセージを普通に送れば操作できるんじゃないの。 Del6パーソナルでもこのソースは見れるから、これの名前から目当ての機能を探してみて メッセージのパラメータについてはメッセージ名で検索すれば出てくるだろうし。
素直にWinAPIを勉強するのが一番早い VCLは基本的にはWinAPIのラッパーなんだから、 289が見たところで何も理解出来ない可能性が非常に高い
305 :
289 :2006/07/16(日) 12:46:34
>>303 見つかりました!
Spy++上でキャプチャしたメッセージIDとソース上のメッセージIDがちゃんと一致しているみたいです。
あとはひたすら分析頑張ろうと思います。
皆さんありがとうございました。
306 :
デフォルトの名無しさん :2006/07/16(日) 13:02:54 BE:697262786-
1〜100までの乱数を取得し、取得した値を1〜10までの配列に格納したいんですが randmize; r=rand a[0]:=r a[1]:=r ・ ・ ・ みたいに書くと、確かに乱数格納されるんですが全ての配列に同じ値が灰ってしまいます。 配列にうまくバラバラの値を入れる方法ってどうすれば良いんですか?
オレなら 1-100までの数を配列なりTListなりに保存 適当にシャッフル 配列に格納
>>306 randmize とか rand って関数はヘルプにはなかったが、
自作関数か? まあいいや
なんか変数の仕組みが分かってないみたいだな。
r=rand; の時点で rand の結果が r にコピーされる。
つまり乱数が生成されるのは一度きりなのでそうなるのです。
309 :
デフォルトの名無しさん :2006/07/16(日) 13:42:32 BE:217895235-
それ(・∀・)イイ!!!シャッフルってどうやるんですか?
310 :
デフォルトの名無しさん :2006/07/16(日) 13:44:24 BE:697263168-
>>308 めんどかったので適当にコード書いてみただけです(^^:)
やっぱそういうことですよね。初期化してやってみても何かうまくいかないんです
シャッフルのアルゴリズムによって偏りが出たりするから、 乱数生成の研究するのじゃなければライブラリ使った方がよいと思われ。 答えを書くと、 a[0] := rand; a[1] := rand; ... てなかんじで毎回 rand を呼び出す
偏りのないアルゴリズムを使えばいいやんけw 検索すればすぐに見つかるんだし。
313 :
デフォルトの名無しさん :2006/07/16(日) 15:27:20 BE:58105722-
乱数の範囲指定のやり方がわからなくて困っているのですが -10〜10の範囲で整数型で乱数を生成ってどうやればいいんでしょう?
-10〜10の範囲で整数は何個ある? 1〜任意の整数 の乱数の出し方は知ってる?
315 :
デフォルトの名無しさん :2006/07/16(日) 15:35:04 BE:130737233-
20個・・ですか? 1〜任意の整数は例えば10個出したいならrandom(10)ですよね?
>>315 小学校の時に使った算数タイルを出してこいw
+10すれば 0〜20 なのでrandom(21)-10
318 :
デフォルトの名無しさん :2006/07/16(日) 16:06:21 BE:784420496-
>>317 すげー!ってか俺がしょぼすぎ・・・orz
みんあありがと!
ゆとり教育の成果が身近に感じられるスレはここですか
>>302 > イベントを取る必要は(自分の用途では)ないので、もう少し楽かと思います。
イベントを取らなくても、SendMessage() でのレコード型や文字列のやりとりには共有メモリは必須。
321 :
デフォルトの名無しさん :2006/07/16(日) 16:55:51
QuickRepを使って印刷プレビューを表示させたとき、 最小化・最大化ボタンを表示させないようにするには どうすればいいでしょうか? 環境はDelphi5です。
>>292 ありがとうございます。
テキストデータが主なので、自分で解析するしかないようですね。
検索するにも検索の仕方がわからない問題だったので助かりました。
INI/YAML/XMLのライブラリ使ったり TFileStream.Write/ReadComponentでオブジェクトをデータとして保存・読み出しするとかすれば バカ正直にテキスト解析する必要もなかったりするが。
16数を10真数に変換するにはどうしたらよいのでしょう。 たとえば エディット1に「255」入力するとエディット2に「FF」と出力されるようなプログラム作りたいんですが。 a:=255; IntToSTR(a) だったら255しか表示されませんよね
Delphi 6 Personalをインストールする時にできる、 C:\Program Files\Borland Delphi Personal Installer このフォルダって必要でしょうか? プログラム本体は C:\Program Files\Borland\Delphi6 にありそうなので、前記のフォルダは消そうかと思うんですが。
そういうのは無闇にいじるな Delphiに限らず、正常にアンインストールできなくなったりしたら嫌じゃん
>>326-327 消す前にそのフォルダを別の場所に移動してみる
アンインストールしてみる
正常にアンインストール出来ればそのフォルダは不要である
もう一度インストールする
移動したフォルダと新しいフォルダを両方消す
正常にアンインストール出来なかったときは 移動しておいたフォルダを元の場所に戻しておく ただしそれでアンインストール出来るようになるかどうかは不明
>>326 そのフォルダはフォルダ名から言ってインストーラがそのままコピーされてるだけと推測。
復元インストールの時などに再度ダウンロードするのが苦にならないなら消していいんじゃない?
>>326 別に消しても夢問題だよ
オレ消しちまったけど困ったことないし
そもそも消す意味が分からない
335 :
デフォルトの名無しさん :2006/07/18(火) 03:15:29
質問です。 Editに数字を入力する場合は、入力した数字全てが表示されますが、小数点以下3桁まで表示 といった事は、どのようにすればよろしいのでしょうか? よろしくお願いします。
FormatFloat
337 :
デフォルトの名無しさん :2006/07/18(火) 06:02:18
>>336 FormatFloat('#0.000',StrToFloat(Edit1.Text));
で表示できると思ったのですが、表示されません。
イベントはOnCreateにしています。
何度もお聞きしてすいませんが、よろしくお願いします。
338 :
デフォルトの名無しさん :2006/07/18(火) 06:22:50
>>336 すいません!自己解決しました。
Edit1.Text:=FormatFloat('#0.000',StrToFloat(Edit1.Text));
で良かったですね。
しかし、このイベントを複数のEditで行うには、1行ずつ書かなくては
ならないのでしょうか?
一度に複数のEditの表示形式変更は出来ませんか?
つ Sender
340 :
デフォルトの名無しさん :2006/07/18(火) 07:00:21
>>339 何度もすいませんでした。
TEdit(Sender).Text:=FormatFloat('#0.000',StrToFloat(TEdit(Sender).Text));
で出来るんですね。
なにぶん初心者でして・・・(言い訳)
ありがとうございました。
初心者用スレで初心者ですも何もないな 不要なことは言わないのが一番
不要なことは言わないのが一番
俺delphi極めたら結婚しようと思うんだ…
よろしくお願いします。 Delphi 6 Personalです。 自作関数の中からテキストボックス内のテキストを参照することはできないでしょうか? procedure hogeCheck(strE1 : String); //自作関数 begin if strE1 = 'hoge'; showmessage('ほげです'); end; procedure TForm1.Button1Click(Sender: TObject); //ボタンクリック begin hogeCheck(Edit1.Text); end; Edit1.Textを、引数として渡すのではなく、関数の中で if Edit1.Text = 'hoge'; みたいにできそうな気がするんですが。
hogeCheckをTForm1クラスの中に入れちゃえばいいじゃない
Form1.Edit1.Text = 'hoge';
なるほど! やってみます。ありがとうございました。
引数を ed : TEdit にするだけ。これだと単独の関数でもいいし。
特定のインスタンスを参照するなら手続きや関数にする意味ないし。
え?突っ込むところって >if strE1 = 'hoge'; >if Edit1.Text = 'hoge'; ここじゃないの?
324 名前: 仕様書無しさん 投稿日: 2006/07/14(金) 22:51:56 Delphiバッカやってる会社に一年いたけど、3、4年目の奴がセッションという言葉すら知らなかったぞ。 経験10年以上の上司も含めて。 大体Webアプリが難しい、判らないという知的障害者みたいな奴もいるが。 あるプログラムで詰まってたから、俺が、それセッションに放り込めばできるでしょ、って教えてあげたら、チンプンカンプンな様子だったけど、 家に帰って一生懸命調べたらしく数日後、上司にセッションでやればいいんじゃないでしょうか、 ってアピールしてた。僕、何でも知ってます、見たいな。お前、プライド無いのかよ。 んで、セッションで書いたんだけど、結局キー名間違えてて俺がバグとってあげた、という立派な落ちまでつけてくれた。 まじ痛々しい。死んでもらいたい。Delphiやってる人ってホント糞だよね。 それでいて自分を「技術者」と思い込んでて訳わからん自意識だけはある。 325 名前: 仕様書無しさん [sage] 投稿日: 2006/07/14(金) 22:54:04 Delphier = ウザイ、キモイ、イタイ。
hoge1 : Thoge1; hoge2 : Thoge2; hoge3 : Thoge3; Thoge1 Thoge2 Thoge3は全然違うレコードです。 hoge1 hoge2 hoge3 を 同じ配列に入れることできますか?
同じ配列ってのがどういう意味よ?
ポインタ噛ませればいける
357 :
にゃんぽん :2006/07/18(火) 21:11:19
こんにちは。 Delphiを初めて1ヶ月の初心者です。 どうか、Windowのリサイズについてご教授ください。 MDIで画像を表示するプログラムを作成しています。 子画面をマウスドラッグでサイズ変更をしているとき、 マウス移動の間、図形連続的に再描画(縦横比を一定)しようとしています。 FormPaint内でClientWidth とClientheightの設定をしてもうまくいきません。 いい方法がありましたらご教授願います。
Cookie な。
>357 よくわからんがとりあえずOnResizeイベントじゃねーの?
361 :
にゃんぽん :2006/07/18(火) 22:08:30
>>360 OnResizeはサイズ終了時に呼ばれるので、
ClientWidth とClientheightを設定すると、
再度リサイズされるためか、表示がうまくいきません。
非クライアント領域でウィンドウの辺をつかみながら、
マウスが動して矩形を作っているときに、
縦横比を一定にしたいです。
WM_SIZE
363 :
にゃんぽん :2006/07/18(火) 22:39:43
364 :
にゃんぽん :2006/07/18(火) 23:04:50
WM_SIZINGは、マウスの矩形拡大・縮小時にはよばれるでしょうか。
うぬはいい加減うざいでござる
366 :
デフォルトの名無しさん :2006/07/18(火) 23:22:30
>>364 何でお前C#相談室スレに同じ質問マルチポストしてるんだよ
368 :
デフォルトの名無しさん :2006/07/19(水) 00:46:02
>>367 IndyってSSL使う時DLL使うよね。
作成した実行ファイル以外配布したくない時は
みんなどんなライブラリ使ってるの?
DLL配布なんてしないで、Delphiらしくスマートに配布したい。
ごめん。 意味も無くアンカー付けてしまった。
370 :
デフォルトの名無しさん :2006/07/19(水) 05:21:00
Editに数字を入力するようにしている場合についての質問です。 数字が入力してあるか未入力かを判断する方法は、有るのでしょうか? 未入力の場合は、メッセージを表示、入力してある場合は、計算を続行する。 といった感じにしたいのですが・・・ if〜〜thenで出来るのでしょうが、〜〜をどのようにすればいいか分かりません。 よろしくお願いします。
try strtoint(edit1.text); except showmessage('数字入力しろぼけ');
>371 ソースファイルが見つかりません ステップ実行してくださいとカ出てきました・・・
TryStrToInt使え 例外拾うよりもスマート
StrToIntDef多用してるんですけど、
>>371 の例の方がいいんでしょうかね?
パフォーマンスに影響しない限りどーでもいい趣味レベルの話だ。
配列のリセットおしえて
378 :
27 :2006/07/19(水) 12:24:00
まだ始めたばかりなので相当馬鹿なことやってると思うけど教えて欲しいです。これは、某所にあった物を改変したコンポの一部です。 {この場所}の部分の(ExeFileName)にEXEのパスを入れてそのファイルのアイコンを表示させたいんです。 でもこのままだと何も表示されません。(ExeFileName)のかわりに('C:\WINDOWS\WINMINE.EXE')とすると表示されるのに・・・ どうすりゃEXEのアイコンが表示されるか教えて欲しいです。用語などに誤りあったらすいません。 procedure TExeIcon.GetIcon; var Icon: TIcon; begin Icon := TIcon.Create; try Icon.Handle := ExtractIcon(HInstance, PChar(ExeFileName), 0); {この場所} Height := Icon.Height; Width := Icon.Width; Picture.Icon := Icon; finally Icon.Free; end; end; { TExeIcon } constructor TExeIcon.Create(AOwner: TComponent); begin inherited Create(AOwner); If not (csDesigning In ComponentState) Then //設計中 GetIcon; Height := 32; Width := 32; ExeFileName:='C:\WINDOWS\WINMINE.EXE'; end;
377です。 a[1] := 325; a[2] := 332; a[3] := 234; この時、全ての要素を0または空にする方法を教えて下さい。
a[1] := 0; a[2] := 0; a[3] := 0;
377です。 a[1] := 325; a[2] := 332; a[3] := 234; この時、全ての要素を一度に0または空にする方法を教えて下さい。
a[1] := 0; a[2] := 0; a[3] := 0;
動的配列なら再生成すれば初期化されるのでは。
無難なのは、 fillchar(a,sizeof(a[1])*3,0); を使ったり Windows APIのZeroMemoryを使ったり。 というか、aが何の配列なのか書けよ
385 :
384 :2006/07/19(水) 12:51:45
間違いだった 無難のは、 fillchar(a[0],sizeof(a[0])*3,0); これならaが動的配列でも静的配列でも大丈夫
>>378 GetIcon;を呼び出した後にExeFileNameに'C:\WINDOWS〜'が・・・もうわかるよな?
>>385 すげっ fillchar(a,sizeof(a) ,0); できますた。
ありがとうございました。 <(_ _)>
>>381 for ループでゼロ代入することをすすめる
for i := 0 to Length(a) -1 do a[i] := 0;
391 :
デフォルトの名無しさん :2006/07/19(水) 15:17:56
OpenDialogで、「キャンセルが押された時点」で 開かれているフォルダの取得ってできる? 例:OpenDialogをExecuteして、C:\WINDOWSに移動、キャンセルを押す。この時、C:\WINDOWSを得る 別に、重要じゃないけど、ふとできるのか疑問に思った
OnFolderChangeイベント内でカレントディレクトリを保持しておいて ExcuteメソッドがFalseの時にその値を取得すれば出来そう
キャンセル押したのになぜ取得する必要があるのかと
絶望的にプログラミングに向いてないやつって、いるよね
誤爆です
俺のことかとおもた。
ごめんなさい(´・ω・
いやいや俺の事だろう
死ねよお前ら。俺のことに決まってるだろ
そうそう、絶対400のことだと思う。
絶望的にプログラミングに向いてないやつって400のことに決まってるだろが
つんまんね
さすが俺も、400にはかなわね。
400の人気に嫉妬した
構造体同士が内容が同じかどうかを比較する場合、項目をひとつひとつ比較するしかないんでしょうか?
Delphi には「構造体」なんかないよ。
2006ならオペレーター・オーバーロードで=が使える。
レコードがPacked Recordでかつフィールドに文字列型を含まなければ CompareMemで比較できるんだが・・・・
動的配列もだめ
ま、一般には、ひとつひとつ比較するしかない。と。
(長い)文字列も動的配列も実体はポインタだからな CompareMemは同じポインタでもアドレスが違えばFalseを返すから使えない 結局は地道に調べるしかないと
それより packed の方がよほど制限きつい。これで一般性はなくなる。
急にスレ密度が低下したと思ったらもう夏休みか
415 :
406 :2006/07/20(木) 14:41:37
地道に調べます。どうもでした。
classのplacement newってないの?
417 :
286 :2006/07/20(木) 17:01:52
すんません、たいしたことじゃないんですけど、気になってて… procedure ProcHoge(const str: string); このときのstrって参照渡しになるんですか? ただ変数が書き換えられないだけでコピー渡しだと思ってるんですが、ボク…
参照渡しというか、定数パラメータ ヘルプの定数パラメータで調べてみ stringをパラメータに渡すとき、値渡しでOKな場合でも、、 値渡しよりconst付けておいた方が高速になるから、普通はconstを付ける。
varもconstも参照渡しって点では同じ 違いは値を変更できるか出来ないか
自分と同じファイルを調べるにはどうしたらいいのでしょうか。 たとえば、Project1.exeがC:\hoge\piyo\Project1.exeだった場合 D:\hoge\piyoをFileNameに指定したいんですが。 var FileName:String; FileName:='c:\hoge\piyo' だとProject1.exeが別のファイルに動かされたりhoge\piyoの名前が変わったら動かなくなりますよね
ExtractFilePath(ParamStr(0))
>421 おお!できました!ありがとうございました
ExtractFilePath(application.exename); でも良かったと思う
>>423 Formsユニットをリンクしなくちゃならないのがネック
まあ、GUIアプリを作るときは関係ないけどね
TWebBrowserで右クリック時のメニュー表示を制御をしたいのですが、 どうしてもIEの右クリックを行ったときと同等のメニューが表示されてしまいます。 どなたかご教授いただけませんでしょうか?
ぐぐればすぐわかるしつもんをするな↑
ちょっとした処理をしてすぐに終了するソフトを作っているのですが、FormのOnCreateイベントだけに処理を書き、 Application.Runをコメントアウトしています。つまりCloseを書いていない訳です。 こういうのは邪道でしょうか?普通はどういう風にするんでしょう?
バックグラウンドで動かしたいの?
>428 「コンソールアプリケーション」 いわゆるDOS窓用アプリケーション。 [新規作成]-[その他]の中にある。
ibxを使ってDBGridで編集して登録ボタンを押したらcommit 終了ボタンを押したらcommitしてない変更があったら終了するかどうかメッセージを出す ということをやりたいのですがcommitしていない変更の有無をどうやって調べたらいいか 教えてください。
432 :
428 :2006/07/20(木) 23:15:20
>>429 私へですかね?送るからファイルを渡すとちょっとした処理をしてすぐに終了しちゃうソフトです。
>>430 コンソールアプリケーションですか、ちょっとやってみます。
433 :
428 :2006/07/21(金) 00:19:11
コンソールアプリやってみました。すごいファイルサイズが縮みました。 そしてお約束通り質問です。 内部でShellExecuteする所があるのですが、第一引数のハンドルには何を指定すればいいんでしょうか?
nil
Webの懸賞サイトの入力を支援するソフトを自作したいと思っています。 そこで質問ですが、IEのEditみたいなのに名前などを入力するのには、どうすればいいでしょうか? Delphi 6 PersonalをWin2000で使っています。よろしくお願いします。
久々にエスパー たぶんHTTPとかPOSTメソッドとかでググればよい
437 :
デフォルトの名無しさん :2006/07/21(金) 02:02:39
Ver7なんですが、 MDI親フォームにWincontrolを張った時に、MDI子フォームよりZ軸が前に来る んですが、後ろに表示される方法はありませんか? 同じくMDIフォームにラベルを貼って、クリックに応答するようにしているんですが、 上に来るMDI子フォームのEnabled=Falseの時は、表示されているフォームを 通り越してラベルが反応してしまうんですが、これを回避する方法はありませんか?
438 :
デフォルトの名無しさん :2006/07/21(金) 06:02:16
Memo1からMemo10までの書き込み内容をクリアしたい場合、 一度に出来るのでしょうか? それとも以下のように明記する必要があるのでしょうか? Memo1.Clear; Memo2.Clear; Memo3.Clear; 〃 〃 よろしければ教えてください。
for i:=1 to 10 do begin tmemo(findcomponent('memo'+inttostr(i))).clear; end;
>>439 それ繰り返しだよね?
一度にする方法ってないの?
一度に繰り返すんだよ。
procedure AllMemoClear; ちゅう手続きにしてしまえばいいじゃん。複数あるんだからループは必須だろうし。
APIレベルで見ても、一度に消去するメッセージなんか ないはずだから、原理的に無理 他の人が答えてるみたいに関数用意するしかないよ
THoge = packed record case Tag: Boolean of True: (A: DWORD); False: (B, C: WORD); end; Tagをフィールドとしてアクセスできるのは何か意味があるんでしょうか? てっきりTagにはアクセスできないと思っていたらSizeOfしたら5が返ってきたんでびびりました。 THoge = packed record Tag: Boolean; case Boolean of True: (A: DWORD); False: (B, C: WORD); end; と意味は同じですよね。単にPascalからの互換性の問題?
445 :
デフォルトの名無しさん :2006/07/21(金) 22:21:56
Delphiを使用し始めて1ヶ月の新人です。(Ver.7を使用) 計算ソフトを作成したのですが、ファイル保存や開くなどの使用方法が 分かりません。 自作ソフトの場合、拡張子をどのように設定すればよいのでしょうか? また印刷は、表や、テキスト、BMP等が含まれる場合は、どのような方法があるのでしょうか? Rave Report や Quick Report 等があるみたいですが、メリットやデメリットが分かりません。 上記事項に関し説明してあるHP等がありましたら紹介して下さい。 よろしくお願いします。
>ファイル保存や開くなどの使用方法が分かりません。 TMemoのLinesプロパティ、TListBoxのItemsプロパティのようなTStrings型には SaveToFile,LoadFromFileというそのまんまのメソッドがあるので、 まずそれの扱いから覚えれ。 慣れてきたらコントロールに依存しないTStringListというクラスクラスがあるのでそれを活用すべし。 なお、バイナリデータだったらTMemoryStream,TFileStreamの方が扱いやすい。
>>435 自アプリにTWebBrowser載っけて、その中のhtmlエレメントに対して読み書きする方法だったらxmldoc使えばできる
あ、personalだからxmldoc入ってないとか駄レスは勘弁な
APIだけでアプリケーションを作ってるんですが、 サイズを大きくしたくないためSysUtilsをuseしないでExtractFilePathと同じ働きをする関数を書きました。 function ExtractFilePath(const FileName :String): String; var p, pf :PChar; begin p := PChar(FileName); pf := PChar(FileName); Inc(p, Length(FileName)); while p^ <> '\' do Dec(p); SetLength(Result, p - pf + 1); Move(pf^, PChar(Result)^, p - pf + 1); end; 関数はちゃんと動いてくれるのですが、終了後にDelWikiから貰ってきたHeapCheckerに「ヒープ領域が未解放です」と言われてしまいます。 どこが原因なんでしょうか?
450 :
デフォルトの名無しさん :2006/07/22(土) 03:05:30
印刷についてですが、Rave Report と Quick Report のどちらが初心者にとって使用しやすいんでしょうか?
>>449 原因は分からないが、その関数は '\' = $5c を検出してるので、二バイト文字の
二バイト目が $5c のとき誤動作するよ。あと、FileName が '\' を含まないときは
暴走する。
誤動作例
Label1.Caption := ExtractFilePath('c:\abc\defg\詐欺.txt');
おれもVCL使わずにAPIベースの作ったことあるけど、途中でSysUtilsくらいええじゃないかという 気になっちまった。 exeを100k以下にしたいなら使えないけどなー
>>450 Delphi 7 ならQuick Report
Rave Report は日本語対応に難あり。
すみません、前レス見てvarによる参照渡しをつかいはじめたものですが… procedure MyProc(var str1, str2: string); とまとめて記述した場合、参照渡しになるのはStr1だけなんでしょうか?str2も参照渡しになるんでしょうか? しょうもない質問でごめんなさい・・・
30秒で検証出来る質問すんじゃねぇ
どっちもvarが適用される
自分で検証できないってことは、教えても意味がない。
プゲラ
なんだ
>>459 の態度はwww
初心者相手にテメェはどれだけの使い手だっつーんだよ。
たかだかDelphi使ってる奴らが…
レス見て思わず笑っちまったよ。
ヒント:夏休み
というか検証の仕方がわからないから初心者スレで質問してんじゃねぇか?
じゃあまず検証コードの書き方を質問するべきだったな。
というかまずヘルプ嫁。
弱者にゃ強い… てか?
当たり前だろwww
>>459 というか、聞かれた人が嘘をついてたら意味ないから自分で検証できなと・・・
なるほど、嘘を教えればいいんだな!
嘘をつくつもりがなくても なにか間違うかもしれないしな
自分で検証できなきゃいつまでたっても人に聞かなきゃ何もできないからな。 それにその方が人に聞くより理解早いし。
なんもかんも自分で検証するよろし てか
自分でやってみても判らなかったら聞けばいいじゃん。
雑談みたいのからでも除々にDelphiに慣れていけばいいんじゃね? ただでさえユーザー先細りで存続が危ぶまれる言語なのに、人がいつかなくなるぜ。
ないないwww
476 :
474 :2006/07/22(土) 19:46:32
>>475 スマン、よく考えずに適当にレスしてた。
今後気をつけます。
なぜ俺が先細りチンコだと分かったんだ
「存続が危ぶまれる言語」の部分
それこそないない
481 :
デフォルトの名無しさん :2006/07/22(土) 22:14:00
482 :
デフォルトの名無しさん :2006/07/22(土) 22:50:10
FormStyle=fsNormalのフォームを複数表示する場合、 メインフォームのみタスクバーに表示されますが、 その他のフォームもタスクバーに表示したい場合は どのようにすれば良いでしょうか?
483 :
449 :2006/07/22(土) 23:04:59
>>451 MoveをCopyMemoryに変えたりもしてみましたがリークは直りませんでした。
PCharで扱わないでStringでやってみようと思います。
ありがとうございました。
存続は結構ヤバいだろ? てか、2007日本語版は出るのか?
>>483 そもそもメモリリークの原因は本当にその関数内にあるのか?
てかその関数内では基本的にリークしない 99.9%他の関数内でリークしている
あの〜、Tlistのデータをファイルに出力したり、 そのファイルを読み込んでTlistを構築したりって ことがしたいんですけど、どうやったらいいですか? いろいろ調べたけど、わからなかった。 スレタイとおりの超初心者なんです。 教えてください。(あま〜いとか言わないでw) MyList : TList; New(ARecord); ARecord^.name := FileRec.Name ; ARecord^.Time := FileRec.Time; MyList.Add(ARecord); みたいににして作ったMyListをファイル出力。 また、そのファイルから後日再度MyListを構築したいんです。
> 後日再度MyListを構築したいんです。 ポインタはメモリ内のアドレスを格納する変数だよ。その値を後日読み出しても無意味だろ。
レコードの中身を保存すればいいじゃんw アホ?w
490 :
449 :2006/07/23(日) 00:57:13
>>485-486 その関数を使っている部分だけをコメントアウトしたら、
HeapCheckerからは何も言われなかったのでそこだと思ったんですが…
新規に自作関数をMessageBox内で使って表示するだけのものを作って実行してみたら何も言われませんでした。
>>486 さんの言うとおり他のところでリークしているようでした。
全然関係ないところの質問をしてしまってすみません。
>>490 いかにも、他のどこかでメモリ領域を壊しているくさいな。
ポインタ多用してないか?
492 :
デフォルトの名無しさん :2006/07/23(日) 01:51:22
QuickReportの使用方法が全く分かりません。 QuickReportでMemoを印刷する場合、DataSetに何か入力するみたいで すが何を入力して良いかも分かりません。HELPを見ても分かりませんでした。 どなたか簡単な、例を示してくれませんか? あとQuickReportについて簡単に説明してあるHPは有りませんか? よろしくお願いします。
495 :
デフォルトの名無しさん :2006/07/23(日) 02:58:48
>>493 ありがとう御座います。
チョット挑戦して見ます。DB関係は全く使用していなかったため、
苦労しそうですが・・・
チョットだけか・・・
苦労が血になる肉になるってか。
苦労などしてませんわ
499 :
デフォルトの名無しさん :2006/07/23(日) 12:43:02
492です。 チョットとゆう言葉は、いけなかったみたいですね。 修正 チョット→出来るまで 最近Delphiを始めたんですが、使用しやすいので メインをDelphiに変えたんですよ。しかし印刷関係は 他の物に負けている感じがしますね・・・ まだ全然使い切っていないからかもしれないですが。
> しかし印刷関係は > 他の物に負けている感じがしますね・・・ そのあたりをどうするかは、各人の企業秘密だから ネットで聞いても教えてもらえない事が多い。
リポートツールをバージョンによってころころ変える。 ユーザすくないからドキュメントも少ない。 GUI ビルダ以外には Delphi のメリットはないけど、これが案外大きいんだよね。
サードパーティに頼らずにちゃんとしたのを最初から出していれば状況違ったかもね。
印刷関係はツールに頼らず自前でライブラリ作るのがお勧め 変にツール使うと応用が聞かなくて結局後で困る
GUI関係はツールに頼らず自前でライブラリ作るのがお勧め 変にツール使うと応用が聞かなくて結局後で困る
単にコピペだけでひねりが何にもねえな。
VCLが便利だからDEL使ってるヤツが、印刷だけ自作ライブラリ作れってのも 説得力ないなーーーーーーーーーーー
> サードパーティに頼らずにちゃんとしたのを最初から出していれば状況違ったかもね。 これは Indy にも言える。バージョンによって実装がころころ変わるし。 印刷やネット関係は今やアプリづくりには必須だろうに。某は手抜きするんだよな。
> GUI ビルダ以外には Delphi のメリットはないけど これに尽きる。ほかは愚痴言ってショボイのつくるか、金だして買ってくるがよろし。
TRegExprをつかってjaneのReplaceStr.txtにある$1$3みたいなマッチした文字列での 置換をしたいんだけど、どう書けばいいの? <>(ID:(.{8}|\?{3}))(0)(●)?(\sBE:\d+-(\s|#+))?$[TAB]$1$3 [PC]$4$5
GUI 以外では、VCLはライブラリとしてはものすごく貧弱ってことは定説だしね。
そもそもそういう名前だしなw
DB周りが一番重宝してるけど...
ライブラリの充実って・・・ 意味和漢ね
ま、意味和漢ねやつらが使ってるということで。
>>487 たとえばこんな感じで書き出せます.
procedure TForm1.SaveList;
var
fs: TFileStream;
i: integer;
begin
fs := TFileStream.Create(ListFileName, fmCreate);
try
for i := 0 to pred(FList.Count) do
fs.Write(PFileRec(FList[i])^, sizeof(TFileRec));
finally
fs.Free;
end;
end;
ただし,文字列は短い文字列かヌルで終わる文字列に格納しなければなりません.
TNantoka = packed record // ファイルに保存する場合は必ずpacked recoed
Name: shortstring; // 短い文字列.この場合256バイト使う.最大255バイト格納可能.
Time: TDateTime;
end;
通常の文字列型(長い文字列)は変数に文字列の場所だけを格納しています.
そのためレコードの中の文字列変数の内容を書き出しても書き出されるのは意味のない整数値です.
印刷に関する質問です。 下記のソースを実行しますと 文字列は印刷できるのですが 図形の方が印刷されません ご助言お願いします。 printer.Title:='testprint'; printer.BeginDoc; printer.Canvas.Brush.Style:=bsClear; printer.Canvas.TextOut(100,100,'test'); printer.Canvas.Ellipse(100,100,100,100); printer.EndDoc;
>>517 大丈夫。ちゃんと印刷されてるよ。
高さ0、幅0の楕円が。
519 :
517 :2006/07/25(火) 03:41:31
お恥ずかしい限りです(^^;
520 :
デフォルトの名無しさん :2006/07/25(火) 07:05:24
文字列のByte数を返す関数って何だっけ? s: Widestring; s := 'abc'; //Byte数は6だが Length(s); //これだと返り値は3でByte数じゃない
strlen
>>521 StrLenやってみたけど、期待してたのと違いました。
WidestringでByte数調べるにはLengthで調べた文字数にx2するしかないのかな。
それでなんの不都合が?
Length 関数は,文字列 S に格納されている文字数または配列内の要素数を返します。 1 バイト(AnsiString)およびマルチバイト文字列の場合, Length は文字列によって使用されるバイト数を返します。 Unicode (WideString) 文字列の場合は,バイト数を 2 で割った値が返されます。 ヘルプ読もうとも思わないやつは初心者スレであっても来なくていいと思うよ
>Length 関数は,文字列 S に格納されている文字数または配列内の要素数を返します。 >1 バイト(AnsiString)およびマルチバイト文字列の場合, >Length は文字列によって使用されるバイト数を返します。 >Unicode (WideString) 文字列の場合は,バイト数を 2 で割った値が返されます。 俺はこの質問に関係ない初心者だけど、Unicodeとか意味ワカンネ
それは Delphi と関係ないし、google 先生に訊けばいいよ。
>>520 stringでもWideStringでも
nSize := Length(s) mod sizeof(s[1]);
mod かよ?
一行で済むことをえらそうに・・・
質問している側が煽らない
掛け算すると、「いろいろ不便」と感じる人がいるのはこのスレですか?
他人の面倒見るのが好きでもない奴はこのスレ覗かないほうがいいかもな…
>Unicode (WideString) 文字列の場合は,バイト数を 2 で割った値が返されます。 うーーーーん、おれが不思議なのは、2倍することで解決することをなんで人に訊くのか? ってことだな。「いろいろ不便」って感じること自体が謎なんだが。
そういう言い方しかできない奴ってたまにいるよね
どいつもこいつも釣られるなよ
もはやアホしか残ってねぇな
>>530 のコードは
AnsiString なら 3
WideString なら 6
が返るところがミソ
文字列のByte数求める汎用関数求めてるのに
2倍がどうのこうの煽ってる馬鹿ってなんなんだ?
>>520 読んだのか?
WideStringなら2倍で解決だろボケ
Length(s) shl 1
一発で返す関数があるかないかでないってことで終わりだろ。バカばっか
へー、2倍する関数つくったらいいじゃないの。へんなの
nSize := Length(s)*SizeOf(s[1]); これを関数にするとして、どうやって s を受け取るつもりなんだろか?
「一発で返す関数がある」として、引数がどうなってると考えたのか気になる。
function ByteLength(const s: String): Integer; overload; begin Result := Length(s); end; function ByteLength(const s: WideString): Integer; overload; begin Result := Length(s) * 2; end;
そうそう、たんに2倍するだけ。疑問点なんかないよね。
どうせライブラリ充実厨の質問だろ
ちょっとまえにも、「一発で返す関数」について質問があったね。 なんでも「一発で返す関数」にこだわるのは初心者にはありがちだけど。
このスレVCLの貧弱さに話が及ぶとすぐキレるな
VCL の貧弱さ、っていうか、この前のは貼ってあるTMemo全部クリアする関数だからなぁ しかもループつかわないで(笑
(誤)giko さん (正)delfusa さん 失礼。
そのライブラリに「TMemo全部クリアする関数」なんかあるのか?
WideString のバイト数を一発で返す関数はあるんだろうな
ねぇ、二倍にするとかってのは何が問題になってんの? 何が問題なのかがわからない。
Length('あAあ') なら5が返ってきてほしいわけ?
>>520 ちょ、え?
皆に質問〜
s: Widestring;
s := 'abc'; //Byte数は6だが
半角abc は、3byteなんじゃないの?
Widestring 指定すると、6byteになるの?
WideString は (というか、Unicodeは) 全ての文字を2バイトで表す。
それはエンコード方式による
>>560 じゃあ integer に 1 を代入したら 1 ビットになるんかい?
566 :
560 :2006/07/25(火) 23:14:15
ビット?
1 は 1 bit で表せるじゃん。
ひょっとして1って文字は1バイトだけど数字としては1ビットで扱うって事か? くだらねええええええええええええ
570 :
デフォルトの名無しさん :2006/07/25(火) 23:54:39
ha?
↓5レス以内にヴビ厨出現
572 :
デフォルトの名無しさん :2006/07/26(水) 03:56:08
ヘルプファイルを表示させたく以下の様に記述したのですが、 ヘルプを開くときにチラツキが発生します。 何か問題があるのでしょうか? procedure TForm1.SearchforHelpOn1Click(Sender: TObject); begin Application.HelpFile := 'HELP.HLP'; Application.HelpCommand(HELP_FINDER, 0); end; また他の記述方法には、どのような方法があるのでしょうか。
1バイトは8ビットだお
代入した値によって変数の型が変わるのか?っていう皮肉だったんだろう。
バカばっかりだな
くだすれだしな
Delphi の WideString のはなしだろ
まあなんつーか夏だけどもっさり行こうぜ しかしPG始めたばかりの頃って何でも1つにまとめたくなるんだよな…
なまじ、VCLはGUIについては、手取り足取りしてくれるものだから ほかの処理もなにか便利な関数があるに違いない、とか思いこむ傾向が あるんだよね。
だからといって無くてもよいことにはならないんだが 精進は怠るな
誰に言ってるの?
自分自身にだろ
なるほど。
強いコスモを感じる
強い厨房臭を感じる
592 :
デフォルトの名無しさん :2006/07/27(木) 13:07:14
モーダルなフォームにいろいろ書かせて、 OKボタンを押した後エラーチェックをしてエラーがあったら 「入力間違ってまつ」みたいなMessageDlg出して フォームを閉じない、みたいなことがしたいんですけど これ以上思いつきません。(うまくいかない) (判定部) if ck = false then begin MessageDlg('入力間違ってまつ',mtError,[mbYes],0); Button1.ModalResult := mrNone; end; 実装の方法自体がまずいのか。
OnClickでやった方が早い
594 :
592 :2006/07/27(木) 13:25:35
OnClickで似非モーダルフォームを作れない厨なので。
フォームのonCloseQuerynイベント内に if 入力エラー有り then begin MessageDlg('入力間違ってますです。。。', mtError, [mbOK], 0); CanClose := False; end これでフォーム閉じなくなる
OnCloseQueryでキャンセルするのは?
VB.NETならプロパティ一発なのにね
598 :
592 :2006/07/27(木) 13:48:00
>>595-596 ケコーン
ともあれサソクス
onCloseQueryとか使いかたわかんねーけどぉっ!!
(道理でonCloseだけ見ててもヒントがないわけだ)
599 :
592 :2006/07/27(木) 13:51:40
>>597 あまり持ってるならくれ。貧乏なのでD6Pなのだ。
OnCloseにはTCloseAction &Actionっていう同じ事できるイベントハンドラの引数があるんだけど。 使い方はヘルプの例の通り。
ドトネトは貧乏人には使えません。
602 :
592 :2006/07/27(木) 13:57:58
ガーン ヘルプも難しいんだよっ!!(逆ギレ)
onCloseはフォームが閉じた後に呼ばれて onCloseQueryはフォームを閉じる前に呼ばれる (閉じる前に問い合わせるからCloseQueryって名前)
>>595 に答え書いてやっただろ
入力エラー有りの部分を直してそのままコピペ汁
学校の怪談がまったく怖くないんですがVCLのバグですか?
606 :
592 :2006/07/27(木) 14:06:16
確か、WM_QUERYなんたらっていう等価のメッセージがあって、 それが綺麗にラップされてるのがonCloseQueryだおね。 >VB.NETならプロパティ一発なのにね 変な作り。 脂肪 m9(^Д^)プギャー!!
ブビチュウってイベントハンドラ内で外からプロパティいじるコーディングしか出来ないんだね。 ActiveXから進歩してなくてイタス。
良スレsage
ま、ヘルプもまともに理解できないほうが痛いけどね
そういや、フォームを閉じるときにリソースを開放するのはonCloseQuery内が基本というのがあったな。 onCloseが呼ばれない時があるとかなんとか。
>onCloseが呼ばれない時があるとかなんとか。 はつみみです。
アプリケーションが起動した状態でWindowsを終了すると シャットダウン処理でアプリケーションが終了されるけど onCloseイベントは呼ばれない(onCloseQueryは呼ばれる) 最も、普通はリソースの開放はonDestroy内でやるだろ これは必ず呼ばれるし
Delphi6 personalでindy10のIdHTTPを使っていろんなサイトに アクセスするプログラムを作っているんですけど、 サイトが消えていたりとかしたら、エラーが出てプログラムが止まってしまいます。 エラーが出てもプログラムが止まらないようにするにはどうしたらいいですか? tryやブレークポイントっていうのも試してみましたが、無理でした。
>エラーが出てもプログラムが止まらないようにする エラー状況を調べてエラーの内容に応じてしかるべく動くようにすればいいよ
デバッグ中にってことか? エラーをtryexceptでかこって走らせればいいんじゃないの 一度止まるけどもう一回F9押せば続きから動く
デバッガオプション→言語固有の例外→無視する例外の種類 種類調べるのが面倒なら「Delphi言語の例外で停止」をオフにする
やっぱりこいつらアホだな。 おまえらIndy使ったことないだろ。 的外れなレスばっかりw
ソースついてんだろ?
非同期通信のことかな?
プログラムがとまらないようにプログラムすればいいじゃん。 プログラマだろ?
exe をエクスプローラからダブルクリックして起動したらいいじゃん。
夏・・・ だからって理由だけじゃないだろうな
いまじゃ、厨房専用に近いからな Delphi。しょうがあんめぇ
ひどいな・・・。
解決しました。ありがとうございます。
try
IdHTTP1.Get('
http://www.yahoo.co.jp/ ');
except
end;
このようにしてexeファイルをエクスプローラから
起動したらエラーで止まることなく、動かすことができました。
finallyだとエラーで止まるようです。
それはexceptでエラー拾ってるからだ finallyはtryが終わった後必ず実行するだけだからエラーは拾えない
delphian worldって閉鎖しちゃったんですか?
久々にきたら、人いるねー。
新人さんもいるあたり、まだまだ地味に使われてるのかね
>>288 Delphiのconstは、C++のconstなどとは違うのですよん・・・
>>452 数年前の俺と同じ人がいたw
VCLつかわね!SysUtilsなどいらね!って思ってた時期もありました・・・
>>517-518 ワロタ
ちょっと基本的な質問 Iniからデータ読み込み、書き出しのタイミングについてです。 読み込みは、FormCreateですよね。 では、書き出しは? FormCloseに書いているのですが不都合ありますかね・・・ FormDestroyだとエラーが起こったときに、読み出し前に書き込みが起こってしまって 値が初期化されてしまう可能性がありますよね・・・
別に、OnDestroyでいいと思うが そんなに気になるなら、OnCloseQueryの中で、 if CanClose then begin end; の中でやればいいじゃん
読み込みが終わったらフラグを設定するだけでいいような。
漏れはいつも、
>>632 さんの位置ですなー。
OnDestroyだと、
常駐アプリの場合
ログオフ時とか、シャットダウン時とかに
微妙に保存されないような気がして。
> delphian worldって閉鎖しちゃったんですか? 場所変えた見たいだけど、移行完了してないね。大丈夫なのかしら?
>>634 逆じゃないっけ
Closeだとシャットダウン時に呼ばれなかった木が
WM_ENDSESSIONはCloseQueryでないと 捕まらないはずだったろ確か
>>635 なんか、終わりそうだね・・・
念のため全コンポダウンロードしました
557個でした
>>638 ファイルがおいてあるパスを教えてくれー
>>635 なんかフィッシング詐欺にでもあったように見える・・・
どんどんコミュニティーが縮小されていくよね・・・
Delphi用のYAMLライブラリってどこかありますか? XMLにうんざりしました
645 :
デフォルトの名無しさん :2006/07/29(土) 19:06:38
コードテンプレートってのを使ってみようとしたのですが、
テンプレートを作成したものの、テンプレートツリーに表示されません。
また、補完もできていません。
行った手順は、ファイル、新規作成、テンプレートで、
以下のように入力して、
C:\Documents and Settings\(ユーザー名)\Local Settings\Application Data\Borland\BDS\4.0\code_templates\wait_after_console.xml
に保存しました。
<?xml version="1.0" encoding="utf-8" ?>
<codetemplatexmlns="
http://schemas.borland.com/Delphi/2005/codetemplates "
version="1.0.0">
<template name="waitafterconsole" invoke="manual">
<description>
コンソールアプリで終了時に待つ
</description>
<author>
ほげ
</author>
<code language="Delphi"><![CDATA[{$WARN SYMBOL_PLATFORM OFF} if DebugHook <> 0 then Readln; {$WARN SYMBOL_PLATFORM ON}]]>
</code>
</template>
</codetemplate>
開発環境は、Delphi2006です。
646 :
デフォルトの名無しさん :2006/07/29(土) 19:27:40
>>644 サンクス
使い方わかんねー・・・
マニュアルとかサンプルないし orz
647 :
643 :2006/07/29(土) 19:33:12
648 :
643 :2006/07/29(土) 20:06:42
うまくいかね・・・。 仕様が、先進的過ぎて、 ふつーに、書いたり読んだりできないよ・・・。
泣くな。無ければ作れ。 フロンティアが待っている。
650 :
643 :2006/07/29(土) 20:21:29
>>643 なんでXMLが流行ってるのか漏れも不思議だ
言うなれば begin - end を多用する
Ruby や Pascal が流行って
Python が流行らないようなもんか
使い安さじゃね?
ベータマックスよりVHSが流行ったしな。 合理性だけじゃないのかもな。
単にマイクロソフトが流行らそうと騒いでるからマイクロソフターが進んで使ってるんじゃないの・
XMLは名前が微妙にカッコイイ
>>631-637 起動時にiniの読み込みに失敗しても、起動されて
各種設定を設定できるのだから、普通に書き込むべき
という考えもある。
各設定毎に、読み込みに成功したか変更した場合にのみ書き込めば良いのか。
>>654 OfficeはXML化されたね
そのうちレジストリもXMLにしそうで怖い
658 :
デフォルトの名無しさん :2006/07/30(日) 01:11:05
154,548,632を200,000,000とか、245,235を300,000というように 整数を切りの良い数字に変換するにはどう処理をすればいいですか?
2桁目を四捨五入すればいいです。
660 :
デフォルトの名無しさん :2006/07/30(日) 01:38:05
>>659 Round関数は小数点切捨てですが、2桁目を四捨五入する
関数が探しても見当たらないのです。
もう少し教えていただけないでしょうか。
661 :
デフォルトの名無しさん :2006/07/30(日) 01:49:10
自己レスで失礼します Shishaで四捨五入できそうです
四捨五入したい変数に0.5足してroundすればいい
VB.NETなら関数一発なのにね
釣れますか?
d = (int)(log(x)/log(10)) で桁数が分かるから n = ((int)(x / d)) * d
ちがった d = 10 ^ ((int)(log(x)/log(10))) n = ((int)(x / d)) * d にしてくれ すまん
桁数でわるのか?
668 :
デフォルトの名無しさん :2006/07/30(日) 12:39:48
簡易的なスケジュールソフト作っててアラーム昨日を実装したいな と思ってるんですがDateTimePickerとTimerの使い方がよくわかりません。 DateTimePicker1でユーザーから受け取った時間とTimerのNowメソッドで 得た現在時刻を比べてアラームを鳴らそうかと考えているのですが どのようにコードを書いたら実現できますか?editだと.Textとかで 読み込めばユーザーが入力した値を読み込めたのですがDateTimePicker1だと そんなメソッドないような・・・・ 具体的にどのように書けば良いのかどなたか教えてください。
DateTimePickerとかTimer使った簡単なアプリは組んだことあるの? つかヘルプ見てもその質問?
まあ、くだすれなんだし。 答えたい人が答えればいいがな。 DateTimePicker1.DateTimeとか DateTimePicker1.Timeとか で取得する。 >DateTimePicker1だとそんなメソッドないような・・・・ いやいや、そんなメソッドがないコントロールなんて 存在価値がないのではないかと。 しかも、メソッドじゃなくてプロパティね。
VBならプロパティで一発なのにね
釣れますか?
たぶん、StringReplaceを使うんだよ
674 :
デフォルトの名無しさん :2006/07/30(日) 17:51:59
返答ありがとうございます。釣りではなくマジでわからん初心者です。 とりあえず今、 procedure TForm1.Button1Click(Sender: TObject); var time:TDateTime; TempDate1:TDateTime; begin Label7.Caption := ''; DateTimePicker1.DateTime:=TempDate1; time:=TempDate1-now; label7.Caption:=DateTimeToStr(time); みたいな感じなんですがうまく動きません。 時間の計算ってどうやるんですか?
DateTimePicker1.DateTime:=TempDate1; 逆じゃね?
676 :
デフォルトの名無しさん :2006/07/30(日) 17:57:33
返答ありがとうございます。釣りではなくマジでわからん初心者です。 とりあえず今、 procedure TForm1.Button1Click(Sender: TObject); var time:TDateTime; TempDate1:TDateTime; begin Label7.Caption := ''; DateTimePicker1.DateTime:=TempDate1; time:=TempDate1-now; label7.Caption:=DateTimeToStr(time); みたいな感じなんですがうまく動きません。 時間の計算ってどうやるんですか?
677 :
デフォルトの名無しさん :2006/07/30(日) 18:05:31
すみません。間違えて2重投稿してしまいました。
>>675 さん
そうですね・・。なんたる初歩的ミス・・・orz
ご指摘感謝です!
とりあえず、今こんな感じなんですが、実パラメータと仮パラメータは
同一じゃないと駄目みたいなエラーが出てコンパイル通りません。
procedure TForm1.Timer1Timer(Sender: TObject);
var
HH,MM,SS:TDateTime;
time:TDateTime;
TempDate1:TDateTime;
begin
TempDate1:=DateTimePicker1.DateTime;
time:=TempDate1-DecodeTime(now,HH,MM,SS);
label7.Caption:=DateTimeToStr(time);
end;
>>677 HH, MM, SS の型が間違っている
ヘルプ見てよマジで
679 :
デフォルトの名無しさん :2006/07/31(月) 00:14:22
何度もすいません。一応 procedure TForm1.Timer1Timer(Sender: TObject); var HH,MM,SS:Word; time:TDateTime; TempDate1:TDateTime; begin TempDate1:=DateTimePicker1.DateTime; time:=TempDate1-DecodeTime(now,HH,MM,SS); label7.Caption:=DateTimeToStr(time); end; で上記のエラーは無くなったんですが今度は「実パラメータが足りません」 と出ます。デートタイムピッかーでは時刻「時間:分:秒」を取り出している ので(hh,mm,ss)で合ってると思っていたんですが何か足りないみたいです。 どなたかサンプルコードを書いてくださりませんでしょうか?
ヘルプを見ろと何度(ry
VBならヘルプ不要なのにね
VBも不要なのにね
DecodeTime(DateTimePicker1.Time, Hour, Min, Sec, MSec);
if FormatDateTime('hh:mm:ss', DateTimePicker1.Time) = FormatDateTime('hh:mm:ss', Now) then showmessage('おやつの時間です');
普通は0秒でアラーム出すとして、 Timer1.Interval := 100; とかして、 procedure TForm1.Timer1Timer(Sender: TObject); const bo0: Boolean = False; begin Timer1.Enabled := False; try if FormatDateTime('s', Now) = '0' then begin if not bo0 then begin if FormatDateTime('hh:mm', DateTimePicker1.Time) = FormatDateTime('hh:mm', Now) then showmessage('時間ですよ'); bo0 := True; end; end else begin bo0 := False; end; finally Timer1.Enabled := True; end; end;
TDBCtrlGridにSpeedButtonまたはButtonを配置したいのですができません。 どうしたらいいですか。 またはTDBCtrlGrid上に配置できるフリーのボタンコンポーネントがあれば教えてください。
ほかのボタンが駄目ならパネルコンポから派生しているボタンコンポなら貼り付けられるかもしれません.
(Delphian Worldにあったような気がしますが未確認)
(ControlStyleにcsReplicatableが含まれていないコンポは載せられないようです)
>>684 Delphi 5はヘルプの誤植なぜかDecodeDateの文法が載ってます orz
D6以降は直っているのでしょうか?
>>688 >>689 ありがとうございました。
いろいろ調べた結果、以下のような感じコンポーネントを作成してでうまくいきました。
public
constructor Create(AOwner: TComponent); override;
constructor TSpeedButtonEx.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle + [csReplicatable];
end;
ffmpegを使った変換ソフト(音楽向け)を作っています。 変換自体はCreateProcessで出来るようになりました。 しかし、変換の進捗状況が表示されない(できない)のでイマイチ使いづらいです。 コンソールに表示されている文字列(この場合は変換状況)をリアルタイムに取得するにはどうしたらいいのでしょうか? ご教授お願いします。
リダイレクトでググル
693 :
691 :2006/07/31(月) 20:59:05
>>693 StringReplaceでいいじゃない!!
TStrings互換でTFileSteramと同じように直接ファイルに読み書きできるクラスって有りますか?
696 :
デフォルトの名無しさん :2006/08/01(火) 00:01:19
ダイアログメッセージを優先的に前面に表示させたいのですがどうやればいいんですか?
697 :
696 :2006/08/01(火) 00:34:22
ダイアログボックスではなくメッセージボックスでした。。。 メッセージボックスを最全面に表示させるのに MB_SETFOREGROUNDというフラグを使えばよさようなんですが 実際のコードの使い方がわかりません。ご存知の方いらっしゃいましたら 教えてください。
>。。。 このクセやめたら教えてあげる。 キモいから。
ざわ。。。 ざわ。。。
701 :
デフォルトの名無しさん :2006/08/01(火) 03:22:08
フォーム上でボタンやチェックボックス等にフォーカスがある場合に キーを押すと、Altキーを一緒に押していなくてもフォーム内のコンポーネントに 割り当てたアクセラレーターキーが応答してしまいます。 この現象を回避するにはどのようにしたら良いのでしょうか?
まるちゃんか
>>696 ShowMessage系関数やMessageDlg系関数ではシステムモーダル
のオプションはサポートしていない。MessageBoxAPIを直接呼出し、
スタイルのパラメータにMB_SYSTEMMODALを指定する必要がある。
MessageBox(Self.Handle, 'Hello.', 'Sample', MB_OK or MB_SYSTEMMODAL);
DBCtrlGridに配置されたコントロール間の移動に上下カーソルキーを使いたいのですが どうすればいいでしょうか。
>>704 う〜ん。こんな感じかな。
procedure TForm1.DBCtrlGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_UP: DBCtrlGrid1.DoKey(gkPriorTab);
VK_DOWN: DBCtrlGrid1.DoKey(gkNextTab);
end;
end;
>>705 ありがとうございます。
うまくいきました。
707 :
デフォルトの名無しさん :2006/08/01(火) 23:48:18
Ver7ですが、DBコントロールグリッドにDBLookupControlが貼り付けできません。 Ver5では出来たのですが、エラーを回避する方法はありませんか?
DBLookupComboBoxの間違いではないかいな? ControlStyle属性にcsReplicatableを持つものはDBLookupControlからの派生コンポ DBLookupComboBox、DBLookupListBoxのうちDBLookupComboBoxだけみたいだが。
709 :
デフォルトの名無しさん :2006/08/02(水) 16:53:47
8ビットカラーで白より一段階暗い色と言うのは$FEになるんでしょうか? また、その色を32ビットに変換するにはどのような計算をすれば良いんでしょうか?
>8ビットカラーで白より一段階暗い色と言うのは$FEになるんでしょうか? いいえ >また、その色を32ビットに変換するにはどのような計算をすれば良いんでしょうか? 使いたいグラフィック環境に合わせた計算を行います
delphiは関係あるのかと小一時間
くだすれだからいいじゃん
gdスレか('A`)
715 :
デフォルトの名無しさん :2006/08/03(木) 03:47:30
何かコンポーネントを追加した時、それを使用してデバッグしてると そのコンポーネントのソースまでステップ実行されてしまいます。 このように任意のソースをステップ実行されないようにするには、どこで設定すればよいのでしょうか? Delphiの標準ライブラリはスキップされているので、どこかで設定できると思うのですが 探し当てることが出来ませんでした。
ヒント:ソースがなければ表示できない
過疎スレsage
D7でIBXのIBQueryで sum(FieldA) SUMA と集計したものをクイックレポートで明細行に印刷し サマリーバンドでQRExprにsum(SUMA)などとやって総合計を印刷しようとしているのですが Fieldの型がTLargeIntFieldだけ表示されません。 どうすればいいでしょうか。
StringGrid で、セルを仕切っている線の色を、セル単位で変更できるのでしょうか? もしできるのであれば、セル単位で変更するにはどうすれば良いのでしょうか?
仕切ってるんだから、セル単位って意味不明
719です。
>>720 さん、説明不足ですみません。
StringGrid では、セルを仕切る「線」が表示されていますよね。
通常、グレー系の色みたいな感じの「線」で表示されていますが、
その「線」の色や太さ等をセル単位で変更できるのか否か、の質問でした。
仕切ってる線はどっちのセルにも属してない、ってことでは?
選択しているセルってこと?
719です。返事遅くなりまして、申し訳ありません。
>>722 さん、レスありがとうございます。どちらのセルにも属さない、と言うことは、
この「線」は、プロパティやプログラム中で等で設定できない「仕様」なのですか?
>>723 さん、選択しているセルではありません、セル単位で、セルを仕切る線の色と線の太さを
プログラム中で変更できるなら、その方法を知りたいという質問です。。
>719 onDrawなんとかイベントで描画。 コンポ作るのが理想だが、おまえには無理だろう。 StringGridで描画する例はggれ
OnDrawCell の Rect には仕切り線は入ってない。普通は無理。 そもそも仕切り線はセルに属してないし。
>>725 さん、
>>726 さん、 レスありがとうございます。
>>725 さん、イベント描画は私には無理です。超初心者なので、無理みたいです。
>>726 さん、セルに属していていないのですね。
・・・勉強不足ですみません。出直してきます・・・。
あ、私にレス下さった皆様の優しさに感謝します。 このスレの皆様に幸ありますように!
やろうと思えばできないものはない
今やってみたけど、Rectに入って無くても描画は出来る。 描画するのは無理じゃない。仕切り線をセル毎に描ける。 >726は、Rectの範囲外は描画できないの?
OnDrawCellで、与えられるRectに対して LeftとTopを-1 RightとBottomを+1すれば 仕切り線を書きかえる事できるよ。
Sourceが長いので、面倒なんだが..... どこか、いいSource掲載場所はないかい?
>>727 とりあえず作ってみたのでさらす.(1/3)
type
TForm1 = class(TForm)
(略)
private
function CellExists(aCol, aRow: longint): boolean;
function IsTargetCell(aCol, aRow: longint): boolean;
(略)
end;
// StringGrid1に指定されたセルが存在するならTrue,しないならFalseを返す.
function TForm1.CellExists(aCol, aRow: Integer): boolean;
begin
Result := (0 <= aCol) and (aCol < StringGrid1.ColCount) and (0 <= aRow) and (aRow < StringGrid1.RowCount);
end;
//☆指定されたセルが周囲の線の色を変えるセルなのかを調べて返す.
function TForm1.IsTargetCell(aCol, aRow: Integer): boolean;
begin
// 指定されたセルが存在しないなら戻り値をFalseにする
if not CellExists(aCol, aRow) then
Result := False
// そうでなければ…
else
// 色を変えるべきなのかどうかを調べて,そうならTrueを,そうじゃないならFalseを戻り値にする.
// ※ここでは仮にグリッドの桁も行も奇数なら色を変えることにします.
Result := odd(ACol) and odd(ARow);
end;
(つづく)
(つづき 2/3) //☆グリッドのセルに描画するイベントハンドラ // ここではセルの境界線の太さが2以上の場合も考慮して,FillRectメソッドで線を描画します. procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var LineWidth: integer; begin // 固定セルなら何もしないで戻る if gdFixed in State then exit; // グリッドの仕切り線の太さを得る. LineWidth := StringGrid1.GridLineWidth; // 仕切り線がない場合は何もしないで戻る if LineWidth < 1 then Exit; // 境界線の色を指定する(FillRectメソッドで塗りつぶしに使うのはブラシの色なのでペンではなくブラシの色を指定する) StringGrid1.Canvas.Brush.Color := clGreen; // ここでは緑色 // このセルが枠の色を変える対象なら,セルの右と下の線を描きなおす. if IsTargetCell(ACol, ARow) then begin StringGrid1.Canvas.FillRect(Bounds(Rect.Right, Rect.Top, LineWidth, StringGrid1.RowHeights[ARow])); StringGrid1.Canvas.FillRect(Bounds(Rect.Left, Rect.Bottom, StringGrid1.ColWidths[ACol] + LineWidth, LineWidth)); end; // このセルの右のセルが色を変える対象なら,セルの右の線(右下隅を含む)を描きなおす. if IsTargetCell(ACol + 1, ARow) then StringGrid1.Canvas.FillRect(Bounds(Rect.Right, Rect.Top, LineWidth, StringGrid1.RowHeights[ARow] + LineWidth)); // このセルの下のセルが色を変える対象なら,セルの下の線(右下隅を含む)を描きなおす. if IsTargetCell(ACol, ARow + 1) then StringGrid1.Canvas.FillRect(Bounds(Rect.Left, Rect.Bottom, StringGrid1.ColWidths[ACol] + LineWidth, LineWidth)); (つづく)
(つづき 3/3) // このセルの右下のセルが色を変える対象なら,セルの右下隅の線(というか点)を描きなおす. if IsTargetCell(ACol + 1, ARow + 1) then StringGrid1.Canvas.FillRect(Bounds(Rect.Right, Rect.Bottom, LineWidth, LineWidth)); end; //☆セルのテキスト編集が終わった後に呼ばれるイベントハンドラ // 編集の後にセルの右と下の線が描きなおされます.このとき,元の線が消されてしまった場合は // このセルを描きなおします(ここでは面倒なのでグリッド全体を描きなおしています). procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); begin if IsTargetCell(ACol + 1, ARow) or IsTargetCell(ACol, ARow + 1) or IsTargetCell(ACol + 1, ARow + 1) then StringGrid1.Invalidate; end; (おわり) もうすぐ終電なのでとりあえず書き逃げ失礼.
>715 コンポーネントパッケージのプロジェクトオプションのコンパイラ設定で デバッグ情報を生成しないようにする。
Rect の外に書ける書けないじゃなくて、特定のセルの周囲の仕切り線のうち、 どの線をそのセルごとに描くか、が問題なんでしょう。例えば、奇数列のセルは太くて 赤い線で、偶数列のセルの線はもっと太くて青い線で、ただし、対角のセルは細くて 黄色で、とかいう仕様は、全部同時に満たせない。 しきり線は文字通り、仕切っている両側のセルに対して対等であるから。
>>736 レスありがとう。
具体的にはどのようにすればよいのでしょうか?
FastMMを使ってデバッグすると、ステップ実行でFastMM4.pasに移ってしまうので
頭を悩ませています。
一時的にマウスの右クリック左クリック共にクリックの無効化させるにはどうすればいいのでしょうか?
740 :
デフォルトの名無しさん :2006/08/04(金) 07:24:22
クリックされても何もしなければ良い。
Hook
くだしつですみません。 文字列に変換する関数で、IntToStr や ColorToString などがありますが、 後ろのスペルが Str になってたり String になってたりで間違えやすいです。 何か法則のようなものがあるものなのでしょうか。
ない。 DelphiはVB.NETと比べてオブジェクト指向度が低く クラスにメソッドをぶら下げていない単発関数を思いつきでボコボコ追加していくから こういう混乱が起こりやすい。
Windowsが次期版になったら、 何が使えないとか、今の時点で分かるとこ教えて
D7のFormatDateTime関数のヘルプの例に Caption := FormatDateTime('"The meeting is on " yyyy/m/d," at " hh:mm AM/PM', Now + 0.125); というのがありますが、なぜ0.125を加えているでしょう?
748 :
デフォルトの名無しさん :2006/08/04(金) 11:31:36
すみません、FAQかもしれませんが教えてください。 環境 win2K+Delphi6 画像ファイルをTImageで読み込んだ後に ズームイン、ズームアウトしたいのですが、どうしたらいいでしょうか?
>>748 StretchをTrueにしてHeightとWidthの値を変える。
>>749 その3時間が地域差なのか夏時間なのか知りたい質問かもね。
752 :
748 :2006/08/04(金) 12:09:11
>750さま ありがとうございました。 おかげさまでできました。 素人なので股ご迷惑おかけするかもしれませんが ご指導ご鞭撻の程をよろしくお願いします
股ご迷惑
754 :
746 :2006/08/04(金) 15:12:59
ううっ アホな質問してしまった。忘れてくださいまし。それから お答えいただいた方ありがとうでした。
756 :
デフォルトの名無しさん :2006/08/04(金) 18:55:47
Delphiでスクリーンキャプチャーをし、その画像を保存したいんですが、どのようにすれば出来ますか? 環境は、Win2kSP4、Delphi6Personalです。
Windows.DesktopDC で画面全体の DC を取得できる。
758 :
756 :2006/08/04(金) 19:29:47
Windows.DesktopDCとはどのように使うのでしょうか? そのままGoogleに入れても出てきませんでした。
ていうか、そんなのあったっけ? CreateDCで HDC 取得して、取り込めば良い。
VB.NETに嫉妬するDel厨わろす
>738 FastMMはコンポーネントじゃねぇ。 要はFastMM4.pasをデバッグ情報なしでコンパイルしてその.dcuをリンクするようにする。 たとえばFastMMを使うダミーのプログラムを用意してプロジェクトオプションで デバッグ情報なしとしてコンパイル。それで生成された.dcuを C:\Program Files\Borland\Delphi#\Libにコピーする(邪道だが)。もちろん FastMM4.pasを本番のプロジェクトからはずすこと。プロジェクトカレントに FastMM4.pasがあったらそっちを使われちゃうからね。
ソースの頭に突っ込んでおく {$DEBUGINFO OFF}
>>762-763 グレイト!
余談だけどFastMMのFullDebugModeってリークしてるソースの位置まではわかないのね。
MemCheckも一緒に活用しろってことかしら?
719です。返事が遅くなりまして申し訳ありません。
>>729 様
>>730 様
>>733 様。 レスと具体的なソースまでありがとうございます。
ただ、まだソースのほうはプログラムで反映する時間がありませんので、
都合ができましたら、試してみます。
あと、
>>737 様の発言が、私の希望する内容にかなり近いです。
質問厨ですみませんでした。皆様の優しさに感謝します。
本当にありがとうございました。
たまに来る「VBなら〜」へのスルーぷりがいいなここ。
BDS2006を使っています。Win32アプリについて教えてください。 フォームにTListBoxを貼り付け、コンストラクタで ListBox1.Style:=lbVirtualOwnerDraw; ListBox1.Count := 1000000; ・・と記述して実行すると、リストボックス上でホイールスクロールができなくなります。 Countを小さくするとホイールスクロールは問題なくできるようです。 100万行以上のデータでホイールスクロールをしたいのですが、この問題を解決する良い方法は無いものでしょうか・・。
OnMouseWheel**でListのTopIndex変えれば?
VBならマウスも必要ないのに。
できたとしてもリストボックスで100万行から探したくねぇよ・・・
VBなら100万行から探すのも一発なのにね。
数十万件の項目をインクリメンタルサーチで絞り込んでくソフトなんて普通にあるのに なにをがんばってるんだこの子らは・・・
780 :
デフォルトの名無しさん :2006/08/05(土) 14:59:03
DelphiでjavaのBigDecimalに相当するクラスはありますか?
String Currency
まあ、100万件表示する正当な理由をいくら説明したところで、 解決方法は無いと言うことなんすかね。
Virtual TreeView は?
DelphiというかWindowsの問題だろ 試しに1個のフォルダにファイル100万個置いて エクスプローラーでホイールスクロールさせてみろ
そもそもの設計がおかしいんだろ。 DB関連とかなら100万件以上レコードがあるテーブルやクエリを表示するようなことなんていくらでもあるが、 全てを文字列にしてListBoxに追加するなんて事は普通しない。
自分の経験したことのないことに全く想像力の及ばないかわいそうな子
>>785 ListBox1.Style:=lbVirtualOwnerDraw;
これの意味わかる?
VBなら意味分からなくても使えるのにね。
Delphi6を使っています。 クリップボードに画像が保存されていて、 それをImage1に移したいんですが、どのようにすればいいですか。
uses節にClipbrdを追加してImage1.Picture.Assign(Clipboard);
791 :
デフォルトの名無しさん :2006/08/05(土) 19:47:39
VBなら一発なのにね。
792 :
789 :2006/08/05(土) 19:48:21
TWebBrowserで、表示が全て終わったのを知るにはどうしたらよいですか?
>>763 俺も自分つくったライブラリで、よくそれやるw
795 :
デフォルトの名無しさん :2006/08/06(日) 06:46:31
煽られすぎて耐性ができたのかもな
他言語のモンですが、Delphiで一行だけの文字列を入力させるダイアログを表示させるのはどうするんですか? コンポーネントパレットをザッと見たんですが、見つかんない… ま、コンポーネントにするほどのものでもない物なんですが。 「Delphi テキストを入力させる ダイアログ」でググっても適当なサイトがみつからず、困っています。
InputB InputQ
>InputQ ?
>>798 ありがとう。
InputBoxってのがヘルプで出ました。
多分これです。ありがとう。
InputQuery >793 DocumentCompleteとかじゃダメなんか?
802 :
793 :2006/08/06(日) 12:54:40
>>801 DocumentCompleteが起きても描画が終わってないときがあるんですよね。
まぁ、自分の回線が細いからかもしれませんが。
描画ってのはさ、文字選択したり、Scrollさせたり、ウィンドウをリサイズとか でも発生するんだぞ。 描画後に何するんだ?
VBなら描画なんて問題にならないのにね
勝手に793のやりたいことを推測すると 文書中の何かの要素(例:<A>〜</A>)を全部抽出したかったりするんだよ。 俺も他言語でやろうとしたが困って放置したなあ。 でもさ、読み込み終了って完璧に実装すんの難しいんだよね。 しかも文書読み込みの終了待ってから実行すると遅いし。 定期的に文書を読み込みまくるしかないのかなあ、って気がする。
806 :
805 :2006/08/06(日) 16:34:30
ていうか、HTTPを勉強しる。 HTTP通信が終わっても描画が終わらないなら、それは単にPCが遅い。 DelphiでのHTTPリクエストの読み方?シラネ
たぶんScreenShotを取るみたいな事をやるんだろーな。と推測。 DocumentCompleteで、 begin if なんかする準備OK then begin webbrowser.update; //画面更新するとか待ち時間入れるとか ここでなんかする。 end; end;
javascriptで画面を書き換えるタイプのwebページの場合、javascriptが実行される前に DocumentCompleteイベントが発生したりする。
Edit1(TEdit)のボーダースタイルをbsNoneにして、まわりを1dotの線で囲んだEditにしたいんですが、実現するのは難しいですか?
>>809 Ctrl3DをFalseにするだけのとは違うの?境界線の色を替えたいって話。
>>810 Thx!
できました。
プロパティエディタに無いもんだから解りにくかったです。
素人の辛いところ。
ないはずはないと思うのだが。
VBならプロパティエディタから一発だよ。
>>812 いまD6で見たけど、無い。
下位互換性保持のためにあるので、
普段は使わないという事のようで。
815 :
デフォルトの名無しさん :2006/08/07(月) 14:48:47
VBを使わないからこういう勘違いが起こる。
表示する項目 旧式
ボタンを押したらカーソル(入力カーソル)をEdit1に持ってくるにはどうしたらいいのでしょうか?
Edit1.SetFocus
>819 ありがとうございます。 ボタンを押したらって書いたんですが、 実は一番最初のカーソルがEdit1になるようにしたかったんですが Procedure Form1.FormCreateに Edit1.SetFocusと書いたら 「非表示ウィンドにはフォーカスを設定できない」みたいなエラーが起きてしまいました 初期カーソルをEdit1にするにはどうしたらいいでしょうか 何度もすいません
Edit1.TabOrderを0
OnShowはお勧めできない。
なぜ?
OnShow ってアプリの起動時以外も呼ばれるんじゃなかったけ。 OnShow := nil; ってすればいいんだけど。
素直にタブオーダーを最初に持ってくればいいと思うのだが。
禿同
てかForm1.ActiveControl := Edit1;
だからそのコードの実行タイミングのはなしだろ
ActiveControlはOnCreateでも設計時でも設定できる
素直にタブオーダーを最初に持ってくればいいと思うのだが。
2回言うな 2回言うな
なぜ?
自分の答えが採用されないとムッキーとなっちゃうんだろ
素直にタブオーダーを最初に持ってくればいいと思うのだが。
タブオーダーとフォーカスはまた別の話だけどな。 たまたま重なるケースもなくもないというだけで。
別にOnShowでいいと思うぞ。
別にTabOrderかActiveControlでいいと思うぞ。
次の質問いいですか?
禿同
回答作業員は解答だけしてればいいんだよ。 どれを選ぶかは質問者様が決めればいい事なんだからお前らが心配することではない。 ちょっと詳しいからって付け上がるなよ。
おまえもな。
禿同
質問作業員は質問だけしてればいいんだよ。 どれにどんな回答するかは回答者様が決めればいい事なんだから質問者が心配することではない。 ちょっとアホからって付け上がるなよ。
[゚д゚] デフラグガカンリョウシマシタ /[_]ヽ | | 。。。いいいいいかかかがががけけこしすすだだだちっっててでととどど ななななにはははばばめょよよららるるるれれれんんんアホ上事付作員 問問問回回心業様決答答者者質質質配
BDS2006です。 TWebBrouserのNavigateメソッドでURLを渡すときに、UTF8の日本語文字列を加えたいのですが、 javascriptのencodeURI、decodeURIに相当する関数はありませんか?
Navigate2 じゃね。
849 :
848 :2006/08/07(月) 23:10:56
あ、嘘嘘、忘れてくれ。
UTF8Encode UTF8Decode
851 :
847 :2006/08/08(火) 00:14:35
>>850 どうもです、できました。
出来ればURIに宜しくないコードの文字は、%20のように表記したいのですが、そういった関数はないでしょうか。
Delphiで、マルチスレッドを詳しく解説している書物を教えていただけませんか?
一番目の引数に配列を受け取り、二番目の引数に合計、三番目に平均を入れる手続きを作ってみたんですが procedure TForm1.Button1Click(Sender: TObject); var Ar: array[1..5] of integer; goukei:integer; heikin:double; begin Ar[1]:=2; Ar[2]:=5; Ar[3]:=9; Ar[4]:=6; Ar[5]:=11; Sumav(Ar,goukei,heikin); Label1.Caption:='合計は'+IntTostr(goukei)+' 平均は'+FloatToStr(heikin); end; procedure Sumav(a:array of integer;var b:integer;var c:double); var i:integer; begin b:=0; for i:=1 to 5 do begin b:=b+a[i]; end; c:=b/5; end; これをやってもおかしな表示がでてちゃんとできません・・・ 何がおかしいのでしょうか
それじゃ無理だ。この形を使うなら参照渡しにしなきゃできない
>>853 procedure Sumav(a:array of integer;var b:integer;var c:double);
var i:integer;
begin
b:=0;
for i:=0 to Length(a)-1 do //←
begin
b:=b+a[i];
end;
c:=b/5;
end;
これでどう?
引数に var をつければ参照渡しになるのでは・・・? procedure Sumav(a:array of integer;b:integer;c:double); だったら値渡しになるんだろうけど procedure Sumav(a:array of integer;var b:integer;var c:double); これは参照渡しじゃないんでしょうか
>>855 > c:=b/5;
これはそのままか?
>855 ああー!ちゃんと動きました。 なんとなくなんでi:=1 to 5じゃ動かないかわかったような・・・
>>859 procedure Sumav(a:array of integer;var b:integer;var c:double);
var i:integer;
begin
b:=0;
for i:=0 to Length(a)-1 do
begin
b:=b+a[i];
end;
c:=b/Length(a);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Ar: array of integer;
goukei:integer;
heikin:double;
begin
SetLength(Ar, 5);
Ar[0]:=2;
Ar[1]:=5;
Ar[2]:=9;
Ar[3]:=6;
Ar[4]:=11;
Sumav(Ar,goukei,heikin);
Label1.Caption:='合計は'+IntTostr(goukei)+' 平均は'+FloatToStr(heikin);
end;
861 :
855 :2006/08/08(火) 14:46:11
>>858 書き込まれてから気づいた。面倒なのでそのまま。
ついでにlength(a)=0 の時に例外生成とかいるかなと思った。
BDS2006です。 var a:TFileStream; begin FreeAndNil(a); end; これを実行するとアドレス違反が発生するのですが、そういうもんですか? a.free なら問題ないのでしょうか。
それはインスタンス作成してないのに Free メソッドをよびだしてるからだろ。
ヘルプによると、 「オブジェクトが nil の場合でも Free メソッドはエラーにはなりません。このため,オブジェクトが初期化されていない場合に Free メソッドを呼び出してもエラーにはなりません。」 とある。インスタンスを作成していなくてもFreeは呼べる。つまり、a=nilであっても問題ない。 最初の時点で a は nil ではない、無効なポインタなのではないだろうか。
ローカル変数は初期値不定だから、 グローバル変数やクラスのメンバーと違って、 nilが入っているとは限らない。 というか、その前に使ったスタックの影響をうけまくっているので、 たいてい入っていない。
クラス変数にしとけば初期値がnilになるんじゃね?
>インスタンスを作成していなくてもFreeは呼べる。つまり、a=nilであっても問題ない。 二つの文意が一致してません。nil ならエラーにならないのと、 「インスタンスを作成していなくてもFreeは呼べる」のとはまったく違う。
FreeAndNilはa.Free; a := nil;と等価(内部動作はちょっと違うけどまあ似たようなもの) で、Freeみたいなメソッドはコンパイル時にアドレスが確定してるから、 インスタンスを作っていようがいまいが呼び出せる ただ、メソッドは内部ではprocedure Free(Self: TObject)みたいになってて、 その中でSelfがnilではないか確認した後Destroyを呼んでる nilではない場合インスタンスが生成されてるものと認識するため、 無効なポインタをDestroyに渡しちゃう だからアドレス違反が発生する ・・・という認識でよかったでせうか?>識者の人
870 :
デフォルトの名無しさん :2006/08/08(火) 22:57:28
>869 だいたいOK。 「Freeのようなメソッド」は「静的メソッド」だけど。
だいたいってことはどっかダメなん?
大体ローカル変数にnilセットする意味が判らない。
ListBoxにTreeViewのOnChange、OnChangingと同等のイベントって無いの?
自分で確認した方が早いだろ
Object pascalの参照渡しって C言語のポインタと同じと考えていいの?
妙な質問だな Object Pascalの参照渡しは、Cの参照渡しと同じというのが正しいんじゃないすか
Cには基本的に値渡ししかないですよ
参照の値渡しだろ。
>>878 それをいうと、Delphiでも全て値渡しってことになっちまう
C/C++とDelphiの値渡しうんぬんで注意しないといけないのは、
・クラスオブジェクトは、C++では値渡しだが、Delphiでは参照を渡す
・Delphiの静的配列は、ポインタと互換性がなくて、静的配列同士で代入するときは値渡し。
イミフメ
>>880 言語レベルでの参照渡し(Delphi、C++等)と
テクニックとしての参照渡し(C)は違うよ。分かる?
ボンクラ
__ __ n _____ _____ ___ ___ ___
| | / / / / / | /__ __/ [][] _| |_| |__ _| |_
| |. / / /⌒ヽ/ / / ̄ ̄|. l / / | _ | |_ レ'~ ̄|
| | / / ( ^ω^ ) / /. / / | |___  ̄| | / / / /| |
| | / / ノ/ / ノ /  ̄ ̄ / \__| | |  ̄ /_ / | |_
| |. / / // / ノ / / ̄ ̄ ̄ |_| |__| \/
| |/ / ⊂( し'./ / /
|. / | ノ' / / ニュー速VIP
| /. し' ./ /
http://ex14.2ch.net/news4vip/  ̄ ̄ ̄  ̄ ̄
>テクニックとしての参照渡し(C)は違うよ。分かる? このスレって重箱の隅に異常に執着するくせに雑な議論する奴大杉
自分の正当性を押し通す事が大好きなんだろ
すみません、教えて下さい。 Visible=falseなフォームに置いたActiveXが悪さをして、ActiveXの配置された フォームをアクティブにし、メインフォームのフォーカスを奪ってしまいます。 ActiveXの配置されたフォームでメッセージをトラップするなどして、フォームが アクティブにならないようにする方法は無いものでしょうか。 どうぞよろしくお願いします。
このスレって反論できないとすぐに論点すりかえて逃げる奴大杉 さすがDel厨
>888 「メッセージハンドラのオーバーライド」Help参照 Application.OnMessage など
しかぁーし、そんなふうにして使うもんかね、ActiveX
VCLでActiveXを作るのは簡単だし使うのも簡単だが、 元々ActiveXへのアンチテーゼがVCLだからVCL並みにActiveXを使うことは無理だろ。
鏡でも見てんのか
>VCLでActiveXを作るのは簡単だし使うのも簡単だが、 >元々ActiveXへのアンチテーゼがVCLだから 上下の文が矛盾してます。
>元々ActiveXへのアンチテーゼがVCLだから はつみみです。
>>891 ありがとうございます。
もう一つ申し訳ないのですが、フォームをアクティブにさせないようにするには、どのメッセージを無視させるといいのかわかりませんか?
絶対その使い方、変
アスペ君いい加減病院逝ってきたら?
>>元々ActiveXへのアンチテーゼがVCLだから >はつみみです。 何でこれくらいの話を理解出来ない人が炒るの? VCLでコンポーネント作成ってするとActiveXコンポーネントじゃなくてVCLコンポが出来るわけでしょ。 >上下の文が矛盾してます。 だけどVCLを使ってActiveXを作れないわけでもない。
全然アンチテーゼの理由になってねぇじゃん
>897 ActiveXの配置されたフォーム.Enabled:= Falseにしとく。てのはどうかね?
背景が分かって無いから理解できないんだろうが、 ”WinDNA(終焉)の理想はコンポーネントはCOM”だけども、 コンポーネントをDelphiクラス形式になってるところがアンチテーゼなの。 次に”ドトネト(氏産)の理想はコンポーネントがCOMと違って派生できる、かつ、複数言語”だけども、 ブビ厨が単一言語しか使えず、ブビドトネトとかC丼とかmc++(c++/cliにバージョンうp)とかと、 根も葉もない言語しか無くて理想は高く現実低くとなった。 まだ、Delphi/BCBの方が過去のpascal、C++資産を丸々使えて便利。
905 :
897 :2006/08/09(水) 11:06:12
>>903 おお、できました!
こんな単純な事で・・目から鱗です。
本当にありがとうございました。
自分の妄想じゃなくて、某の人が言ってたぐらい言ってくれよ
Win3.1 のときからVCLがあるんだから、ActiveX のアンチテーゼじゃないよ
Win3.0のときからAxの前身VBXもOCXもありましたが、何か?
で ActiveX は Win3.1 にあったのか? たんなるAPIのラッパだろ、VCLは。ご大層なことを言わないの。 コンポーネントっていっても、たった一つのIDEにインストールできるだけじゃんか。 ActiveX とは比べようがない。
>ActiveX とは比べようがない。 死滅したAXは最低とする。
妄言発作はおさまるまで放置
氏滅の歴史 DDE(Win3.1or3.0 1993) ↓ NET DDE (Win3.1 1994) ↓ 埋め込みしたいなぁ... ↓ OLE1.0(DDE使用) ↓ OLE2.0=COM ただし目的はインプレースドキュメント。しかしその背景には本質としてバイナリオブジェクト標準あんどオブジェクト通信の思想あり。この辺で名慮or迷著 InsideOLEあんどIsideOLE2。死者多数。 部品としてVB用のVBX (VB2.0からVB4.0 1995あたり) ↓ COMを使ったOCX (1996あたり)結局コンポーネントビジネスはやんなかったな... ゲイツがインターネットに熱上げあんどJAVA Appletはやる (1995) ↓ COMつかってActiveX(1996) だんだんオブジェクトはやってくる。 (UMLなど1997)オブジェクトもでるとしてCOMの宣伝開始 DCOMなどCORBAとがっぷり。この辺でMTSではじめ ↓ マーケティングてきなWindowsDNA 。MTS2.0それなりに使えそう。つか使った。DCOM糞。(1999) ↓ COM+ (Win2000、2000)In-MemoryDBどこいったゴラァ COM Runtimeの情報漏れ始め (2000〜) ↓ セキュリティ→ファイアーウォールのためCOM全滅。しばらくしてから.NETとしてCOMじゃないものに... ↓ .NET流行らず(〜2006) ↓ WinFX完成(2007) ↓ オブジェクトベースプログラミングにより、OSは関数コールに戻る(2008) WinFX下位互換へ
> 死滅したAXは最低とする。 じゃ、アンチテーゼも存在理由がなくなって死滅するな
>ActiveX とは比べようがない。 M$ってCOMをB$D UNIXで動作させると何年も言ってたが、 結局できずに終ったんだお。
IEを自分のフォームにぺたぺた貼り付けられるのは、すごいと思った
>じゃ、アンチテーゼも存在理由がなくなって死滅するな アンチテーゼ側が勝ったらら旧VBが滅んだんだお。 Delさえ存在しなければもう少しブビチュウが生きながらえたのにね。 カワイソス。
また発作か
ああ、VB厨って事にしたいのか
ブビチュウはせめて質問スレから消えてくれれば良いのにね。 誰も必要としてないお。
よほどVBのトラウマが深いんだな、元VB厨。こいつはほんとにDel使いなのか?
ブビ厨がDel使いになった例は非常に多いよ。 この板でも良く見た。 別にいんじゃね?ブビを捨てる事もDelを使うことも。
> 別にいんじゃね?ブビを捨てる事もDelを使うことも。 いいけど、ここはその場所じゃないし、突然「VB、ドトネト」とか、わめいたり 毎回意味不明のコピペは迷惑。
ブビを捨ててDelを使うことは良いことだ。 後はブビチュウさえ居なくなってくれれば良いのに。
ListBoxで項目に個別の数値をもつ事ってできますか?
Virtual
930 :
デフォルトの名無しさん :2006/08/09(水) 18:31:47
objWord := CreateOLEObject('Word.Application'); objWddoc := objWord.Documents.Open(FileListBox1.FileName); ででかいファイルを開き終わるのを待つにはどうすればいいのでつ?
VBなら待つ必要すらない
うらやましいな、ブビは性能が低くて。
だろ?早く乗り換えた方がいいYO!
935 :
デフォルトの名無しさん :2006/08/11(金) 11:13:18
VB厨の誘惑ktkr
>こうして害悪でしかない荒らしという存在は生まれる。 >誰に対しても悪意を感じ、それを平気で口にし、 >誰からも相手にされなくても平然として、むしろそれを望んでいる。
ストリングリストが特定の文字列を(アイテムとして)持ってるか、調べたいんですよ。 で、適当なメソッドがないか調べてたらFindメソッドをみつけたんですが、ちょっと問題がありまして、 StringList1.Add('なまず'); StringList1.Add('クラゲ'); StringList1.Add('タコ'); StringList1.Add('イカ'); ・ ・ と、あったとして、StringList1.Find('タコ', Int1)とかやるためには、先にStringList1をソートしろってヘルプは言うんですよ。 でも、ボクはStringListに追加された順序を崩したくない(ソートしたくない)んです。 どなたか、SortしなくてもStringListがそのアイテムをもってるか調べられるクールなやり方を教えてください。
if StringList1.IndexOf('タコ') > -1 then 〜 else 〜 end;
941 :
デフォルトの名無しさん :2006/08/12(土) 08:20:06
VBなら一発で調べられるのにね
使用許諾コード取得デキネー Borlandからメールがコネー
そういやVIPのDelphiスレもうやらないの?
vipperは氏ね
TMemoのデフォルトのポップアップを表示させない方法ってありますか? 昔、どこかのサイトで見たよーな記憶があったのでググってみたけど、出てこない。 Windows自体の制約で出来ないとか書いてあったのかなぁ…
Form1の上にTpanelやTPageControlやTMemo等を貼り付け(AlignをalCliantにして)たら、Form1のOnKeyDownにメソッドを書いても受け付けてもらえなくなりました。 どうすればいいんでしょうか?
>>949 Form1がActiveな状態になってないから受け付けてもらえません
一つ一つのコンポーネントにOnKeyDownメソッドを書けば出来ると思われ
>>948 空の TPopUpMenu を関連づける。
KeyPreview
VBならポップアップしないのにね
955 :
949 :2006/08/12(土) 18:17:52
956 :
デフォルトの名無しさん :2006/08/12(土) 19:04:18
>「Turbo Delphi for Win32」「Turbo Delphi for .Net」 別々に買えってこと?
個人的に「Turbo Delphi for .Net」は要らないから、別々でおk
別々に買っても、一つしかインストールできないわな。だってIDEが区別つかないんだもん。
あと23日で発売ってホントかね?
DLも同時なのかな お盆前に出してくれたら思う存分弄れたのに
C++にVCLはつくのかのう
TC++は.NET出ないんだ
BDS をばらばらにして、名前変えただけだかね。BDS にも C++.NET なんかなかったし。
Del7Perよりは良さそうだな
やっとD6から乗り換えるときが来たようだな
VCLソースはついてくるのかなぁ
教えてください! 例えば、文字列の場合、TStringListを使って、 MyStringList.Add('hoge1'); MyStringList.Add('hoge2'); などとして、必要な要素の数がわからなくても、追加していけば要件を満たす値を集められますが、このようなことををInt型でやりたいと思い、 var MachIntArray: array of integer; NumInt: integer; として、 procedure AddInt(aInt: Integer); // aIntは足す値 begin Inc(NumInt); SetLenght(MachIntArray, NumInt); // と、配列の要素数を一個増やして、 MachIntArray[NumInt-1] := aInt; // 増やしたところにaIntの値を突っ込む end; ・・のような方法を思いついたんですが、配列に追加するたびにSetLengthで要素数を設定しなおすのは作法的に間違ってるような気がするんですが、 Intを列挙していくって処理はわりとやりそうなので、標準関数であるのかと思ったが、みつけられず、中級以上の人達はどうやって解決してるのか知りたかったのです。 はじめに十分な要素数の配列を確保しておいて、それに代入するのも考えたんですが、溢れるのが怖いし、今のところ方法が考えつかず、困っています。
TList 使うとか Integerでいいならキャストすればそのまま入る
>>969 ありがとうございます。
TListヘルプで見たら、TListはポインタの配列だというので、キャストの意味がちょっとわからなかったんですが、こういうことですか?
var
MachIntArray: TList;
で、
procedure AddInt(aInt: Integer);
var
PInt: ^Integer;
begin
PInt^ := aInt;
MachIntArray.Add(PInt);
end;
>>968 それをラップするクラスをつくるか、邪道だが
>>969 の方法。
ラッパーの場合は、10個増えるごとに 内部で SetLength() するとか、
あと、現在の個数を保持するプロパティーとか付ける。あらかじめ個数が
分かってる場合の Capacity とか。簡単。
ちがう。 MachIntArray.Add(pointer(aInt)); 取り出すときは aInt := integer(MachIntArray[i]); の感じ。
MachIntArray.Add(Pointer(aInt)); でよいよ
ありゃ被った スマソ
Delphi7使いです。標準機能でWSDLから作れるSOAP(Webサービス)クライアントは どうやらDOMを使っているようなのですが、でかいXMLの解析が非常に遅いです。 SAXを使ったクライアントを作る方法ってないでしょうか?
> TXmlParser's support of Unicode is currently limited to single-byte character sets 日本語はとおりそうもないね。
>975 TListの要素はPointer型なので格納可能な値の範囲に注意する必要がある。 とりあえず動けばいいのであればTListで構わないけど、きちんとしておくなら 動的配列(にサポートルーチンを作る)か、TListのソースを参考に同様のクラスを 作ることをお勧めする。
>格納可能な値の範囲に注意 どゆこと?何だかんだいっても動的配列の方が無難ってこと?
>>979 Integer も Pointer も 32bits だし、入れるときも出すときもキャストするんだから範囲は問題ではないだろう。
>981 -1とか入れてみ?
List:=TList.Create; List.Add(Pointer(-1)); int:=Integer(List[0]); ShowMessage(IntToStr(int)); List.Free; 何の問題もないが
TListは、中身の正体がわかっているなら、32Bit以下のデータなら何を入れても問題ない筈。 でもTObjectListとかTComponentListはダメよ。自動でFreeする機能があるから。
Pointerにbit以外の制約なんてあるの? 基本的には何でも入れられるのがPointerでしょ?
>>985 そんな事はない。例えば人を入れようとしても入らない。
童貞だからな
>>985 「キャストして代入」と「参照を代入」を混同してはいけない。