モナーの *やさしい* Delphi質問スレ Ver.8
■ このスレッドは過去ログ倉庫に格納されています
0001Delモナー
NGNG( ´∀`)<. Delモナーがどんな厨房疑問でもやさしく答えます。
( ) .| Delモナーは時に私であり、時には別の人。
| | | | 他のスレに書き込んで罵倒される前に、まずここで質問しよう。
(__)_) \_________________________
前スレ モナーの *やさしい* Delphi質問スレ Ver.7
http://pc.2ch.net/tech/kako/1021/10212/1021262086.html
0685デフォルトの名無しさん
NGNGファイラの話はしてねーよ
0686デフォルトの名無しさん
NGNG使わなきゃいいだろ。
Delphi となんの関係があるの。 Delphi 製とか?
0687デフォルトの名無しさん
NGNGうるさいなぁ。ML の下らん規則を持ってくるな。ぼけ。
0688デフォルトの名無しさん
NGNG使ってないよ。
"Designed for Windows XP/2000/ME/98/NT"の話が出てきたから、
UIにも気を使ったソフトを作らないとね、っていう話をしたかった。
0689669
NGNG何も問題ではありませんが?「調べりゃわかる」と言われたんで、調べる気もないと返した
だけです。
「Visual Studio&Office」というソフト名らしき物を上げて「お手本です」と書かれたので、文章
化(書籍化やWeb上にまとめられているか)を知りたかっただけです。
>>681
ありがとうございます、やはり「MSのソフトに合わせろ」という感じなのでしょうか。それはど
う考えても「デザインガイド」ではないですね。ただのお手本という感じにしかなりませんね。
それならば私が出した本は「一応デザインガイド」となっているので、これに従うのが一番妥
当なような気がします。ちょっと古くさいUIですが、別に動かないというものでもないし。
0690デフォルトの名無しさん
NGNG>それならば私が出した本は
(((((((( ;゚Д゚))))))))))))ガクガクブルブル
0691デフォルトの名無しさん
NGNG後3分くらい考えると本当の意味がわかるよ。
逆にそれくらい考えないと意味がわからない文章だよ。
0692Delフサギコ ◆VzDeLphI
NGNGスレの流れも意味わからないけどな。
0693デフォルトの名無しさん
NGNGそれを許せるのなら、どんな UI を使ってもいいんじゃないの?
それとも、自分で考えるのがいやとかかな?
ガイドラインがないと何もできないとか?
0694デフォルトの名無しさん
NGNGこれか
0695デフォルトの名無しさん
NGNG>PC 98は、ハードウェア設計者を対象に作成され、その目的は、以下の通りです。
って書いてあるやん。
0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNG0698669
NGNG分かりにくくなってすみませんでした。「私の挙げた本は」とすべきでした。
>>693
確かにどんなUIでも良いのですが、一応「標準(デザインガイド)」があるなら
それに従った方が使いやすくなると思っています。自分しか使わないソフト
なら全く考えずに作るのですが、一応フリーソフトとして公開するやつはデザ
インガイドから外れていないかチェックするようにしています。
「ちょっとしたツール」程度のものですから、複雑なUIを使わなくても何とか
なります。
マイクロソフトのソフトはほとんど使っていないので、「ソフトを見ながらUIを
チェックする」ということが出来ないんです。
0699デフォルトの名無しさん
NGNGmacなら編集できまりなのだが
winだと編集だったりツールだったり
0701デフォルトの名無しさん
NGNG>マイクロソフトのソフトはほとんど使っていないので
メモ帳、ワードパッド、マインスイーパー、エクスプローラーあたりを使ってみてはどうか。
0702デフォルトの名無しさん
NGNGTShapeの図形をクリックすると、新しく図形がそこに作成され、
マウスで動かせるようにしたいのですが、
マウスをムーブした時のイベントが、元の図形のままになっているようで、
うまくいきません。
新しく作成したTShapeのイベントにするような方法ってありますでしょうか?
0703デフォルトの名無しさん
NGNGもしそうなら、新しい TShape のイベントをそれに関連づけたら
0704デフォルトの名無しさん
NGNGそれが新しいオブジェクトを生成したとしても、何もしなければ古いオブジェクトの
イベントのまま。だってイベントの元の Windwos メッセージは古いオブジェクトの
WIndow ハンドルに送られてきたんだから。
アクロバット的な解決方法もあるかもしれないが、定石としてはコンポーネントを
乗せているオブジェクト(TForm など)に細工をするのがおすすめ。
0705デフォルトの名無しさん
NGNG作成したイベントが重なっていないなら動かせるけど、重なっていると
どっちにしてもどれか一つしか受け取れない
こんなの参考にして複数のイメージを含んだコンポ作ったら?
矢印や直線も描ける、しかも設計時にCADみたいにイメージを動かせるコンポ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1004530597&rm=100
0706702 ヽ(´∀` )ノ
NGNGたいへんありがとうございます!!!
試行錯誤して色々やってみます!!!
0707デフォルトの名無しさん
NGNGttp://home1.infonia.ne.jp/~delphian/delphi/compo/text/mi0027.txt
結構古い(D3時代)から、手直しが必要かも。
0708お約束。
NGNGFDelphi の FAQ を探してみましょう。
0709702
NGNGどうもありがとうございます!!
また質問なのですが、ShapeのParentを変更すると、
マウスを早く動かしたときに図形がマウスについてこなくなってしまうのです。
再びマウスを乗せるとついてきます。
FAQっぽい感じもするのですが、見当たらないです・・・。
0710デフォルトの名無しさん
NGNGSetCaptureControl やってみそ
0712708
NGNG0713デフォルトの名無しさん
NGNG> WIndow ハンドルに送られてきたんだから。
TShape はウィンドウをつくらないはず。ハンドルなんかないよ。
D&Dで動かせるようなイベントハンドラが Sender だけを参照して
特定のインスタンスを参照しないようにコーディングされていれば
新しいインスタンスのイベントに関連づけするだけでは?
0714702
NGNGTShapeを配列でたくさん作って、それぞれに共通の関数で処理しているのですが、
根本的にやり方がタブーなんでしょうか?
★最初にTShapeを配列でとって
Var
MyShape : array[1..10] of TShape;
★Form1のクリエイト時に
procedure Form1.FormCreate(Sender: TObject);
begin
for i := 1 to 10 do
begin
MyShape[i] := MyShape.Create(Form1);
MyShape[i].Parent := Form1;
MyShape[i].OnMouseDown := MyShapeMousedown;
MyShape[i].OnMouseMove := MyShapeMouseMove;
MyShape[i].OnMouseUp := MyShapeMouseUp;
end;
end;
★クリックされた時の関数は
procedure Form1.MyShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SetCaptureControl(TControl(Sender)); ←☆
for i:=1 to 10 do
if Shape[i] = Sender then ここで配列の中のどのコンポーネントか判断している。
begin
マウスを早く動かすと、移動中のShapeがおいてけぼりになってしまいます。
SetCaptureControlをマウスクリック時に設定しても、マウスを動かしたときにMyShapeMouseMove()に処理が来ないです。
0715デフォルトの名無しさん
NGNGonKeyDownイベントで[CTRL]+[SHIFT]+[0}が入力された時のみ
特定の処理をしようと思っているんですが・・・。
[SHIFT]→[CTRL]→[0]と押す Key値:16
[CTRL]→[SHIFT]→[0]と押す Key値:17
となってしまいます。
因みに何も押さない時のKeyは96。
きちんと[SHIFT][CTRL][0]を検知するにはどうしたら・・・?
0716Delフサギコ ◆VzDeLphI
NGNG,,,,,,,,,,,,,,,∧,,∧ /Ctrll+Shift+0
〜′,,,,,,,,,,ミ,,゚Д゚彡< Actionのショートカットキーに
UU"""" U ⊃ \割り当てるのがよし
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0717デフォルトの名無しさん
NGNGふつう Sender を TMyShape にキャストするだけでは?
0718デフォルトの名無しさん
NGNGコンポを配列にするというVBみたいな発想はやめたほうがいいよ
0719Delフサギコ ◆VzDeLphI
NGNG,,,,,,,,,,,,,,,∧,,∧ />>718
〜′,,,,,,,,,,ミ,,゚Д゚彡< 時と場合によると思うよ
UU"""" U ⊃ \
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0720デフォルトの名無しさん
NGNG同意。
ボタンを押すと100個のチェックボックスが一斉に(略
0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNG彼のようになんとしてもキャストを使いたくないときには有効だと思われ。
0723デフォルトの名無しさん
NGNG>>714 のコードは配列をループで回すところが無駄なんだよ。
0724714
NGNG配列をループで回さない場合、どうやるのでしょうか?
Controlsでしょうか?勉強します。
Shape.parent := で親を変更すると、マウスの動きが速いとき図形がついてこなくて、
Windows.SetParent(Shape.Handle,Form1.Handle); だと、きちんとついてくることが判りました。
しかし、この場合、Shape.top:= Shape.Left := で、図形の位置をセットできません。
Shape.parent := の場合は、図形の位置をセットできます。うーん。
0725Delフサギコ ◆VzDeLphI
NGNG,,,,,,,,,,,,,,,∧,,∧ /
〜′,,,,,,,,,,ミ,,゚Д゚彡< ClientToScreenとかその逆で
UU"""" U ⊃ \ Top/Leftを計算してみては?
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0726デフォルトの名無しさん
NGNG0727714
NGNGShape.parent:=で親を変更した場合は、ClintToScreenなどでtop,Leftを
計算してうまくいくのですが、
Windows.SetParent( で親を変更した場合には、Top,Leftに何を入れても
反映されないのです・・・
0729デフォルトの名無しさん
NGNGあるんですか?
0730デフォルトの名無しさん
NGNG>計算してうまくいくのですが、
>Windows.SetParent( で親を変更した場合には、Top,Leftに何を入れても
TShape ってウィンドウを作らない VCL コントロールなんだから
Windows.SetParent() で親を設定できるはずないだろ
0732デフォルトの名無しさん
NGNG他のみんなはコントロールをすべてなめる時の話をしてるんだけどね。
0733デフォルトの名無しさん
NGNGはあ? スレの流れ読めてないね。
発端の >>714 のコードが何やりたいかわからないのか。
ループで回す必要ないんだよ。Sender に目的のオブジェクトが入ってるんだから。
0734733
NGNG0735ななしへたぐらま ◆B18Bks.Y
NGNGShepeコンポのドラッグによる移動はこんな感じでしょうか.
>>710さんが意図したのとは違うかも知れませんが
SetCaptureControlでShapeの親がマウスイベントを捕捉するようにしています.
//TForm1のフィールド変数に以下を追加
FDraggingControl: TControl; // ドラッグしているコントロール
FDragOffset: TPoint; // ドラッグしているコントロールの左上座標からドラッグした位置までのオフセット
// 各ShapeコンポのOnMouseDownイベントハンドラ
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// ドラッグしているコントロールを保管
FDraggingControl := Sender as TControl;
// ドラッグしているコントロールの左上からマウスカーソルまでのオフセットを保管
FDragOffset.x := X;
FDragOffset.y := Y;
// マウス処理をこのコントロールの親で捕捉するようにする
// (つまり,以後にマウスを動かしたりボタンを離しても
// ShapeコンポのOnMouseMove,OnMouseUpイベントは発生せず,
// 代わりに親の同イベントが発生する)
SetCaptureControl(FDraggingControl.Parent);
end;
(つづく)
0736ななしへたぐらま ◆B18Bks.Y
NGNG// Shapeの親のOnMouseMoveイベントハンドラ
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
// ドラッグしているコントロールがあるならそれを移動する.
if (FDraggingControl <> nil) then
begin
FDraggingControl.Left := X - FDragOffset.x;
FDraggingControl.Top := Y - FDragOffset.y;
end;
end;
// Shapeの親のOnMouseUpイベントハンドラ
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// マウス処理の捕捉を終了
// (以後,通常通りにマウスイベントが発生する)
ReleaseCapture;
// ドラッグしているコントロールがなくなったことを記憶.
FDraggingControl := nil;
end;
0737709
NGNG初心者&独学で、なんとも変なコードを当たり前の様に
書きつらねてしまっているので、大変勉強になります!!!
0738デフォルトの名無しさん
NGNGShelllistviewで選択したファイル名って、なんていうプロパティで受け取る
ですか????
HELPにもありません
(^o^)丿
0739デフォルトの名無しさん
NGNG0740デフォルトの名無しさん
NGNGItemIndex とか Selected とかかな? 使ったことないけど。
>>739
理由教えて。
0741727
NGNGすみません。その通りでした。
ShapeじゃなくてPanelでした。呆けてました。
ネットで検索したら、parentはcreateした直後に設定し、その後にその他の
プロパティを設定しなくてはならないみたいです。
・・・とすると、一度parentを設定したら、変更してはいけないのかな?という感じがします。
0742デフォルトの名無しさん
NGNG親を変更してはいけない、ということはありませんが
変更しなくてもよいプログラムが書けるならそのほうが
よいと思います
0743デフォルトの名無しさん
NGNGPathだったような違ったような。
0744デフォルトの名無しさん
NGNGFAQです。過去ログを参照しましょう。
ってMLじゃたたかれますな。
>>739
多分Delphi6もってないんじゃないの?
注意書きと、些細なバグさえ修正すればそこらの汎用プログラマが作成するより幾分堅牢なコンポーネントのような気はするけど。
些細なバグは過去ログあたってね
0745デフォルトの名無しさん
NGNG当たり!
0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNG使ってる。つっても、インストールしてサンプルで適当に遊んで
DDSDでoggファイル再生する実験してみたくらいだけど。
0748738
NGNG教えてくだちい へこへこ
0749デフォルトの名無しさん
NGNG使ってますよ。
0750709
NGNG>>735さんに教えていただいて、次の書き込みのソースを書きました。
Form1の左側にScrollBox2,右側にScrollBox1があります。
左側のScrollBox1をparentとするPanel1をマウスでドラッグ&ドロップで、
右側のScrollBox2に移動させたいと考えています。
Panel1をマウスクリックした時にparentをForm1に変更し、
マウスボタンを離したときにparentをScrollBox2に変更しています。
ところが、マウスのボタンを離してもScrollBox2にpanelが移動しないのです。
念のため、
タイマーを使って、Panel1のparentを左右のScrollBoxを交互に変更させたらうまくいきました。
0751709
NGNG____FDragOffset:Tpoint; //オフセット
____FDraggingControl : TControl;//ドラッグしているコントロール
implementation
//マウスを移動
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
____FDraggingControl.Left := X-FDragOffset.X;
____FDraggingControl.top := Y-FDragOffset.Y;
end;
//マウスボタンを離したら
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
____ReleaseCapture;
____FDraggingControl.Parent := Scrollbox1; //マウス離したら親をscrollbox1に変更
____FDraggingControl:=nil;
end;
//マウスボタンを押したら
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
____FDraggingControl := Sender as TControl;
____FDragOffset :=point(x,y);
____SetCaptureControl(Form1);
____FDraggingControl.Parent := Form1; //マウス押したら親をForm1に変更
end;
end.
0752746
NGNGDirectX7SDKヘルプの「ボーランド浮動小数点の初期化」というのを見ると、
もっとスマートな方法があるような気もするのですが。
Quadruple Dのヘルプを見ても、入れなければならない条件というのがあいまいで
よくわからないのですが。。。
0753デフォルトの名無しさん
NGNGKeyUpだし
ScrollBox2出てこないし
0754デフォルトの名無しさん
NGNGDel6でインスコしていじってたことあるよ
0755751
NGNGたいへんありがとうございます!!!!
ScrollBox2が出てこないのは書き込み用のタイプミスでしたが、
まさしくKeyUpが原因のようです。
・・・・3日間の悩みが解決しましたヽ(´Д`;)ノ
0756デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNG0759デフォルトの名無しさん
NGNGこれらを買うとどんな得点があるのでしょうか。
visualStdio.netを買うとSQLサーバーやOS、その他いろいろ提供してもらえます。
デルファイはなにがもらえるのでしょうか。教えてください。お願いします。
0760デフォルトの名無しさん
NGNG愛とか夢とかロマンとか…。
0761デフォルトの名無しさん
NGNG動的配列を2つ作って片方にデータを入れたあと、
もう片方にそのデータをコピーして使いたいのですが、
↓みたいなやり方で大丈夫でしょうか?
var
Array1,Array2 : Array of String;
begin
____SetLength(Array1,1);
____Array1[0] := 'aaa';
____Array2 := Array1;
____//メモリ再割り当て
____SetLength(Array2,Length(Array2));
____Array2[0] := 'bbb';
____……
end;
0762デフォルトの名無しさん
NGNG本題と関係ないけど
_
のかわりに
を使うほうがいいかと。
0763デフォルトの名無しさん
NGNG全角スペースでもよいかと
0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNG0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNG?
0768デフォルトの名無しさん
NGNGArray of string なら Tstringlist 使ってしまえば?
Assignできるし。
0769デルファイの名無しさん
NGNG0770ななしへたぐらま ◆B18Bks.Y
NGNGご存じかも知れませんが
動的配列変数同士の代入では内容のコピーは行われない仕様のようです.
(しかも文字列と違い,コピー後に片方を改変してもコピーは行われない)
しかしSetLength手続きで再割り当てすると
2つの変数は別な配列を指すようになるようです.
ただしヘルプにはこれに関する記述はがありませんでした.
>>768
私も文字列リストですね.動的配列はたまにしか使いません.
>>769
なるほど! Copy関数だと動的配列を1行で複写できますね.
0771761
NGNGフォローありがとうございますm(__)m
そうなんですよね。ヘルプみても詳しい使用例
みたいのがなかったもので・・・
>>769さんのCopyの方がすっきりした形で出来そうなので、
そちらの方法でやることにします。
>>768
実は、今実際に修正かけてるのがRecord型の動的配列の
要素の一つにRecord型の動的配列が入っているという
構造でして、TStringList使えなかったんです。
TListにおきかえようとも思ったのですがもう時間がなくて。
紛らわしい例出してすいません。
とにかく助かりました、ありがとうございます!!
0772デフォルトの名無しさん
NGNG(*実は、今実際に修正かけてるのがRecord型の動的配列の
要素の一つにRecord型の動的配列が入っているという
構造でして、TStringList使えなかったんです。 *)
TList使えそうな予感。
0773てすた
NGNG/∵∴∵∴\
/∵∴∵∴∵∴\
/∵∴∴,(・)(・)∴|
|∵∵/ ○ \|
|∵ / 三 | 三 | / ̄ ̄ ̄ ̄
|∵ | __|__ | < うるせー馬鹿!
\| \_/ / \____
\____/
0774デフォルトの名無しさん
NGNGReadlnで読み込んで、区切りを探して…、くらいしか思いつかないんですが、
もっと楽な方法ってありますか?
0775デフォルトの名無しさん
NGNG0776デフォルトの名無しさん
NGNGTStringList を使ってみ、、、
0777デフォルトの名無しさん
NGNGTStringList.CommaText
0778774
NGNGあ!TStringListのヘルプ見てみました!
CommaTextやDelimitedTextを使うんですよね?
これでOKです!ありがとう!
0780てすた
NGNG/∵∴∵∴\
/∵∴∵∴∵∴\
/∵∴∴,(・)(・)∴|
|∵∵/ ○ \|
|∵ / 三 | 三 | / ̄ ̄ ̄ ̄
|∵ | __|__ | < うるせー馬鹿!
\| \_/ / \____
\____/
0781デフォルトの名無しさん
NGNGなにをテストしてるの?
0782デフォルトの名無しさん
NGNG0783どすた
NGNG/∵∴∵∴\
/∵∴∵∴∵∴\
/∵∴∴,(・)(・)∴|
|∵∵/ ○ \|
|∵ / 三 | 三 | / ̄ ̄ ̄ ̄
|∵ | __|__ | < どんな質問にも答えてやろう
\| \_/ / \____
\____/
0784デフォルトの名無しさん
NGNG> どんな質問にも答えてやろう
AA がいかにも頭悪そうに見えるのはなぜですか?
■ このスレッドは過去ログ倉庫に格納されています