1read 100read
2011年12月2期プログラム16: くだすれDelphi(超初心者用)その53 (966)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
・ 次のスレ
17: ATL/WTL Part6 (904)
18: ニートの俺が何か開発して食いつなぐスレ (811)
19: Pythonのお勉強 Part45 (657)
21: 関数型プログラミング言語Haskell Part16 (828)
くだすれDelphi(超初心者用)その53
1 :11/06/27 〜 最終レス :11/12/24 Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。 <前スレ> くだすれDelphi(超初心者用)その52 http://hibari.2ch.net/test/read.cgi/tech/1279506667/ <過去スレ> DelWiki避難所(Delphi 関連の過去スレッド) http://delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89
2 : <関連スレ> delphiで作った有名ソフトって何があるの? http://hibari.2ch.net/test/read.cgi/tech/1135654787/ 【Delphi互換!?】FreePascal/Lazarus その2【GPL】 http://hibari.2ch.net/test/read.cgi/tech/1261676778/ ネットワークゲーム作成のお勉強(Delphi専用スレ) http://hibari.2ch.net/test/read.cgi/gamedev/1028278884/ Delphiでアクションゲームが作りたい!! Part2 http://hibari.2ch.net/test/read.cgi/gamedev/1027482533/ delphiでMMO http://hibari.2ch.net/test/read.cgi/gamedev/1072515100/ では質問どうぞ。
3 : あ、立ってた >1乙
4 : >>1 乙
5 : 質問です:ファイル選択ダイアログ何かが他のウィンドウの下になったりした場合、回避策はありますか? ウィンドウハンドルとか取れるんだろうか?
6 : Delphi のバージョンが分からないのとファイル選択ダイアログが隠れた経験はないけど http://www.freeml.com/delphi-users/1416 https://groups.google.com/group/delphicbuilder-ml-archive/browse_thread/thread/c1ad817181b0d82c?hl=ja http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200406/200406_04060079.html
7 : つ [d] >>6 順番に試してみます。 普通に開発する分には隠れないのですが、TFormのCreateParamをオーバーライドして属性弄ってるので。。。
8 : 低速PCでクリック連打やるとわりとどんなソフトでも起こり得るんじゃないの? タスクマネージャ→実行タスク→手前に表示でダイアログが一番上に来るからこれをコードにして 間に噛ませば回避できそうだけど。
9 : delphimm.dllとborlndmm.dllって何ですか?
10 : メモリマネージャ
11 : >>7 そこを最初に書いてくれなきゃだわw
12 : デルファイに付いてる TeeChart (Standart 4)で聞きたいのですが、 Y 軸のスケールをソース上で指定するにはどう書くのでしょう? スケールの 最大/最小値の自動調整 : Boolean 最大値 自動調整 : Boolean 最小値 自動調整 : Boolean 最大値、最小値 Chart1. 識者の方おねがいします
13 : 何書いてあるのか読めないけど適当に書いたらできた ttp://www.programfan.com/club/showtxt.asp?id=345826 Chart1.BottomAxis.Automatic := False; Chart1.LeftAxis.Maximum := MaxY; Chart1.MaxYValue(Chart1.LeftAxis);
14 : TScrollBox上に乗せたコントロールが範囲外か判定したいです。 Control.Left > ScrollBox.Width で判定しようとすると、スクロールが有る場合、上手くいきません。 どういう判定式になるのでしょうか?
15 : ふと気がつくと、実行ファイルのサイズが18Mになってたんですが、普通ですか?
16 : >>15 リソースでクソでかい画像など入れてんじゅあねーの
17 : >>14 Control.Left > ScrollBox.ClientWidth
18 : つ [d] >>17 TScrollBoxで、スクロールバーが表示か非表示か判定難しいですね。 ScrollのVert/HorzにVisibleで問い合わせてもtureのみorz
19 : じゃあTScrollBoxを派生させて自分でコントロール作れ
20 : >>18 IsScrollBarVisible
21 : procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean); var ScrollBarActive:Boolean; begin Done:=True; with ScrollBox1.HorzScrollBar do ScrollBarActive:=(IsScrollBarVisible) and (ClientWidth < Range); if not ScrollBarActive then with ScrollBox1.VertScrollBar do ScrollBarActive:=(IsScrollBarVisible) and (ClientHeight < Range); Caption:=BoolToString(ScrollBarActive); end;
22 : 仕事でDelphiやることになったわ 糞言語さんよろしく
23 : skypeの設定ウィンドウで使われている、TOptionsPanelって、カスタムコンポーネントですか? TListBoxとか使って同じようなの作ろうとしたが、あの動きは難しい
24 : つ orz >>20 >>21
25 : orzを感謝に使うやつ初めて見た
26 : C#で言うところのHttpWebRequestのような、 Http接続関係のライブラリって、Delphi 2010やXEで標準装備されますか? 昔と同じくIndyでやるしかないですかね?
27 : Del7からIndyが標準装備でわ?
28 : Del7時代と違って、今ならサードパーティ製でなく標準で ネット系ライブラリが用意されてるかもと思ったんですか、 やっぱりないんですね。 調べてみたらXEでIP*Works!も付けたみたいですが、 これSSLさえ対応してないし(別売)。。微妙
29 : Indyってサードパーティじゃなくてオプソでは? メモリマネージャーもオプソのもの取り込んだし。 ソースとして取り込んで、製品に組み込むときにソース制御(確認だけとしても)してるわけだから、 標準と言えるんでわ?
30 : >>29 そうですね。 ただ、Del7のときにIndyのバグで散々な目にあったので、 Indyはあまり信用してないんですよね。 Indyが微妙だからIP*Worksも取り入れたような気もしますし・・
31 : indy以外でありますか?
32 : は? Indy自体オープンソースだから、バグは自分で直して使うんだよ。
33 : >31 商用ならいくつか
34 : ドイツもこいつも役立たねぇ奴らゔぁあじやのぉ
35 : UnicodeString s = L"\t"; C++Builderでこう書くようなのって、Delphiだとどうするのでしょうか? Unicodeのエスケープ文字をソース内で指定したいのです
36 : s: UnicodeString := #9 http://docwiki.embarcadero.com/RADStudio/ja/%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E6%A7%8B%E6%96%87%E8%A6%81%E7%B4%A0#.E6.96.87.E5.AD.97.E5.88.97
37 : >>36 ありがとう
38 : 最近知ってちょっとショック受けてるんですが(プロじゃないってことで何卒ごかんべん) ユーザーって、なんかダブルクリックの癖がついてるんですね。 職場でつかってる自作のソフトのことなんですが、ボタンダブルクリックに対するプロシージャは何一つ書いてません。 ダブルクリックされた場合に、シングルクリックの命令が2回実行されてしまうなんて可能性はありますか? もしそうだとしたら、すべてのボタンに対して、ダブルクリックにexitとか書く必要が出てきたりしますか?
39 : >>38 > ダブルクリックされた場合に、シングルクリックの命令が2回実行されてしまうなんて可能性はありますか? あるでしょうなぁ。ってぇか試してみればいいじゃない、自分で。OnDblClickがないコントロールは OnClick-OnClickとイベントが発生するでしょう(ObDblClickがあればOnClick-OnDblClickになる)。 > もしそうだとしたら、すべてのボタンに対して、ダブルクリックにexitとか書く必要が出てきたりしますか? さぁ。あなたのプログラムの作り次第でしょう。必要なら必要だろうし、不要なら不要。OnClickの 処理をしている間はコントロールやフォームのEnabledをFalseにするだけでも十分かもしれないし。
40 : シングルクリックとダブルクリックを判定するしきい値の設定= コントロールパネルのマウス|ボタン|ダブルクリックの速度の 設定が「速く」になっているとか。
41 : >>39 ,40 ありがとうございます。 >>試してみればいいじゃない まったくそのとおりでした。 procedure AllBtnDblClick(Sender: TObject); begin exit{何も書かなくても一緒か}; end; な感じの、虚しすぎる関数つくって全てのボタンのOnDblClickにあてがう みたいなやり方しか思いつきませんが、取りあえず根性で修正します
42 : ごめんなさい sage書く場所間違えた
43 : ?そんなのいらないじゃん。
44 : >>43 無根性でやりとげられる何か楽な方法があるんでしょうか。 ヒントだけでもいただければ幸い
45 : >>38 を見る限り、何の問題も起きてないと読み取れるんだけど ダブルクリックされるとどんな問題が発生したのか書いてないし、 そもそも当該のコントロールがなんなのかも明らかにしてないね
46 : こゆこと? private { Private 宣言 } ClickedTime:Double; procedure TForm1.Button1Click(Sender: TObject); begin if GetTickCount-ClickedTime<=GetDoubleClicktime then exit; ClickedTime:=GetTickCount; Memo1.Lines.Add(IntToStr(Tag)); Tag:=Tag+1; end; ClickedTime の処理しない場合Wクリックされたら確かに二つずつ増えてくね
47 : Delphiで作ったプログラムはC#やVBみたいに何かランタイムをインストールしてもらう必要はありますか?
48 : 普通は不要
49 : ボタンのOnClickに「ボタン自身のEnableをFalseにする」でダメなの? 処理が終わったらEnableをTrueにすればいいし 基本的にボタンはそうやってるけど 何か勘違いしてたらスルーしておくれ
50 : >>41 >49 の例 procedure TForm1.Button1Click(Sender: TObject); begin Button1.Enabled := False; // 処理中 Button1.Enabled := True; end; わざわざ Button1DblClick(Sender: TObject); を書く意味が分らない。
51 : 俺ならTrueにする前にApplication.ProcessMessagesを挟んじゃうね。
52 : いらんだろ。.NETならともかく。
53 : まぁ、例外はちゃんと処理しないと二度と押せなくなるがw
54 : なんのためのtry...finallyだよ
55 : delphi6を使っています。 FindDragTargetでAllowDisabledをTrueにしているのですが、 Enabled=FalseやVisible=Falseの状態のボタンを見つけられません。 何が間違っているのでしょうか? よろしくお願いします。
56 : ちゃんとスクリーン座標に変換している? AllowDisabledはVisibleには効果なし Visible=FalseだとAllowDisabledに関わらず引っ掛からない
57 : >>56 ありがとうございます。visibleに関しては了解いたしました。 スクリーン座標は試してみたのですが、やはりダメです。 enabled=trueのものはスクリーン座標、クライアント座標に関わらず見つかりますが、enabled=falseのものがやはり見つかりません。 GetCursorPos(pntXY); target_component := FindDragTarget(pntXY, True); if target_component <> nil then begin HelpMessage.Caption := target_component.Name; end 記述はこうなっています。 引き続きよろしくお願いします。
58 : Enabled=Falseのボタンだとうまくいかないみたいだね TWinControl.ControlAtPosを使えば?
59 : target_component := FindDragTarget(pntXY, True); これだと確かにダメだね(うちのD6Per) target_component := ControlAtPos(ScreenToClient(pntXY), True, True); これならEnabled=FalseでもOk バグかね? そもそもDisableなコントロールにドロップすることなんか無いから気付かないよなあ
60 : TList.Add(Nil)とTList.Count:=TList.Count+1は同じこと?
61 : 何に着目しているかにもよるねぇ データの数なら同じだけど、処理速度はAddの方が速い ちなみにAddを1000回繰り返すのとTList.Count:=TList.Count+1000では 後者の方が速くなる
62 : >>59 できました。ありがとうございます。
63 : 連続ですいません。 1.ボタンをクリックすると、メッセージ表示用ラベルのcaptionを変更。 2.その後、画面のどこでもいいからクリックすると続きを表示。 3.表示するメッセージがなくなったらイベントを終了。 というonclickイベントを作ろうとしたのですが、 ラベルの変更がイベント終了まで適用されないようで困っています。 イベントの途中でcaptionの変更を適用する方法はないのでしょうか?
64 : >>63 Boolean の変数を作っておいて procedure TForm1.ボタンクリックで 変数:= not 変数; if 変数 then ボタン.caption:= '変更' else ボタン.caption:= 'もと'; procedure TForm1.全体クリック if 変数 then 続き 分けちゃだめなの?
65 : >>63 Label1.Update; Label1.Repaint; Label1.Refresh; 好きなの使え しかし>>64 も指摘してるように、ちょっと作りが変な気もする どうせならイベントハンドラを全部ここで見せてみたら?
66 : 【概要】ゲーム(RPG)の戦闘シーン。 ボタンの1個1個が装備・魔法などのコマンドに対応している。 ボタンを押すと敵の行動も決定され、互いに選択したアクションを実行。 BattleMain関数の中でLabel1.Repaintを使って解決しましたが、普通はこういう風にはしないのでしょうか? procedure TForm1.Item1Click(Sender: TObject); begin case game_state of //(中略) BATTLE_ACTION_CLICK: begin if Item1.Tag = character[0].action then begin // 同じボタンを2回クリックすることで行動決定 game_state := BATTLE_ACTION_EXECUTE; BattleMain; // BattleMain関数の中で戦闘を処理する。 // 攻撃⇒命中、回避などをメッセージ用のcaptionで表示、プレイヤーのクリックを待つ。 // 同様に敵キャラクターの行動もcaptionで表示してプレイヤーのクリックを待つ。 // 一通り終わったら行動選択に戻る。 game_state := BATTLE_ACTION_CHOISE; end else begin character[0].action := ( Sender as TComponent ).tag; end; end; end; end;
67 : >>61 いきなりCount:=1000でもいいんですね。 どうもありがとう。
68 : DelphiのライブラリにC++のstd::mapみたいなクラスは存在してますか? キーは文字列、値はTObject派生型です
69 : TStringsのStings[]とObjects[]で似たようなことはできるが。
70 : Application.ProcessMessagesでいいだろ
71 : bmp及びjpegファイルをTimage1に読み込むにはどうすればいいでしょうか。 ファイルをOpenDialog1で 一種類の拡張子(bmp)で読み込むことはできるのですが、 jpegのファイルを読み込むのがうまくいきません。 どちらでも読み込めるようにしたいのです。
72 : uses Jpeg;
73 : TForm1以外のクラスから、TForm1内のTImageやTLabelを操作しようとすると "メソッド識別子が必要です"と言われてコンパイルできません。 TForm1.ImageList1.Draw といった形で指定しているのですが、何がいけないのでしょうか?
74 : Form1.ImageList1.Draw が正しい。 T付きじゃインスタンスではなく型に対して 操作しようとしてるからエラーになる。
75 : 事実上ヌルポインタ操作だものな
76 : >>74 なるほど、考えてみればそのとおりですね。ありがとうございます。
77 : レスありがとうございます。 最初の質問ですが、さらに質問です。 Image1でbmpを表示させるときは下記でできたのですが、 procedure TForm1.Button4Click(Sender: TObject); Var BitMap : TBitMap; begin if OpenDialog1.Execute then //オープンダイアログボックスの呼び出し begin BitMap := TBitMap.Create; //ビットマップにファイルをロードする。 BitMap.LoadFromFile(OpenDialog1.FileName); //イメージにビットマップを渡す。 Image1.Picture.Bitmap := BitMap; //解放する BitMap.Free; end; end; これをbmpでもJpegでも読み込みできるようにするにはどうすればいいでしょうか。
78 : Image1.Picture.LoadFromFile(OpenDialog1.FileName);
79 : 例えば画像処理にGDIPLUS.DLLを利用する これをDELPHIで操作するのがGDIPAPI.PAS GDIPOBJ.PAS ググればどこかにある BMPとJPGとPNGに対応するはず 画像処理用のDLLだから縮小拡大とかいろいろできる bmp: TGPBitmap; bmp := TGPBitmap.Create(filename); こんな風にビットマップを作れる
80 : >>78 できました。 ありがとうございます。
81 : >>79 こちらの方法でもできました。ありがとうございました。
82 : クラス内にコンポーネントを作成する方法を教えてください。 constructor TestClass.Create; begin TestLabel := TLabel.Create(Form1); TestLabel.Caption := 'test'; TestLabel.Enabled := true; TestLabel.Visible := true; TestLabel.Top := 400; TestLabel.Left := 550; TestLabel.Refresh; end; このような形で宣言しているのですが、TestClassを作成してもラベルが画面に表示されません。
83 : 試してないけどTestLabel.Parentを設定してみて
84 : すいません、実はtwincontrolが何だかわかっていません。 parentに設定するtwincontrolはどうやったら調べられるでしょうか?
85 : Form1でいいんじゃね
86 : >>84 Parentには、張付け先の変数名を指定する。 フォームに直張りするなら、TestLabel.Parent:=Form1; TPanelとか、TGroupBoxならその変数名。 Createに渡している変数(今回の例で言えば、Form1)は、自動でそのTLabelを後片づけしてくれる人。通常は、張付け先のルート(大抵はTFormか)を指定する。 諸事情により、後片づけを自分でやるときは、Createの引数にnilを渡す。ただし画面に表示するオブジェクトを自分で後片づけすることは、まずないと思う。
87 : たぶんコンストラクタじゃなくてActiveになったときに処理すべきか コンストラクタだとFormとの作成順がおかしくなるんじゃないの
88 : >>83-87 みなさんありがとうございます。Form1を指定でうまくいきました。 しかし今度は、TestClass.FreeをしてもForm1に表示したラベルが消えなくなってしまいました。 TestClassのデストラクタでTestLabelも解放してるのですが、画面に残ったままです。 どうか消し方をお教えください。 >>87 Formが作成され終わった後にしか作成されないクラスなので、 その点は多分大丈夫じゃないかと思います。
89 : >>88 LabelのParentにnilは指定して見たかい?
90 : これは設計からして間違ってるだろ・・・
91 : 間違ってるけど、本人がやりたいんならほっとけ、という気も 普通はFrameとか使うだろうが
92 : >>88 「FTest := TestClass.Create; の後にFTestを解放せずに FTest := TestClass.Create; を実行してしまって TestClass型の実体を間違えて二つ作ってしまったので 一つを解放してもう一つが残っている」 に一票。
93 : オブジェクト指向を根本的に勘違いしていると思われ
94 : DLLでフォームを扱うときって、Application.Handleだけ渡すのと ApplicationとScreenを変数ごと渡す方法があるらしいけど どっちが正解?
95 : Packageにする
96 : >>93 でもオブジェクト指向設計とか オブジェクト指向プログラミングってむずかしいですね。 C++でも一緒でしょうけれど 漠然とオブジェクト指向言語に触れても 全くオブジェクト指向プログラミングは出来ませんし、 オブジェクト指向プログラミングの書籍って難解なのが多くて… もっと簡単になればいいのにって今でも思います。
97 : どこが難解なんだ...
98 : くだらないんだけど、 PString、@String、PChar(String)は同じ?
99 : 型が違うんじゃまいか?
100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
・ 次のスレ
17: ATL/WTL Part6 (904)
18: ニートの俺が何か開発して食いつなぐスレ (811)
19: Pythonのお勉強 Part45 (657)
21: 関数型プログラミング言語Haskell Part16 (828)