フサギコの *やさしい* Delphi質問スレ Ver.12
■ このスレッドは過去ログ倉庫に格納されています
0001フサギコ
NGNG∧,,∧ /Delフサギコがどんな厨房疑問でもやさしく答えます。
ミ,,゚Д゚彡 < Delフサギコは時に私であり、時には別の人。
U つ∀ \他のスレに書き込んで罵倒される前に、まずここで質問しよう。
〜ミ ミ ┴  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∪''∪
前スレ モナーの *やさしい* Delphi質問スレ Ver.11
http://pc2.2ch.net/test/read.cgi/tech/1042421592/l50
0153デフォルトの名無しさん
NGNGTimerコンポーネントはできました
あとは関数でエラーがでます
GetXとGetYです
関数の宣言と実装をしかるべきところに貼り付けたつもりなのですが
エラーになってしまします。
宣言は、パブリックにはりつけました
実装は、Inprimentetion直下にはりつけました。
うーんどうすればよいのか、おかしいです
0154153
NGNGTFormのメソッドでもなし、TTimerのメソッドでもなし
そういえば普通の関数ってどうやって宣言するのだろう、、
0155デフォルトの名無しさん
NGNGその項目のTextを取得するにはどうすればよいのでしょうか?
0156153
NGNG宣言部のvar以下に書いたらいけますた
すまそ
0157デフォルトの名無しさん
NGNGVBみたいな と言うのがどういうことかわからんけど Arc とか Ellipse とかじゃ駄目な理由があったら教えて
0158153
NGNGフォームのタイトルバーがあるので時計の中心が変になります
タイトルバーをけすにはどうすればいいですか?
そうするとアプリの移動とかできなくなるけど時計らしいので、、
理想としてはクライアント領域でドラッグできたらいいのですが
0159デフォルトの名無しさん
NGNGBorderStyle と WM_NCHITTEST あたりかな?
0160153
NGNGクリックイベントの際にlParamがないのですが
どうやってメッセージを判断すればよいですか?
0162153
NGNGすまそ
メッセージ処理はどうやったらいいかわかりません
0163デフォルトの名無しさん
NGNGキーワードを教えてもらったら
http://www.google.co.jp/search?q=WM_NCHITTEST+delphi
こうやって、自分で調べる事。
自分だって、そういう 「どうやったらいいか」なんて聞かれても、困ってしまうだろ?
0164153
NGNGサンプルをそのまま使ってもあれなので自分なりに解釈してみました
サンプルが難しいです、、、
ttp://www.borland.co.jp/qanda/delphi/d0002348.html
##サンプル##
{このメソッドはいつ呼び出されるのか?}
{Mの型はTFormにはないはず、、入れ子?}
procedure TForm1.WMNCHITTEST(var M: TWMNCHITTEST);
begin
inherited;{ 継承されたメッセージハンドラの呼び出し}
{TFormのメソッドを使うと思う。でもどのメソッドを継承したかわからない}
if M.Result = htClient then { クライアント領域がクリックされたか? }
M.Result := htCaption; { もしそうであれば,タイトルバーが }
{ クリックされたと Windows に思わせる }
end;
0165159
NGNG{このメソッドはいつ呼び出されるのか?}
WindowsからWM_NCHITTESTメッセージが送られたとき。
{Mの型はTFormにはないはず、、入れ子?}
Message.Pas で定義されている (右クリック→定義の検索 でみれるかも)
{TFormのメソッドを使うと思う。でもどのメソッドを継承したかわからない}
TFormの標準の動作を使う。メソッドになっているとは限らない。
TFormはWindowsのウインドウの動作を継承している。
{ クライアント領域がクリックされたか? }
クリックに限らずすべてのマウスイベントで発生していることに注意。
わからない単語はどんどん検索しよう。
0166デフォルトの名無しさん
NGNGprocedure WMNCHITTEST(var M: TWMNCHITTEST); message WM_NCHITTEST;
この定義で使ってる message をヘルプで調べてみたら?
ディスパッチを勝手に自動的にやってくれるとても便利な機構だよ
0167153
NGNG###{このメソッドはいつ呼び出されるのか?}
###WindowsからWM_NCHITTESTメッセージが送られたとき。
procedureの宣言をみるとprocedureがWM_NCHITTESTを返しているように見えるんです、、
CALLBACK関数みたいな感じでしょうか?
###{TFormのメソッドを使うと思う。でもどのメソッドを継承したかわからない}
###TFormの標準の動作を使う。メソッドになっているとは限らない。
メソッドや関数やAPIでないとすると、、理解が非常に苦しいです
0168デフォルトの名無しさん
NGNG管理できるようなソフトって作れるんですか?
これはディレクトリの指定とか無しで。
サンプルプログラムかソースがあったら嬉しいっす。
0169153
NGNGmessage指令がヘルプにあったので参考にしました
感想::どこでも実装できる機能だとわかった
::でもなぜに、継承するのか?謎
procedure WMNCHITTEST(var M: TWMNCHITTEST); message WM_NCHITTEST;
の宣言でWMNCHITTEST型はヘルプでありませんでした、システムで定義されている
ものなのでしょうか?
メソッド名称もWMNCHITTESTである必要はないのでしょうか?
メソッド名称は変更してもとおりました。
Mの型名は変更すると怒られました。
0170デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=cache:vbEbucp5V7gC:www.nifty.ne.jp/forum/fdelphi/faq/00137.htm+wm_syscommand+%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0&hl=ja&lr=lang_ja&ie=UTF-8&inlang=ja
こんなもあったよ
0171153
NGNGちょっとわかりやすいです。原始的な感じでOK
0172159
NGNGまあ、落ち着いてお茶でも飲め。
WM_NCHITTESTを返しているように見える? : と ; に注意。
[ウインドウメッセージ]とか[メッセージハンドラ]あたりがキーワード。
メソッドや関数やAPIでないけどWindowsの内部処理。
あえて言うならDefWindowProc APIの動作。
SDKでプログラムを書くとわかりやすいけど基本的な動作のかなりの部分はWindowsが面倒をみてくれる。
ウインドウを作れば基本的なウインドウの動作を、ボタンを作れば基本的なボタンの動作をWindowsが処理してくれるわけ。
で、プログラマは拡張した動作を記述すればすむ と。
基本的な動作
キャプションでウインドウを移動できる
ウインドウの枠でサイズ変更ができる
ボタン上でマウス押下するとボタンがくぼむ
拡張した動作
キャプション以外でもウインドウを移動させる
ウインドウの枠でサイズ変更されたら中身の再配置
ボタンがクリックされたら何かの処理を開始する
まとまりない文章でごめん
0173Move 手続きの引数
NGNGMove 手続きの第1、第2引数の型はいったい何なのでしょう? ヘルプファイルの例
var
A: array[1..4] of Char;
B: Integer;
begin
Move(A, B, SizeOf(B)); { 安全のため,SizeOf 関数を使う }
end;
を見ると第1引数はポインタ、第2引数はIntegerと思いますが文字列をコピーするような使用例を見ると
var
S: string;
n,Count: Integer;
p: PChar;
begin
Move(S[1], n, Count);
または
p := PChar(S);
Move(p^, n, Count);
end;
というような例があり、そうなると第1引数はChar型なのかと、第2引数はどうやらInteger型らしいと思いたくなりますが
var
B, L: Byte;
Buffer: array [0..1023] of Byte;
P: PChar;
begin
P := @Buffer;
Move(L, P^, SizeOf(L)); // length of keyword
end;
というような例では第2引数はいったい何の型なのか(逆参照が示す型はChar型だと思いますが……)ますます訳がわからなくなってしまいます。
0174デフォルトの名無しさん
NGNGvar Destは変更可能な型無しパラメータ
Cのvoid*みたいなもんだ
0175デフォルトの名無しさん
NGNG↑これでキーを押すのができるらしいですが、
Windowsのマークのキーを押すにはどういう文字を入れればいいんですか?
0176デフォルトの名無しさん
NGNG0177Delフサギコ ◆A6VzDeLphI
NGNG∧,,∧ どっかの有名などらどろコンポーネントを
ミ,,゚Д゚彡 インスコ汁。
ミつ日(ミ
海外製だけど英語全く出来なくても
インスコ&使用に問題なしでつ。
>>158さん
タイトルバはBorderStyle bsNoneだったっけ?
フォームを円形にできるオマイさんでしたら
[暗い餡と領域][ドラドロ]をキーにして
検索しると、答えはニフでもエムエルでも
見つけられると思われ。
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG上のXML文書で、xml要素のattr属性の内容( この文書ではhoge )や、
要素の中身( この文書ではhogehoge )を調べるにはどうすればいいんですか
0180デフォルトの名無しさん
NGNGお金があるなら Entを買う。
お金が無いならパーサを自分で作る
それもやりたくないならMSXML か Xerces を使う
0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGちなみにEntじゃなくてPro以上。
0185デフォルトの名無しさん
NGNG0186デルファイの名無しさん
NGNGヘルプは何故かEntにしか無いみたいだけど、実はPro版以上に搭載されてる。
単純なのでXMLDoc.pasに書かれた宣言見ればすぐわかると思いますよ。
…金が無い場合は、>>180-185に習って
0187デフォルトの名無しさん
NGNGいちいちこういう発言が出るまで見張ってるのか?
気持ちわる……
0188デフォルトの名無しさん
NGNGこれを使っても再起動しないんですが何故ですか?エラーも出ない
0189デフォルトの名無しさん
NGNG仕様です。再起動用BIOSが搭載されてないマシンでそうなります。
0190デフォルトの名無しさん
NGNG0192153
NGNG###WM_NCHITTESTを返しているように見える? : と ; に注意。
あーほんとだ。
メッセージ処理の構文だと覚えて、、、
###DefWindowProc
ウィンドウプロシージャにはすべてのメッセージが届くを思っていましたが
そうではないのですね、、、
###拡張した動作
なるほど。基本動作と拡張動作で切り分ければわかりやすいです
ということは、message処理等を行うということは
OSの提供する機能をカスタマイズして使う
そして、VCLは基本的にOSの提供する基本機能をAPIを
ラップしているということと、、、思いました
0193153
NGNG### 暗い餡と領域][ドラドロ]をキーにして
ドラドロはひっかかりました
0194bloom
NGNG0195デフォルトの名無しさん
NGNGNT系だとそのコードだけだと動かんよ。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/shutting_down.asp
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGTabPosition := tpRight で
Font に縦書きフォントを指定
tpLeft だと逆さになるのね ^^;
0198デフォルトの名無しさん
NGNGうわ、ほんとだ。縦書きフォントなんてあるんすね・・・
縦書き=#13を一個一個入れる になってました。
ありがとうございました。(tpLeftは使えないという事っすね)
0199153
NGNGC言語みたいに
A += A;をしたいんですけど
A +:= A;だと怒られました
探してみましたが、こういうのはないみたいですね
0200デフォルトの名無しさん
NGNG>>199
どうせネタだろうけど・・・。
A := A + 1;
0201153
NGNGCanvas.TextOut(CX - int(let/2) ,CY - 20,str);
[エラー] Unit1.pas(134): 'Integer' と 'Extended' には互換性がありません
と怒られました
CXもletもintegerなのになぜでしょうか?
0202153
NGNG0203デフォルトの名無しさん
NGNGそれは違うだろ
A:=A+A;
A:=2*A;
inc(A,A);
じゃないのか?
>>201
実数の割算してるからだよ / じゃなく DIV にしなさいな
0204デフォルトの名無しさん
NGNGDelphiヘルプから
| x/y の値は,x と y の型に関係なく,常に Extended 型になる。
Canvas.TextOut(CX - (let div 2) ,CY - 20,str);
とかは?
0205デフォルトの名無しさん
NGNGfunction Int(X: Extended): Extended;
代わりにTrunc関数、もしくは"/"演算子ではなく、"div"演算子(整数除算)を使うのがよい
Trunc(X: Extended): Int64;
しかし、このケースではRound関数の方が良いかもしれない。
0206デフォルトの名無しさん
NGNG0207153
NGNGinc(A,A);がスマートで好きです
ありがとうございます
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGhttp://やhttps://からURLに使われる文字だけで構成される部分を取り出す。
0211論理演算子(ビット演算子)
NGNGどんな操作がしたいの?
0212153
NGNGコントロールはOpenDiarolを使うのがふつうですか?
ポップアップメニュの項目を選択→設定ダイアログボックスがでる
モーダレスででてOKボタンを押したら反映して消える、、、
0213デフォルトの名無しさん
NGNGなんとなくできました♪
どうもありがとうございました
0214元VBプログラマ
NGNG配列をfunctionの引数にするところで躓いています。
procedure TForm1.ButtonClick(Sender: TObject);
var
wBuf: array of Byte;
i: Integer;
begin
SetLength(wBuf, 6);
wBuf[0] := 1;
FillArray(wBuf);
wBuf[5] := 100;
end;
procedure TForm1.FillArray(Buf: array of Byte);
var
i: Integer;
begin
for i := 1 to 4 do
Buf[i] := i * 5;
end;
を実行したときに、wBufの値は(1, 1, 10, 15, 20, 100)になってほしいのですが、
結果は wBuf(1, 0, 0, 0, 0, 100)となってしまいます。
ブレイクポイントで確認したところ、FillArray内では 1, 10, 15, 20を割り当てているようなのですが、
FillArrayから抜けた瞬間に 0が割り当てられているみたいです。
配列を引数にして、その配列に値を割り当てるのはこの方法は間違っているのでしょうか?
VB6で通っていたコードがそのままで通らない(厳密になっている?)のですが、めげずに何とかしたいです。
ご存知の方、わたし厨房で申し訳ないのですがお願いします。
0215デフォルトの名無しさん
NGNG例えば、if t = ''' then のような
tが'と等しかったらというような事をしたいのですが
何がよい方法ないでしょうか?
0216デフォルトの名無しさん
NGNGprocedure TForm1.FillArray(Buf: array of Byte);
じゃなくて
procedure TForm1.FillArray(var Buf: array of Byte);
だよ。
ちゃんとvarつけないと代入できんです。
>215
アスキーコードで指定すればいいんじゃない?
0217デルファイの名無しさん
NGNG0218デフォルトの名無しさん
NGNG0219元VBプログラマ
NGNGありがとございます。
ご教授いただいた方法でうまくいきました。
感謝しております。
0220デフォルトの名無しさん
NGNG透明ぽいポップアップメニューのコンポーネントはありますか?
0221デフォルトの名無しさん
NGNGのようなのはDelphi7からしか使えないんですか?
0222デフォルトの名無しさん
NGNG送信した時のエラーはどうやって取得すればよいのでしょうか?
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNGペルソナルにはありません。
0225デフォルトの名無しさん
NGNGフサギコなんて嫌だ
0226デフォルトの名無しさん
NGNG0227153
NGNGUnit1
TForm2.ShowModal ソースコードの補完の段階で失敗します
Unit1とUnit2を関連づける方法はどうするのですか?
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG#$27
0230223
NGNG>>221 Yes
>>222 OnError イベントで ( もし取れないエラーがあるなら WSAGetLastError )
>>227 TForm2 は型名 Form2 が変数名だから Form2を使えば IDEが uses しますか?って聞いてくれる・・・かも
0231デフォルトの名無しさん
NGNG' でヘルプひけば出てくるはず
0233デフォルトの名無しさん
NGNGこんなにも沢山のレスありがとうございます。
無事にできました♪
また質問なのですが、HTMLソースをCGIを使っているページから取得しよとするとエラーがでます
Memo1.Lines.Add(IdHTTP1.Get(Edit1.Text));
これは元々不可能なことなのでしょうか?
0234デフォルトの名無しさん
NGNGわたしには if の連発か、文字列にしてしまうぐらいしか思いつきません
ほかに良い方法があったら教えてください。
よろしくおねがいします。
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG変数定義って、ローカル変数よりグローバル変数のほうが全然便利に思えるんだけど
ローカル変数を使うメリットって何?
同じ変数名が使える(違う関数部で)とかメモリ領域とかに関係あんの?
0237デフォルトの名無しさん
NGNG全ての変数をグローバルにして10000行程度のプログラムを書いてみると分かると思うよ
もっともDelphiの場合、ループ変数をグローバルにすることは許されないけど
(仮にループ変数をグローバルにできたとして
同じループ変数を使っている別の手続き・関数をループ内で呼び出したら
どうなるか考えてみるといいよ)
0238234
NGNGありがとうございました。
勉強になりました。
0239223
NGNG人間は一度に そんなに大きなものを緻密に設計したり考えたり出来るように作られていません。
そこで、小さな単位に分割して、その機能や概念に名前を付けて ものを考えたり設計したりするわけです
その小さな機能に分割したものはその単位内で十分簡単でシンプルで独立していた方がいいでしょう?
グローバル変数を使うと、その単位は独立ではなくなります。
たとえば、複数のスレッドで同じ関数を使ったり出来ない訳です。
>>232
よし、任せたよ。
0240デフォルトの名無しさん
NGNGどこを読んでいるときでも、すべてのグローバル変数の用途を把握しており、
かつ、複数のスレッドが動いているときや複雑なイベント/メッセージのやり取りの
最中でも、すべてを自分で制御する自信があり、
かつ、そのソースを別の仕事/作業を終えた後、一月くらいしてから読み直しても
すらすらと理解できるほどの理解力とコメント記録能力があるのなら
すべてグローバル変数/関数でプログラムしても良いのではないか?
0241240
NGNG0242デファルトの名無しさん
NGNGDelphi7で作ったコンポーネントがDelphi6で読み込めないのは気のせい??
初めてコンポーネントを作ってみようとしているのでワケがわかんないです。
もう少し調べてなんかわかったらまた書きます。
よろしくお願いします
0243デフォルトの名無しさん
NGNGDel6で使いたければソースをDel6でコンパイルしてインストールしる
0245デファルトの名無しさん
NGNGそれが、Delphi7にしかないコンポーネントを親コンポーネント(?:上位クラス?)にしたものを
インストールできるようにしたいんです。
と、確認してみようとしたら…あれ?
弄り回したせいかDelphi7から目的のコンポーネントが消えた!?
と、思ったらいじったときに作ったTemplatesにあった。
動作している模様。
一安心です…
コンポーネントの上位クラス(ここら辺もよくわかってませんが)の指定を変えればいくのでしょうかね?
調べていろいろ試してみます。
(初心者ですみません)
0246デフォルトの名無しさん
NGNG…そりゃ無理っしょ。
Del6にも似たようなのがあるなら{$IFDEF}で切り分けるとかさあ
0247デフォルトの名無しさん
NGNGここ以外でコンポーネントが豊富にあるオススメ日本語HPを教えてください。
0248デファルトの名無しさん
NGNGやはりそうですか。
じゃああきらめます。
(☆∀☆)!(アイデアひらめきぃ)
Delphiにはじめからついているコンポーネントのソースって手に入らないのでしょうか?
手に入れば移植もできなくは…ないと思うのですが…
どうなのでしょうかねぇ?
その前にソース字体手に入るものなのか......?
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNGPro版買ってね。
0251デファルトの名無しさん
NGNGまさか、あなたに…
>>250
Pro版だとどうやればいいのでしょうか?
0252デフォルトの名無しさん
NGNGPro版以上だとSourceというフォルダにほとんどのソースが入っていて(一部例外あり)
とても勉強になるのでし
メッセージループなどが実は昔ながらのスタイルでちゃんと実装されていて
Delphiが紛れもなくTurbo Pascalだということも教えてくれるのでし
■ このスレッドは過去ログ倉庫に格納されています