[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 04/19 05:10 / Filesize : 113 KB / Number-of Response : 389
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれDelphi(超初心者用)その43



1 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 12:18:00 ]
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その42
pc11.2ch.net/test/read.cgi/tech/1180613145/

<過去スレ>
DelWiki避難所
delwiki.info/?Delphi 関連の過去スレッド


152 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 23:01:32 ]
座布団一枚...

食え

153 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 05:06:14 ]
>>139
OLE Drag&Drop

>>141
それがいいと思う。

154 名前:デフォルトの名無しさん [2007/08/11(土) 13:33:07 ]
>>150
だから困るんですよ
なんで、部分一致検索じゃないかと・・・

155 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 17:30:58 ]
>>154
別に誰も部分一致検索じゃないなんて言ってないけど

156 名前:デフォルトの名無しさん [2007/08/11(土) 18:29:36 ]
いやだから、部分一致検索じゃないから、困ってるんです。


157 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 19:50:48 ]
ドキュメントのない開発環境はドキュンだな・・・

158 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 20:06:02 ]
>>156
はぁ?部分一致検索じゃん
勝手な思い込みで困ると書かれても困るんですけど
第一プラグインで解決したんじゃないの?じゃあもういいだろ

159 名前:デフォルトの名無しさん [2007/08/11(土) 21:02:44 ]
>>158
プラグインで問題は、解決はしましたが、
うちの2007では部分一致ではなく、前方一致です。
解せません。


160 名前:デフォルトの名無しさん [2007/08/11(土) 21:03:30 ]
すみません、2006でした。



161 名前:デフォルトの名無しさん [2007/08/11(土) 21:05:31 ]
二つの環境で試しましたが、両方とも、前方一致検索でした。
なんで、デフォルトでこんな不便な仕様なんだろう・・・

162 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:23:05 ]
画像を任意の角度だけ回転させるような手続き
Rotate(TImage, kakudo) みたいなのは標準でありますか?

163 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:30:02 ]
ない。

164 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:31:11 ]
そうですか
じぶんで描くしかないみたいですね

165 名前:デフォルトの名無しさん [2007/08/11(土) 22:37:48 ]
コンポーネントさがす

166 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:42:58 ]
GDI+を使う

167 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 23:15:38 ]
TImage は画像じゃないよ

168 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 10:29:47 ]
www.asahi-net.or.jp/~HA3T-NKMR/DGS/

169 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 12:08:42 ]
TBigBitmapCanvas って塗りつぶしうまくいかないよね。

170 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 13:13:58 ]
回転にCanvasはつかわないしょ。
普通に補間関数書いて、座標変換するだけ。



171 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 15:50:19 ]
>>170
> 普通に補間関数書いて
それが意外と難しい罠。

172 名前:デフォルトの名無しさん [2007/08/12(日) 23:47:28 ]

Threadの扱いで困っています。

Thread内でエラーが出た時に、ユーザーにしらせたいのですが、
どうするのがよいのでしょうか?

今は、Threadは、ひとつだけなので、
メインスレッドで、FThread: THogeThread; として、
サブスレッドの変数をもたせ、

開始時は、

FThread := THogeThread.Create(False);

とし、サブスレッド停止時には、スレッドの終了を待つように、

procedure TMainThread.StopThread;
begin
 if Assigned(FThread) then begin
  FThread.Terminate;
  FThread.WaitFor;
  FreeAndNil(FThread);
 end;
end;

としています。



173 名前:172 [2007/08/12(日) 23:48:21 ]
そして、サブスレッド内で、エラーが起きた場合
Synchronize で、メインスレッドでエラーをポップアップし、
Terminate; を呼び出しています。

しかし、こうすると、メインスレッドから、停止処理(StopThread)を呼ぶのはよいのですが
サブスレッドで、エラーが起きた場合は、
FThread が、終了したにも関わらず、FThreadが、保持された状態になります。
次に開始したときは、また生成してしまい、メモリリークになります。

こういうときはどうするのが良い方法なのでしょうか?
それとも、FThreadを持たない方法がよいのでしょうか?
(その場合、どうやってスレッドの終了を待てばよいのか……?)

174 名前:172 [2007/08/12(日) 23:49:04 ]
あ、よく考えたら、

サブスレッド開始時に、StopThread呼べばいいのか・・・

175 名前:172 [2007/08/12(日) 23:55:04 ]
もしくは、スレッド一個なら、最初から生成しておく方法でもいいですね。
メインスレッド(メインフォーム)生成時に、生成しておいて、

SyncObj.TSimpleEvent を使って、イベント待ちにして、
スレッド開始時には、TSimpleEvent .SetEvent;する。
スレッド停止時は、フラグを立てて、ループを抜け、イベント待ちにもどる、と。

で、メインスレッド破棄時のみ、TMainThread.StopThread を呼び出すと。

176 名前:172 [2007/08/13(月) 00:17:03 ]
結局、
FreeOnTerminate = True; を使って、スレッドを自動的に破棄するようにしたのですが、
アプリケーション終了時に、メモリリークが起きてしまいます。
(ReportMemoryLeaksOnShutdown := True;で確認)

TMainThread.StopThread;のように、スレッドの解放を待つにはどうしたらよいのでしょうか?

177 名前:172 [2007/08/13(月) 00:27:39 ]
>>176に関して、メインスレッド終了時(Destory)に、

 if Assigned(FThread) then begin
  FThread.Terminate;
  FThread.WaitFor;
  FThread := nil;
 end

としていたのですが、
スレッドを起動した状態で、終了すると
「スレッドエラー:ハンドルが無効です。 (6)」というエラー
と言われて、正常に終了できませんでした。

たぶん、Terminateで、スレッドが破棄されているからだと思います。

そこで、

  if Assigned(FThread) then begin
    FThread.FreeOnTerminate := False;
    FThread.Terminate;
    FThread.WaitFor;
    FreeAndNil(FThread);
  end;
としたところ、無事に正常に終了できました。
ありがとうございました。

でも、FThreadを持たず、複数Createする時はどうやって待つんだろ……



178 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 01:53:30 ]
TTabControlのDragModeをdmAutomaticにすると
タブをクリックしても選択されないのは仕様ですか?
そうするとOnMouseDownやOnMouseUpイベントも呼び出されてないみたいだし、
自前でやるしかないんですか?

179 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 02:09:09 ]
自前でやるのがプログラミングなんだぜ

180 名前:178 mailto:sage [2007/08/13(月) 02:17:21 ]
>>179
そうですか・・・><



181 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:33:12 ]
Delphi2007でTNT Unicode Control使うにはどうしたらいんでしょ?
無償版はだめっぽいし、最新の有償版ですら
パッケージ C:\Program Files\tmssoftware\TMSUnicode\Packages\TMSUnicodeDED2006.bpl を読み込めません。
指定されたモジュールが見つかりません。.
ってエラーがでる。(ちゃんとあんのに)

182 名前:デフォルトの名無しさん [2007/08/13(月) 10:49:40 ]
>>181
パスとおせよ。

183 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 13:18:40 ]
>>182
すみません、通ってるようです。

184 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 14:58:38 ]
>>172-177
Threadから自前のメッセージをポストしてメインスレッドでユーザーに知らせればいいの
では? そしてその時にエラー処理なども一緒にすれば、Threadの方はシンプルにできる
と思うんだけど。

185 名前:デフォルトの名無しさん [2007/08/13(月) 16:13:30 ]
rsdn.ru/article/delphi/Handlers.xml
ページみてるんですが、

type
 TCalcFunction = function(const A, B : integer) : integer;

function Add(const A, B : integer) : integer;
begin Result := A + B;end;

procedure Example;
var CalcFunction : TCalcFunction;
begin
 CalcFunction := Add;
 ShowMessageFmt('CalcFunction(2, 3) = %d', [CalcFunction (2, 3)]);

なんでこういうふうにわざわざやるんでしょうか?
どういうときにこういうのを使うんでしょうか?

186 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 16:25:16 ]
いや別にいやだったら本人の好きなようにやればいいんじゃないの?

187 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 16:26:25 ]
>>185
自由に関数を切り替えるためじゃない?例えば
var


188 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 16:28:05 ]
>>185
理由はそのページの説明文に書いてあるぞ

189 名前:187 mailto:sage [2007/08/13(月) 16:37:52 ]
ごめん、途中で送信しちゃった。

var
  SomeFunction : array[0..3] of TCalcFunction;
として
  SomeFunction[0] := Add;
  SomeFunction[1] := Sub;
  SomeFunction[2] := Multi;
  SomeFunction[3] := divi;
と代入すると(それぞれの関数は宣言してあるとする)。
  SomeFunction[a](2, 3) でaの値を変えるだけで関数を切り替える事ができる。

190 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 16:43:46 ]
関数ポインタの使いどころって意味なら
C言語の例だけどqsortで検索してみたら。



191 名前:デフォルトの名無しさん [2007/08/13(月) 17:11:48 ]
>>185 えーそうなんですけ?
>>189 条件分岐を不要にできるんですか。これは使ってみたいです。
>>190 かえってわかんなくなってしまいました><
ありがとうございました。

192 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/13(月) 22:29:46 ]
>>189 Delphiだと「手続き型」になりますがTListやTObjectListのSortメソッドがそれに相当しますね.
サンプルを作ってみたのですがちょっと長すぎるのでぐぐってみました.
(ほかのサンプルは Delphi TList Sort でぐぐるとよいかも)
www.smart-bbl.info/CQN/FAQ/delphi/d0009394.html

TList.Sortでは手続き型を使うことによって「データをどういう順番に並べ替えるかを決める処理と,
その条件に従って実際に並べ替える処理とが完全に分離」しています.

どんな形式のデータを並べ替えさせる場合でも,どんな順序で並べ替えさせる場合でも,
その条件に従って並べ替える方法はほぼ決まっているので,
結果としてリストを使うプログラマーは前者のコードを書くだけで済むようになり,
プログラマーが毎回並べ替えのコードを書くという無駄な作業から解放されるのです.

ちなみに上のページのサンプルコードではスタッフを年齢順にソートしていますが名前順にソートすることもできます.

function StaffSortCompareByName(Item1, Item2: Pointer): Integer;
begin
 Result := AnsiCompareText(PStaff(Item1)^.Name, PStaff(Item2)^.Name);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 StaffList.Sort(StaffSortCompareByName);
end;

ボタン1を押すと年齢順でソートされてボタン2を押すと名前順でソートされます.実質1行で.


193 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 23:27:52 ]
一番身近な関数ポインタは「イベント」ですわ。OnClickとか。





194 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/14(火) 01:26:03 ]
             ___________
    ∧,,∧     /こんな風にすると
   ミ,,゚Д゚彡 <  おもしろいよ。
   ミ つ日   \
 〜ミ,,,,,, ,,ミ       ̄ ̄

type
 TCheckLineFunction = function(Line: String): Boolean;
 TStringListFunction = record
  FStrings: TStrings;
  constructor Create(Strings: TStrings);
  procedure DeleteLine(f: TCheckLineFunction);
 end;
constructor TStringListFunction.Create(Strings: TStrings);
begin
FStrings := Strings;
end;
procedure TStringListFunction.DeleteLine(f: TCheckLineFunction);
var
 i: Integer;
begin
 for i := FStrings.Count - 1 downto 0 do
 begin
  if f(FStrings[i]) then
  begin
   FStrings.Delete(i);
  end;
 end;
end;


195 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/14(火) 02:14:32 ]
             ___________
    ∧,,∧     /
   ミ,,゚Д゚彡 <  以下、使い方。
   ミ つ日   \
//空行を判定している
function CheckEmptyTextLine(Line: String): Boolean;
begin
 if Line=EmptyStr then
  Result := True
 else
  Result := False;
end;

var
 StringListFunc: TStringListFunction;
begin
   StringListFunc.Create(OutputMemo.Lines);
   StringListFunc.DeleteLine(CheckEmptyTextLine);

end;

関数側で、Lineの内容を判定して、判定がTrueなら
行削除する処理を行えるわけです。



196 名前:デフォルトの名無しさん [2007/08/14(火) 11:39:22 ]
指定のアプリーションに、アクティブにせずに、キー入力を送りたいのですが、
可能でしょうか?
可能ならば、どのようにやったらよいのでしょうか?
検索単語でもいいので、ご享受ください

197 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 11:39:43 ]
最近は1つ質問すると10回答が来たり、自問自答がはやってるのか?
いやぁ、夏枯れですねぇ。

よきかな、よきかな・・・

198 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:58:05 ]
>>196
sendmessage

199 名前:デフォルトの名無しさん [2007/08/14(火) 14:51:59 ]
>>198
サンクソ。
PostMessageと、SendMessageっぽいですね。
調べてみます。

200 名前:デフォルトの名無しさん [2007/08/14(火) 16:22:30 ]
>>194 動かしてみたらなるほどおもしろいと思いました。
ありがとうございました。




201 名前:デフォルトの名無しさん [2007/08/14(火) 16:32:17 ]
最近は1つ質問すると10回答が来たり、自問自答がはやってるのか?
いやぁ、夏枯れですねぇ。

よきかな、よきかな・・・

202 名前:デフォルトの名無しさん [2007/08/14(火) 20:44:16 ]
こんにちは。

TnTコントロールとOpenXMLにパスを通してコンパイルすると、
以下のように、言われてコンパイルが通りません。
なんとか、通す方法はないでしょうか?

[Pascal 致命的エラー] TntClasses.pas(29): F2051 ユニット WideStrings は異なるバージョン WideStrUtils.WideQuotedStr によりコンパイルされています

203 名前:202 [2007/08/14(火) 20:51:30 ]
わかりました。

TnTから利用している VCL の WideStrUtils と、
OpenXML内の WideStrUtils がファイル名がかぶっているためでした。

Delphiは、ファイル名が、同じだと不都合でるんですね・・・
勉強になりました

204 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 00:32:27 ]
また自問自答か・・・

205 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 00:45:58 ]
自ら成長する
いいことじゃないか

206 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 01:02:33 ]
ファイル名が同じだと、dcuファイルの出力先で上書きされるんじゃないのか?

207 名前:デフォルトの名無しさん [2007/08/15(水) 02:45:07 ]
Delphi and Programming
d.hatena.ne.jp/wkmghn/

今の時期にDelphi入門記事が・・・
よきことです。

208 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 05:07:50 ]
まあ投げっぱなしで二度と来ない奴よりは数千倍マシだな

209 名前:デフォルトの名無しさん [2007/08/15(水) 09:57:37 ]
Delphi6だとTLabelのcolorプロパティを設定すれば即座に反映されますが
Delphi2007だと設定しても反映されません。

Delphi6で作成したプロジェクトをDelphi2007でコンパイルして実行すると
設定した色になりますが、最初からDelphi2007で作成するとコンパイルしても
色が灰色のままです。 (;_;)



210 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:59:21 ]
やったじゃん!



211 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:23:46 ]
>>209
VCL ソースでは property Color nodefault; になってるね。
コードで変えても変わらないわけだ。

212 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:26:01 ]
ありゃ核爆

213 名前:デフォルトの名無しさん [2007/08/15(水) 18:43:53 ]
各Windowの位置の保存は、みなさん、どう実装していらっしゃるのでしょうか?
既存のコンポーネントを使っておられますか?

214 名前:デフォルトの名無しさん [2007/08/15(水) 18:44:51 ]
Torryのページに、そのまんまのカテゴリがありました。

Components > Forms > State savers. Torry's Delphi Pages
www.torry.net/pages.php?id=96


その中のこれが、使いやすそうです。
ありがとうございました。

DelphiDabbler.com || Window State Components - Save and restore window size, state and position
www.delphidabbler.com/software?id=wdwstate


215 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 20:10:50 ]
自問自答って、あらたな拡販の手口?
あほすぎるのは、お笑い系?

216 名前:デフォルトの名無しさん [2007/08/15(水) 20:16:29 ]
>>214のコンポーネントは、けっこう便利そうです。

普通に使う分には、TPJWdwStateをFormにはっつけて、
AutoSaveRestore を Trueにいておけば、
自動的に、終了時にサイズ、位置、WindowStateが .ini に保存され、
起動時に復元されます。
(レジストリ版のコンポーネントもあります)

簡単な用途なら、コードを書く必要がないのが便利です。

217 名前:172 mailto:sage [2007/08/15(水) 20:18:38 ]
>>184
なるほど!メッセージを投げるのは思いつきませんでした。
簡単にできて、すっきりしますね
参考になりました。
サンクス。

218 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 20:25:02 ]
それをラップしたのがSynchronizeなわけで。
エラー通知に使っちゃいけないという理由はない。

219 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 22:38:48 ]
>>216
簡単な用途ならこーどでいいんでないかい?

220 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/16(木) 00:32:02 ]
           _____________
   ∧,,∧    />>213さん
  ミ,,゚Д゚彡 < 漏れは自作
   U  つ   \
 @ミ  ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪ 

DelFusa Library - Delphi OpenSource - DelFusa Floor
delfusa.main.jp/delfusafloor/opensource/delfusa_library_f.html
の、FormPosition.pas



221 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 00:34:23 ]
簡単な、それでいて反復性のあるコードをまとめたのがコンポーネントだし、
どんな用途でも使っていけばいいんでないかい?

てか自問自答に恨みでもあるかのごとく噛み付いてるのがいるけど、
ここのスレタイと>>1を理解できてないようじゃ初心者以下だよな
いくら下らないことでも、それに引っかかる人間が今後いるかもしれないし、
解決方法を残しておくことは決して悪くない、むしろいいことだと思う
ただ、ここに来る人間は過去ログ読まない人の方が多そうだが…

222 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 00:35:37 ]
また自問自答してるよ

223 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 03:36:51 ]
超初心者が枯渇したため、これからこのスレは自問自答を装った
Tips スレになりそうだな。www

224 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 03:43:28 ]
それはそれで

225 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 05:20:50 ]
みじめすぎ

226 名前:悲劇のヒロイン mailto:sage [2007/08/16(木) 05:26:32 ]
ありがとう

227 名前:デフォルトの名無しさん [2007/08/16(木) 08:21:26 ]
>>VCL ソースでは property Color nodefault; になってるね。
>>コードで変えても変わらないわけだ。

なぜこんな事をしたのでしょうか?

Delphi6 と 2007 のソース比べてみましたが、かなり変更されていますね

ソースを見ても ThemeServices なんて知らないものがいっぱいだし
ヘルプは英語で、お手上げです。

せっかく2007入れたけど Del6 を 入れ直します (;_;)

228 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:32:18 ]
おめでとう

229 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:43:22 ]
property Color nodefault;  には D7 の段階から変更されているよ 何か勘違いしてないかな?

230 名前:| mailto:sage [2007/08/16(木) 09:01:45 ]
LabelのColor property使ったことなかたから気付かなかった。
よくわからんだが、意味のないものになってるの?

>>220
サンクスです。

Delフサさんのページあったのですね。
参考にさせてもらいます。




231 名前:デフォルトの名無しさん [2007/08/16(木) 11:10:28 ]
>property Color nodefault;  には D7 の段階から変更されているよ 何か勘違いしてないかな?

そうあって欲しいです。Del7はアンインストールしてしまったので
すぐに解りませんが、後で試してみます。


>LabelのColor property使ったことなかたから気付かなかった。

私も今まで色には無頓着だったのですが、今回のシステムは先行したVB
のプログラムで色を豊富に使っているため、絶対使わないと駄目なんです。

まさかこんなところではまるとは (@_@)



232 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 11:24:21 ]
はまってごらんよ、あ〜の〜角を〜

233 名前:DEKO ◆v8todlW3ks mailto:sage [2007/08/16(木) 13:18:10 ]
>>231
TransparentプロパティがTrueになってませんか?
このプロパティはD2007からデフォルトでTrueになっています。

234 名前:デフォルトの名無しさん [2007/08/16(木) 15:07:34 ]
>TransparentプロパティがTrueになってませんか?
>このプロパティはD2007からデフォルトでTrueになっています。
おっしゃるとおりでした。

Del6はデフォルトでFalseでしたが、Del2007で開くとTrueに変化していました。
困ったことに、この状態でコンパイルすると False 状態で実行されました。

Del2007で一度プロパティを変化させてから保管すれば正しい状態に戻ります。

色々と調べていただきありがとうございました。





235 名前:デフォルトの名無しさん [2007/08/16(木) 21:13:57 ]
メニュー(A)から、開発中のプロジェクトのプログラム(B)を
起動するようなアプリケーションを作成しています。

起動するアプリケーション(B)を、メニュー(A)を起動した状態で実行したいため、
オプションの「ホストアプリケーションの指定」で、
メニュー(A)のパスを入れたのですが、
実行しても、指定したメニュー(A)ではなく、
プロジェクトのアプリケーション自体(B)が立ち上がってしまいます。

何か他にする設定がありますでしょうか?
環境は、BDS2006 Delphi win32です。


236 名前:デフォルトの名無しさん [2007/08/16(木) 21:35:36 ]
他のDelphi製アプリの位置やサイズを得たいのですが、
良い方法はありませんでしょうか?

今は、EXEのファイル名から、Windowハンドルを取得するところまで
できたのですが、
GetWindowRectで、Windowハンドルを渡しても、(640, 512, 640, 512)
みたいな予期しない値が帰ってきます。

たぶん、Delphi特有のTApplicationの座標が帰ってきていると思うのですが、
ここから、メインフォームのハンドルを得る方法はありませんでしょうか?

237 名前:236 [2007/08/16(木) 21:50:23 ]
AppHandleにTApplicationのHandleが入っているとして、

 FormHandle := FindWindowEx(AppHandle, 0, PChar('TForm1'), nil);

としたのですが、FormHandleは 0 が返ってきました。

238 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 22:00:14 ]
FindWindowExの理解不足。
所有されているウィンドウと子ウィンドウの違いが解っていないのかもしれない。

239 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:38:31 ]
Vista で標準となった? ALT 押したらメインメニューが出てくるのってどうやって実装するのですか?
マウスを上部に持って行ったら…とかなら、MainMenu:=nil で切り替えられると思うのですが、
キーボード主体で行いたいので。

240 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 00:06:40 ]
>>236
すなおにFindWindow('TForm', 'HogeHoge')でよいんでないの。
もしくはTApplicationのHandleを使って、EnumWindowsとか。




241 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:10:04 ]
2006→7?

242 名前:236 [2007/08/17(金) 01:29:51 ]
第6章 ウィンドウの階層について
homepage2.nifty.com/Mr_XRAY/Halbow/VCL06.html

これ見て、

GetWindow(hParent,GW_CHILD)
でいけるかと思いましたが、ダメでした。
Delphi2006のVCLと、ページの内容のバージョンのVCLとは違うのでしょうか?

>>238
FindWindowExやGetWindowで取得できないということは、
子ウインドウではないのですね・・・。

>>240
単純なFindWindowだと、識別が難しいのです
TApplicationのHandleを使ったEnumWindow試してみるす

243 名前:236 [2007/08/17(金) 01:38:10 ]
なんという勘違い/(^o^)\

第6章 ウィンドウの階層について
homepage2.nifty.com/Mr_XRAY/Halbow/VCL06.html

このページよく見たら、わかてきた気がします。

> FindWindowExやGetWindowで取得できないということは、
> 子ウインドウではないのですね・・・。

TApplicationに対して、TFormは、子ウインドウではなく、
所有するウインドウなんですね。

とすると、TApplicationのHandleに対して、
EnumThreadWindowsして、
GetWindow(Handle,GW_OWNER)が、TApplicationのHandleかどうか調べればいいわけですね。
上のページで言えば、EnumDirectOwnedWindowsですね。

明日試してみます

244 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/17(金) 01:48:28 ]
>>236-237さん

DelFusa Library - Delphi OpenSource - DelFusa Floor
delfusa.main.jp/delfusafloor/opensource/delfusa_library_f.html
   ∧,,∧
  ミ,,゚Д゚彡
  ,ミ'  ミ
〜OUUつ

ここのEnumWinUnit.pasでWindow列挙も出来るし
得たハンドルをTWinInfoのCreateでハンドルを入れたら
様々な情報をプロパティから読めるようにしておいてるよ。

VCLのメインフォームを得るためには
EnumWindows(@EnumWndProc, 0); {←Topレベルウィンドウなので0を指定}
これとか
function EnumWndProc(h: HWND; l: Integer): BOOL; stdcall;
これを使っていて
EnumChildWindows(h, @EnumChildWndProc, l+1);
これは使ってない。




245 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/17(金) 01:49:24 ]
   ∧,,∧   深夜なのに
  ミ,,゚Д゚彡  気温が暑いっすね〜
  ,ミ'  ミ
〜OUUつ

タスクマネージャーのアプリケーションタブ互換は
VisibleTrue/Owner有り/タイトル有り

TApplication系のメインを見つける場合は
VisibleTrue/Owner無し/タイトル有りで
OwnerがTApplicationのものを列挙で見つけるのが
いいと思うんだ。

例えばホットゾヌの場合
TApplicationにTHotzonuWindowがぶらさがっているのは
TApplicationのハンドルとTHotzonuWindowのOwnerを調べると
一致するから、わかるよ。


246 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/17(金) 01:58:53 ]

♪   ∧,,∧ ♪
    ミ,,゚Д゚彡  ♪
    ミつ[|lllll]).
   〜ミ   ミ
     ∪''∪

勉強すると楽しいよね。がんばってください。

とりあえず、D2007ではTApplicationウィンドウは廃止されますた。

dprの中身が
begin
 Application.Initialize;
 Application.MainFormOnTaskbar := True;
 Application.CreateForm(TMainForm, MainForm);
 Application.Run;
end.
このようになっていて
.MainFormOnTaskbar:=Trueとなると
VCL、TApplication式ではなくVista対応アプリになります。

※Win2Kで、今確認したら
タスクマネージャーのアプリケーションタブに表示されないという
バグがありますが....orz....

247 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 03:57:44 ]
ListViewのOwnerDataをTrueにすると
CheckboxesをTrueにしてもチェックボックスは表示されません
自分でチェックボックスを描画するんですか?><

248 名前:236 [2007/08/17(金) 04:25:44 ]
>>244-245
EnumWindowsで列挙して、OwnerがTApplicationのハンドルと比較
が確実つーことですか。

実験してみるす

公開されているユニットも、参考にさせていただきます。

>>246
マジスカ

249 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 09:39:04 ]
アジャイル、アジャイルってコンパイル速度のめっちゃ速いDelphiじゃすでに当たり前なんだよ

250 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 19:03:18 ]
導入したい超初心者ですが、
コードギアのユーザ登録のZip/Postal code ってなんですか?お願いします。



251 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 19:06:22 ]
中学生からやりなおせ

252 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 19:50:44 ]
郵便番号






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<113KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef