[表示 : 全て 最新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 関連の過去スレッド


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

 
です。







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

前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