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 関連の過去スレッド
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 ] 郵便番号
253 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 20:35:40 ] TStringListの各行を下記のように 個別のstringデータに入れたいのでが、 stringA:=List.strings[0]; stringB:=List.strings[1]; stringC:=List.strings[2]; stringD:=List.strings[3]; TStringListの最大行数(せいぜい10行)は決まっているのですが、 実際は1行だけなのか、最大行数まであるのかは分かりません。 こういう場合どうしたらスムーズですかね? ifで1行の場合、2行の場合ってやっていくしかないでしょうか?
254 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 20:41:15 ] ほう
255 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 20:49:05 ] stringlist.count case文 美しくないな
256 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/17(金) 22:14:01 ] >>245 どうでもよいことですが「気温が暑い」って言い方は正しくないです.「(やけに)気温が高い」もしくは単に「暑い」でおけ. わざとならごめんなさい. >>247 データを自前で持つようにするとチェックボックスは使えなくなるようです. VCLのバグなのかWindows側の問題なのかいまいちよく分かりません. >>253 あなたが『List.Strings[]に文字列を代入していないところを読み出そうとしたら空文字列を返すようにしたい』 …と考えていると決めつけてレスします. { Index がStrings.Count以上なら空の文字列を返す.0〜(Index - 1)ならStrings[Index]を返す. } function GetString(Strings: TStrings; Index: integer): string): string; begin if Index < Strings.Count then Result := Strings.Strings[Index] else Result := ''; end; で,stringA := GetString(List.strings[0]) みたいに使う. でも「何かを鍵にして複数の文字列を格納し,その鍵を使って文字列を取り出す」ということをしたいのでしたら Valuesプロパティを使って文字列を鍵にして文字列を格納したり取り出したりする方が良いかもしれません. procedure TForm1.Button1Click(Sender: TObject); begin Edit_Value.Text := ListBox1.Items.Values[Edit_Key.Text]; end; procedure TForm1.Button2Click(Sender: TObject); begin ListBox1.Items.Values[Edit_Key.Text] := Edit_Value.Text; end;
257 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/17(金) 23:30:05 ] ,,,,,,,,,,,,,,,∧,,∧ /もちろん 〜′,,,,,,,,,,ミ,,゚Д゚彡< わざとやがな UU"""" U ⊃ \ いやあ、ご無沙汰っす。元気してます〜? 暑いっすねー。
258 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 00:22:00 ] 初心者スレを荒らすなよ・・・
259 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 01:57:00 ] 文字列とか動的配列は参照カウントとか使ってるのに、 なんでクラスのインスタンスはわざわざFreeしなくちゃならず、 しかもC++みたいにスタックに置いたりできないのですか?
260 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 02:46:29 ] 文字列や動的配列はCopyOnWriteの機能が特に有効に使える型なので標準で実装されているが、 クラスは必ずしもそうとはいえないので各々のクラスの実装に任せている。 スタックに置けないのは、メモリの確保をクラスに委譲する設計を採用している為。
261 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 04:28:45 ] 理由を聞いてるんじゃないでしょ。 「できません」が回答。
262 名前:デフォルトの名無しさん [2007/08/18(土) 04:32:27 ] 誰か2007洒落にください
263 名前:259 mailto:sage [2007/08/18(土) 04:43:25 ] >>261 理由を聞いているんですが、何か?
264 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 05:05:07 ] >>261 文字列とか動的配列は参照カウントとか使ってるのに、 なんでクラスのインスタンスはわざわざFreeしなくちゃならず、 ~~~~~~ しかもC++みたいにスタックに置いたりできないのですか?
265 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:10:51 ] >文字列とか動的配列は参照カウント 文字列や動的配列は変数の寿命をそのままメモリ確保の寿命と出来る。 なお、俺がソースを見た範囲では参照カウントは使われていないようだ。 代入時に中身をコピーしてるように見える クラスの場合、windowsハンドルとかのリソースを持ってる場合があり、 開放時期を自分でコントロールしたい場合も出てくるのと、 自動開放するためには、その参照の代入で 複数の変数が参照してる場合もあり、 参照カウンタなどの管理機構が必要になる。 なおインターフェース型では参照型でメモリ開放管理が出来るようになっている。 >しかもC++みたいにスタックに置いたりできないのですか? これは単純に面倒だったからだろう。 その代わりにC++のようにドットと-> を混在させなくてすむ。 try finally の構文もあるし、ユニットという単位を持っていて、ユニット単位にinitialization や finalizationも書けるので、メモリスコープへの出入りで自動的に コンストラクタデストラクタを呼ぶような仕掛けを作る必要は無かったのだろう
266 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:25:45 ] よくもまぁ適当なことが書けるもんだなぁ・・・
267 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:26:48 ] >>265 >代入時に中身をコピーしてるように見える え?StringってCopy on Write じゃないの?
268 名前:デフォルトの名無しさん [2007/08/18(土) 06:30:05 ] StringはCopy on write 動的配列は、普通の参照カウンタ
269 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:35:37 ] 実装が古い だけでしょ。
270 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 06:40:36 ] Stringと動的配列はクラスベースにして 'foo'.UpperCase // = 'FOO' [1, 4, 3].Add(6).Sort // = [1, 3, 4, 6] とかできるようにしてもらいたいね。
271 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 07:43:28 ] >>269 いやC++のほうが古いよ。 C++の二の舞にならぬようこの方法になった。
272 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 08:18:00 ] 知ったか乙
273 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 08:42:09 ] 文字列の構造は StrRec = packed record allocSiz: Longint; refCnt: Longint; length: Longint; end; この後に文字列が続いている。 基本的に、メモリ管理は参照カウンタ方式 文字列を代入すると system.pas の _LStrLAsg _LStrAsg というアセンブラ関数が呼ばれるので確認よろしく
274 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 08:54:15 ] 知ったか乙
275 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:05:55 ] 長い文字列は、Delphi2 から、Interface 型は Delphi3 から、動的配列は Delphi4 か 5 からですね。だから、スマートポインタ関係はここ10年で 実装された。クラス実装を可能にしたのは、Delphi 以前の直前のバージョン。 Delphi は、Pascal の文法は拡張してきたが、変更はしていないので、 古い実装はそのままなんだよ。それが、つぎはぎ感を感じさせるが、一方、 あるていど使いやすさにも通じている。OOPL として不完全なのも同じ。
276 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 16:35:40 ] >>273 allocSizの部分ってあったっけ? その後はあったと思うけど
277 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 18:27:38 ] >>275 知ったか乙。
278 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 19:27:39 ] >>277 知らない乙
279 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 19:36:05 ] しったかならまだいいが、おすた化しないようにな genpin.com/
280 名前:253 mailto:sage [2007/08/18(土) 22:19:23 ] >>256 ありがとうございます。激しく感激。
281 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 22:45:10 ] var S : TStringList; begin while True do S:=TStringList.Create; end;
282 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:19:59 ] AnsiIndexTextって言うのを使いたいんですが、 2つ目のパラメータの意味というか設定の仕方が 分かりません。 string型の変数を渡してもだめって言うのは分かったのですが、 じゃあどうすればいいのかがさっぱりです。
283 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:32:05 ] >>281 こんな感じに使う。 AnsiIndexStr('うう', ['ああ', 'ううい', 'うう', 'ええ']); 詳しくはヘルプの「オープン配列コンストラクタ」を参照のこと。
284 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:00:59 ] >>280 他の奴にも礼言ったれよ死ね
285 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 08:19:09 ] つまりはつぎはぎのないC#が最高なのです。 Pascalは糞です。いますぐやめるべきです。
286 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 09:01:12 ] まあPascalが廃れC#が主流になったとしても VBしか使えない人がが主役になることはない訳だが。
287 名前:デフォルトの名無しさん mailto:SAGE [2007/08/19(日) 14:19:13 ] >>283 THX. よくわかりました。
288 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 21:26:42 ] while True do ShowMessage('あひゃ');
289 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:41:16 ] >>285 おまいは鮮人か?
290 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:48:11 ] そっとしておいてあげてください。
291 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:56:48 ] var i : integer; S : TStringList; begin i:=0; S := TStringList.Create; try while True do begin S.SaveToFile(IntToStr(i)); inc(i); end; finally S.Free; end; end;
292 名前:デフォルトの名無しさん [2007/08/20(月) 09:47:50 ] ある文字列の中に0〜9、a〜fの文字が使われていればTrue、それ以外の文字 が使われている場合はFalseを入れるプログラムを作りたいのです。 どうかご教授よろしくお願いします。
293 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:50:34 ] function have09af(s: string): boolean; var i: integer; begin for i := 1 to length(s) do if s[i] in ['0'..'9', 'a'..'f', 'A'..'F'] then begin result := true; exit; end; result := false; end;
294 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:56:31 ] >>292 一つでも 0..9 a..f があれば真なら >>293 さんの通り 16進数の文字列だけで構成されているかどうかなら var p: PChar; p:=PChar(s); while p^ in ['0'..'9', 'A'..'F', 'a'..'f'] do inc(p); このあと、 p^ = #0 がtrue falseか
295 名前:デフォルトの名無しさん [2007/08/20(月) 10:00:01 ] >>293 ,>>294 御二方ともありがとうございます。 早速試してみますね。
296 名前:デフォルトの名無しさん [2007/08/20(月) 10:46:19 ] 無事にできました。 ありがとうございます。 更に文字列がすべて空白の場合はTrue、 それ以外の空白(1文字空白等)はFalseという条件をつけ足そうとしました。 begin for i := 1 to length(s) do begin if s[i] in ['0'..'9', 'a'..'f', 'A'..'F'] then begin if s = '' then begin result := true; exit; end; end; result := false; end; end; 上記のようなコードを書いたのですが、上手くいきません。 重ね重ね申し訳ありませんが、ご教授お願いします。
297 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 12:44:14 ] 当方見習いエスパーなので、読み取れませんが、 全部spcかどうかは function spcCheck(s: string): boolean; var p: PChar; begin p:=PChar(s); while p^ in [' ', #7 ] do inc(p); result := p^ = #0; end; のような感じで
298 名前:デフォルトの名無しさん [2007/08/20(月) 19:02:33 ] try raise EMyError.Create('foo'); except on E: EMyError do self.error := E; // インスタンスを開放せずにerrorにセット。後でfreeなんてことは出来ませんか? end;
299 名前:デフォルトの名無しさん [2007/08/20(月) 19:13:23 ] こんにちは。 Delphi7で、Excelに書き込まれた値を読むプログラムを作成します。 ユーザー側のExcelのバージョンが統一されていないため、 バージョン依存しないようにプログラムを作成したいのです。 VBだと、ExcelのDLLに対する参照設定を行わずに dim objExcel as Object Set objExcel = CreateObject("Excel.Application") というようにできるのですが、 Delphiではどのように行えばよいのかお知恵を拝借させてください。 "Delphi レイトバインディング"などで検索したのですが、 見つけることができませんでした。 お力をお貸しくださいませ。 どうぞよろしくお願いします。
300 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 20:17:03 ] >>299 Delphi Excel CreateOleObject これでぐぐれば色々でてくるから参考に汁
301 名前:デフォルトの名無しさん [2007/08/20(月) 20:25:39 ] >>300 参考になるサイトがわんさか出てきました。 これでいけそうです♪ ありがとうございます!!
302 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:10:17 ] >>298 raise した分は勝手に破棄されるので_ 同じ例外オブジェクトをもう一度 raise 無しで作ればおk
303 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/20(月) 22:22:48 ] >>292-296 _______________ ∧.,,∧ /そこで、前にも紹介した ミ.*゚Д゚彡< CheckStrInTableですよ。 ミ つ目(ミ . \ 〜ミ,,O,,,,,,つ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ いつでもどこでも、一度書いていれば再利用できて汎用的って素敵。ウットリ delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070708185145/StringUnit/StringUnitLight.pas type TInTable = (itUnknown, itAllInclude, itAllExclude, itPartInclude); function CheckStrInTable(const Str, Table: WideString): TInTable; 文字がテーブルに指定したもので 全部含まれている、全部含まれていない、一部含まれている を判断できます。
304 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:25:46 ] ∧.,,∧ ミ.*゚Д゚彡 ミ つ目(ミ . 〜ミ,,O,,,,,,つ
305 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/20(月) 22:34:38 ] _____________ ∧,,∧ / ミ,,゚Д゚彡< ところでですね。 'ミ つ旦(ミ~~ \___________ ⊂ミ",, ,,ミ つ delphi-fanさんところで、listviewの項目並び替え テクがのっていますが あたしは、メーラーでよくみかける listviewヘッダの△▽マークを実装したいのですよ。 実装方法はわかっているんですが これが、コンポーネント化誰かしませんか... 漏れ、もうコンポーネント化するとか、って 相当わすれちゃったので、誰か教えてくらさい。 Delphiでlistviewヘッダの△▽マークを実装方法は 日本語で非常に情報が少ないですが、この辺。 ListView?の?カラムクリックによるソート hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200608/06080023.txt delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/01281.html
306 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:37:29 ] ∧,,∧ ミ,,゚Д゚彡 'ミ つ旦(ミ~~ ⊂ミ",, ,,ミ つ
307 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:46:59 ] >>303 これはひどい
308 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:48:52 ] >>307 これはひどい
309 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/20(月) 23:34:40 ] ∧,,∧___ /最近、よーやく /ミ*゚Д゚ミ/\< テストコードを /| ̄∪∪ ̄|\/ \同一ユニットに |____|/ いれるべきではないかなと ,,,,∪∪,,, ,, きがちいた。
310 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 03:27:38 ] >>323 つまりどーすんの?
311 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 04:10:32 ] >>323 に期待
312 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 22:45:47 ] >305 ListViewのソートの対象カラムに方向の矢印を出す方法の別解。 予めFBitmapArrowDnとFBitmapArrowUpに下向き、上向きのビットマップを用意しておく。で、 var Index: Integer; Hdr: HWND; HdItem: THDItem; begin Hdr := Listview_GetHeader(ListView1.Handle); for Index := 0 to ListView1.Columns.Count - 1 do begin FillChar(HdItem,sizeof(HdItem),0); HdItem.Mask := HDI_FORMAT; Header_GetItem(Hdr,ListView1.Columns.Items[Index].Index,HdItem); if (矢印を出すカラムだったら) then begin if (昇順だったら) then begin HdItem.hbm := FBitmapArrowDn.Handle; end else begin HdItem.hbm := FBitmapArrowUp.Handle; end; HdItem.Mask := HDI_FORMAT or HDI_BITMAP; HdItem.fmt := HdItem.fmt or HDF_BITMAP_ON_RIGHT or HDF_BITMAP; end else begin
313 名前:312 mailto:sage [2007/08/21(火) 22:46:50 ] HdItem.Mask := HDI_FORMAT; HdItem.fmt := HdItem.fmt and not(HDF_BITMAP_ON_RIGHT or HDF_BITMAP); end; Header_SetItem(Hdr,ListView1.Columns.Items[Index].Index,HdItem); end; end; こんな感じでやってます。コンポーネント化?うぅむ…。
314 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:02:43 ] うぅむ
315 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:16:25 ] procedure ahya; begin ahya; end;
316 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:26:31 ] うぅむ…。
317 名前:312 mailto:sage [2007/08/22(水) 00:43:17 ] そういやこれのネタ元どこだっけな?確か海外だったような希ガス。
318 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:55:31 ] TComboBoxでTMemoのModifiedみたいに、値が変更されたのかを知るにはどうすればいいのですか?
319 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:03:03 ] うぅむ…。
320 名前:haru [2007/08/22(水) 17:36:28 ] はじめましてよろしくお願いします。 GetWindowやFindWindowを使って、ウインドウハンドルを取得し、 とあるソフトを自動的に操作したいのですが、 そのソフトが、確認の際にダイアログを表示してきます (delphiでいうMessageDlgを使用している感じ) その際、delphiのソフトは待ち状態になってしまうのです。 そのダイアログを消さないと操作が続かないのですが、 delphiのソフトからはどうにもこうにもできなくて困っています。 何かよい方法をご存知の方はいらっしゃいませんか?
321 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:42:23 ] ダイアログも自動的に操作すればいいじゃん
322 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:54:50 ] >>323 に期待
323 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:07:59 ] テスト専用のプロジェクトを作るんでしょ。 >>320 OKボタンがウィンドウなら、OKボタンに対してWM_LBUTTONDOWNを送る。
324 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 07:03:08 ] >>320 SendMessage を使って操作したら、その操作の中で相手がダイアログを出すから処理が帰って来ないって事だよね? ならPostMessageに変更したらどう?
325 名前:haru [2007/08/23(木) 09:40:41 ] 早速のお返事ありがとうございます。 >>321 さん ダイアログが出た瞬間、delphiのソフトは待ち状態になるので ウィンドウが取得できないのです。 >>323 そのダイアログのウィンドウハンドルが取得できなくて悩んでいます。 >>324 そのとおりです。 PostMessageについて調べてみました。 確かにこれを使えばできそうな気がしますが、 その前に、出てきたダイアログのウィンドウハンドルが取得できません。 これは元のウィンドウから見てハンドルが決まってたりするんでしょうか? ダイアログが出ていないときに、 ウィンドウハンドルやその中のボタンのハンドルは決まっているのでしょうか? (ダイアログが出てしまうとdelphiソフトは何も調べられないので。。) 再度よろしくお願いします。
326 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 09:53:27 ] >>325 PostMessage に変更したら、処理は即座に帰って来るので その後開かれるダイアログを検索する事は出来ると思うよ。 Delphiのbinフォルダに WS32.exe があるからコレをまず眺めてみたら?
327 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 14:25:42 ] TListの中身がFreeされているか判断したいとき 予めnilを入れておく以外の方法ってありますか?
328 名前:haru [2007/08/23(木) 14:54:52 ] >>326 解決しました。 ありがとうございました。 またお世話になるかもしれないので、よろしくお願いします!!
329 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 15:41:34 ] >>327 難しく考えず、ポインタも所詮数値なんだから 数値の正しさとは何か、を追求すればおのずと答えが出るじゃろ
330 名前:デフォルトの名無しさん [2007/08/23(木) 15:45:23 ] コンソールアプリケーションを用いて、 1 4 9 16 2 3 8 15 5 6 7 14 10 11 12 13 17 18 … と書くプログラムを作りたいのですが、よく分かりません。 分かる方、教えてください。
331 名前:デフォルトの名無しさん [2007/08/23(木) 15:47:15 ] すいません。 1 4 9 16 2 3 8 15 5 6 7 14 10 11 12 13 … です。