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

<前スレ>
くだすれDelphi(超初心者用)その42
スレリンク(tech板)

<過去スレ>
DelWiki避難所
URLリンク(delwiki.info) 関連の過去スレッド


2:デフォルトの名無しさん
07/08/03 12:19:07
Delphi初心者のための寺子屋
スレリンク(tech板)
Delphiで無料でプログラミングしてみるお
スレリンク(tech板)
バカボンのDelphi不買・販促・その他談話室その29
スレリンク(tech板)
Borland Developer Studio 2006 No.13
スレリンク(tech板)
Borland Developer Studio 2006 アンチスレ
スレリンク(tech板)
VB vs Delphi @夏厨2006
スレリンク(tech板)
【Delphi】 Indyコンポーネント 【C++Builder】
スレリンク(tech板)
delphiで2ch保守プログラムを作ろう
スレリンク(tech板)
Delphi持ってるならGLSceneを使え
スレリンク(tech板)
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
スレリンク(gamedev板)
Delphiでアクションゲームが作りたい!! Part2
スレリンク(gamedev板)
ネットワークゲーム作成のお勉強(Delphi専用スレ)
スレリンク(gamedev板)
delphiでMMO
スレリンク(gamedev板)
【Delphi互換!?】FreePascal【GPL】
スレリンク(tech板)
CodeGear
URLリンク(dn.codegear.com)

3:デフォルトの名無しさん
07/08/03 12:20:19
重複です。移動してください。
スレリンク(tech板)

4:デフォルトの名無しさん
07/08/03 12:32:59
無償ダウンロード
URLリンク(www.microsoft.com)

5:デフォルトの名無しさん
07/08/03 18:37:42
WideString対応のTStringList、
TWideStringListってないですか?

6:デフォルトの名無しさん
07/08/03 18:52:00
WideStringsに、TWideStringListがありました。
これを使ってみようと思います。

7:デフォルトの名無しさん
07/08/03 20:48:35
Delphi向けのドキュメントツールを探しています。
みなさんは何を使っておられますか?

過去スレをみると、DIPasDocなどがあるようですが、
日本語対応版?が見つけられませんでした。

8:Delフサギコ ◆A6VzDeLphI
07/08/04 01:14:53
           _________
   ∧,,∧   / 
  ミ,,゚Д゚彡 <  これかしら。
   ミ つ旦)~~ \ 
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪

Hexe19 - Doxygen for Delphi : Pas2Dox
URLリンク(web.archive.org)

また、Archive化しなけれ....

9:デフォルトの名無しさん
07/08/04 08:03:33
海外のドキュメンテーションツールは、海外ではいくつかありそうです。

・DelphiCodeToDoc home page
URLリンク(dephicodetodoc.sourceforge.net)
JavaDoc互換文法
GExperts 用のテンプレート完備

・JADD - Just Another DelphiDoc - Automatic Generation of Documentation for Delphi/Kylix-Projects
URLリンク(delphidoc.sourceforge.net)

・PasDoc - pasdoc
URLリンク(pasdoc.sipsolutions.net)

・SourceForge.net: Pascal To Doxygen Convertor
URLリンク(sourceforge.net)
Doxygen文法?


どれも日本語は、たぶん、修正がいるだろうな・・・
ソースコードがUNICODEになったら、対応もいらないんだろうけど

DelphiCodeToDocがアクティブっぽいので、試してみようと思います。


10:デフォルトの名無しさん
07/08/04 08:04:09
x 海外のドキュメンテーションツールは、海外ではいくつかありそうです。
o Delphiのドキュメンテーションツールは、海外ではいくつかありそうです。


11:デフォルトの名無しさん
07/08/04 08:21:06
DelphiとVBはどちらが優れていますか?

12:デフォルトの名無しさん
07/08/04 08:23:58
ドキュメンテーションツール追加

・Doc-O-Matic - Doc-O-Matic - Documentation System
URLリンク(www.doc-o-matic.com)
商用
CodeGearが使っているらしい

・Time2HELP - The Developer's Source Code Documentation Solution
URLリンク(www.time2help.com)
"JavaDoc" for Delphi
だそうで。

一回Delwikiにでもまとめたいですね



13:デフォルトの名無しさん
07/08/04 08:24:36
追加
・The Delphi Inspiration: DIPasDoc
URLリンク(www.yunqa.de)

PasDocをDelphiでコンパイルできるようにしたものらしい


14:デフォルトの名無しさん
07/08/04 08:27:27
>>11

【VBと比べて、比べる事であそびたい人】
VB vs Delphi @夏厨2006
スレリンク(tech板)


【VCと比べて、比べる事であそびたい人】
結局DelphiとVC++ってどっちの方がいいんだ?
スレリンク(tech板)


それぞれ専用スレがあるので、ご活用下さい。

15:デフォルトの名無しさん
07/08/04 16:02:16
AnsiStringでリードバイトの処理がわからん外人はUnicodeになっても、サロゲートの処理がわかんないんだろうな。



16:デフォルトの名無しさん
07/08/04 17:44:33
で?

17:デフォルトの名無しさん
07/08/04 19:11:09
  彡川川川三三三ミ~
   川|川/  \|~ プゥ~ン __________________
  ∥|∥ ◎---◎|~     /AnsiStringでリードバイトの処理がわからん
  川川∥    3  ヽ~   < 外人はUnicodeになっても、
  川川   ∴)д(∴)~    \サロゲートの処理がわかんないんだろうな。
  川川      ~ /~       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  川川∥    ~ /∥ _____
 川川川川___/∥  |  | ̄ ̄\ \
   /       \__|  |    | ̄ ̄|
  /  \___      |  |    |__|
  | \      |つ   |__|__/ /   カタカタカタ
  /     ̄ ̄  | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕
 |       | ̄

18:デフォルトの名無しさん
07/08/04 19:28:34
Delphiでは特に気にする必要ないよね
前スレにいたUTF-8変換にバグがあるとか言ってた馬鹿がまた来たか?

19:デフォルトの名無しさん
07/08/04 19:57:23
>>1
スレ立て乙です~

>>18
UTF-8にサロゲートペアってあったっけ?

20:デフォルトの名無しさん
07/08/04 20:53:12
>>18
Delphiってより気にする必要がないのはおまえのプログラムがだろ??頭大丈夫?


21:デフォルトの名無しさん
07/08/04 20:56:51
>>19
>>18がいいたいのはUCS2のことだろ、エンコーディングと文字集合の違いも理解できない
やつはほっとこう。


22:デフォルトの名無しさん
07/08/04 21:10:35
  彡川川川三三三ミ~
   川|川/  \|~ プゥ~ン __________________
  ∥|∥ ◎---◎|~     /Delphiでは特に気にする必要ないよね
  川川∥    3  ヽ~   < 前スレにいたUTF-8変換に
  川川   ∴)д(∴)~    \バグがあるとか言ってた馬鹿がまた来たか?
  川川      ~ /~       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  川川∥    ~ /∥ _____
 川川川川___/∥  |  | ̄ ̄\ \
   /       \__|  |    | ̄ ̄|
  /  \___      |  |    |__|
  | \      |つ   |__|__/ /   カタカタカタ
  /     ̄ ̄  | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕
 |       | ̄

23:デフォルトの名無しさん
07/08/04 22:34:14
>>20
Delphiにはサロゲート処理のある関数がない
人のレス読んで煽る前にVCLのソース読んでこい

24:デフォルトの名無しさん
07/08/04 22:40:10
前スレのってCESU-8がどうのこうの言ってたやつか
それまで散々粘着してたのにUCS2だって言われてから急に消えて笑ったな

25:デフォルトの名無しさん
07/08/04 22:49:01
つーか、Del用でUCS4なUnicodeコンポ作ってる外人さんはいても日本人の作ったのは知らないなぁ

26:デフォルトの名無しさん
07/08/04 22:54:13
資料も今じゃロシア語や中国語で書かれたものの方が多いしな
日本語文献はどんどん消えていく

27:デフォルトの名無しさん
07/08/04 23:19:30
拝啓ユーザー様
 開発環境が対応していないので、私のプログラムも対応してません。


28:デフォルトの名無しさん
07/08/04 23:20:57
  彡川川川三三三ミ~
   川|川/  \|~ プゥ~ン __________________
  ∥|∥ ◎---◎|~     /Delphiにはサロゲート処理のある関数がない
  川川∥    3  ヽ~   < 人のレス読んで煽る前にVCLのソース読んでこい
  川川   ∴)д(∴)~    \
  川川      ~ /~       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  川川∥    ~ /∥ _____
 川川川川___/∥  |  | ̄ ̄\ \
   /       \__|  |    | ̄ ̄|
  /  \___      |  |    |__|
  | \      |つ   |__|__/ /   カタカタカタ
  /     ̄ ̄  | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕
 |       | ̄

29:デフォルトの名無しさん
07/08/04 23:21:56
  彡川川川三三三ミ~
   川|川/  \|~ プゥ~ン __________________
  ∥|∥ ◎---◎|~     /前スレのってCESU-8がどうのこうの言ってたやつか
  川川∥    3  ヽ~   < それまで散々粘着してたのにUCS2だって言われてから急に消えて笑ったな
  川川   ∴)д(∴)~    \
  川川      ~ /~       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  川川∥    ~ /∥ _____
 川川川川___/∥  |  | ̄ ̄\ \
   /       \__|  |    | ̄ ̄|
  /  \___      |  |    |__|
  | \      |つ   |__|__/ /   カタカタカタ
  /     ̄ ̄  | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕
 |       | ̄

30:デフォルトの名無しさん
07/08/05 03:17:57
tnt買収してさっさとUnicodeに公式対応してくんないかな

31:デフォルトの名無しさん
07/08/05 10:32:35
めちゃめちゃ初心者なんですけど、セルに色をつけるってどうやるんですか?
Ondrawcellを使うのはわかったんですけど、ヘルプ見てもコマンドがよくわかりません><


32:デフォルトの名無しさん
07/08/05 11:29:54
>>31
何のセルだよ。TStringGrid?
あとこのスレは超初心者用なんだからいちいち初心者ですなんて言わなくておk

33:デフォルトの名無しさん
07/08/05 11:42:45
はい。おっしゃるTStringGridです。
excelのような簡単な表を作成し、この列は赤、この列は青のように色分けを
したいのですが、canvasコマンド?がいまいちよくわからないのです。

34:デフォルトの名無しさん
07/08/05 11:51:15
ヘルプでTCanvas を一度全部見てゆくといいよ。
Brush.Color とか Pen.Color とか Font.Color で色を変えられるよ
文字を描く場合は、TextRect で枠に合わせて描くと

35:デフォルトの名無しさん
07/08/05 12:19:11
たびたび申し訳ありません
色分けについて、
URLリンク(www2.biglobe.ne.jp)
このページを発見したのですが、
// セルに書き込む
TextRect(Rect, Rect.Left + 2, Rect.Top + 2,
StringGrid1.Cells[Col, Row]);
という行の+2などの意味がよくわからないのですが教えていただけたら幸いです。

36:デフォルトの名無しさん
07/08/05 12:30:09
delphi って、近年なくなるってことはないですか?
将来5年間くらい存続する確立は何%くらいでしょうか?

37:デフォルトの名無しさん
07/08/05 12:46:18
今までもさんざん危機を叫ばれていながら存在し続けているので35%の確率で存続するのではないでしょうか?
まあそんな事は神の味噌汁ですが。

38:デフォルトの名無しさん
07/08/05 12:49:47
>>35
単なる足し算。 左上よりちょっと真ん中に描画するって意味だけど、
セルが大きいと無意味ですね。

39:デフォルトの名無しさん
07/08/05 13:12:01
2年なら50%、5年なら20%くらいの確率で生き残れる、と思う。

40:デフォルトの名無しさん
07/08/05 13:22:27
ま、いつ発売中止になっても驚かない、って状況ではある。

41:デフォルトの名無しさん
07/08/05 13:25:10
例えば10年以上も前にとっくに実機が販売されなくなったMSXだけども、
いまだにMSXユーザーってのは根強く存在するわけで。
ユーザーがいなくならない限り存在し続けるんじゃないかな。どんな形であれ。

しかし色々なゴタゴタがあったのにここまで残ってこられたのは本物なんじゃないかな。

42:デフォルトの名無しさん
07/08/05 13:56:52
  彡川川川三三三ミ~
   川|川/  \|~ プゥ~ン __________________
  ∥|∥ ◎---◎|~     /しかし色々なゴタゴタがあったのにここまで
  川川∥    3  ヽ~   < 残ってこられたのは本物なんじゃないかな。
  川川   ∴)д(∴)~    \
  川川      ~ /~       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  川川∥    ~ /∥ _____
 川川川川___/∥  |  | ̄ ̄\ \
   /       \__|  |    | ̄ ̄|
  /  \___      |  |    |__|
  | \      |つ   |__|__/ /   カタカタカタ
  /     ̄ ̄  | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕
 |       | ̄

43:デフォルトの名無しさん
07/08/05 14:01:53
そんなの、N88Basic ユーザがまだいるわいな、というくらい製品として無意味。

44:デフォルトの名無しさん
07/08/05 14:15:03
  彡川川川三三三ミ~
   川|川/  \|~ プゥ~ン __________________
  ∥|∥ ◎---◎|~     /そんなの、N88Basic ユーザがまだいるわいな、
  川川∥    3  ヽ~   < というくらい製品として無意味
  川川   ∴)д(∴)~    \
  川川      ~ /~       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  川川∥    ~ /∥ _____
 川川川川___/∥  |  | ̄ ̄\ \
   /       \__|  |    | ̄ ̄|
  /  \___      |  |    |__|
  | \      |つ   |__|__/ /   カタカタカタ
  /     ̄ ̄  | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕
 |       | ̄

45:デフォルトの名無しさん
07/08/05 15:12:33
     ↓>>17,22,28,29,42,44
     _____  
   /::::::::::::::::::::::::::\~プーン
  /:::::::::::::::::::::::::::::::::::::::\~プーン
  |:::::::::::::;;;;;;|_|_|_|_|~プーン         
  |;;;;;;;;;;ノ∪  \,) ,,/ ヽ~          
  |::( 6∪ ー─◎─◎ )~        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |ノ  (∵∴ ( o o)∴)~      < えーと、製品として無意味っと・・・
  | ∪< ∵∵   3 ∵>         \_____________
  \        ⌒ ノ_____
    \_____/ |  | ̄ ̄\ \   カチャ
___/      \   |  |    | ̄ ̄| カチャ
|:::::::/  \___ | \|  |    |__|   
|:::::::| \____|つ⊂|__|__/ /
|:::::/        | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕  

46:デフォルトの名無しさん
07/08/05 15:14:31
またUnicodeの人か

47:デフォルトの名無しさん
07/08/05 18:16:43
  彡川川川三三三ミ~
   川|川/  \|~ プゥ~ン __________________
  ∥|∥ ◎---◎|~     /またUnicodeの人か
  川川∥    3  ヽ~   < 
  川川   ∴)д(∴)~    \
  川川      ~ /~       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  川川∥    ~ /∥ _____
 川川川川___/∥  |  | ̄ ̄\ \
   /       \__|  |    | ̄ ̄|
  /  \___      |  |    |__|
  | \      |つ   |__|__/ /   カタカタカタ
  /     ̄ ̄  | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕
 |       | ̄

48:Cの老師を目指す女
07/08/05 20:31:33
裕美子といいます。大都会の片隅で×いちで孤独なOLをしています。
私はDelphiはあまり得意ではありませんが、Delphiユーザーは
ハイレベルなプログラマが多いので尊敬しています。がんばってくだ
さい。

上のAAから悪しきオーラを感じます。あなたはプログラマではなく
単なるフィッシングがネチな2ちゃん根らですね。たとえどんなに
策を労使ようとも私たちはくじけますん。

49:Cの老師を目指す女
07/08/05 20:32:20
ごめんなさい

くじけますんじゃなくてくじけませんです。訂正してください。

50:デフォルトの名無しさん
07/08/05 22:47:39
小池徹平より不細工な女は女とは認めますん

51:デフォルトの名無しさん
07/08/05 22:52:40
許しますん

52:デフォルトの名無しさん
07/08/05 23:13:17
労使よう


53:デフォルトの名無しさん
07/08/05 23:58:36
まあ仮に近い将来消えちゃったとしても、
ライブラリソースに手を入れられるのが唯一の救いだな
64bit全盛時代が来るまではそれで何とか繋げる

54:デフォルトの名無しさん
07/08/06 00:22:07
べつにDelphiじゃなくても、しのげる人は大勢いますけど・・・

55:デフォルトの名無しさん
07/08/06 00:23:41
Delphiユーザは、ふさによると2%くらいなんだから、消えたってまったくこの業界
に影響ないでしょ。

56:デフォルトの名無しさん
07/08/06 00:28:40
レコード型を使おうと思っているのですが
それぞれのフィールドの型が循環参照(?)している場合は
どうやって定義したらいいですか。

type Ttest1 = record
 index: Integer;
 test2: Ttest2;
end;

type Ttest2 = record
 index: Integer;
 test1: Ttest1;
end;

57:デフォルトの名無しさん
07/08/06 00:28:50
隔離スレでやれ

58:デフォルトの名無しさん
07/08/06 00:37:17
>>56
再設計を勧める

59:デフォルトの名無しさん
07/08/06 00:42:51
type
PRec1 = ^TRec1;
PRec2 = ^TRec2;

TRec1 = record
rec2: PRec2;
end;

TRec2 = record
rec1: PRec1;
end;

みたいに一つのtypeにまとめてTRecX, PRecXをついにして定義すれば可能。
ただ>>56みたいなポインタではなく変数そのものを循環的に格納するなんて論理的に不可能だぞ。

60:デフォルトの名無しさん
07/08/06 01:06:50
ありがとうございます。
ポインタでやってみます。

61:デフォルトの名無しさん
07/08/06 01:07:57
クラスにしちゃえよ

62:デフォルトの名無しさん
07/08/06 03:52:46
前スレ999
> uPnPを使ってuPnP対応のルータにポートを開閉を要求するにはどうしたらよいのでしょうか

URLリンク(nw.odoruinu.net)
とか、どうでしょ。

タイプライブラリを作る方法は、この辺を参考に。
URLリンク(www.delphipraxis.net)
URLリンク(www.delphipraxis.net)

63:デフォルトの名無しさん
07/08/06 12:56:08
先輩にDelphi勧められているんでこの夏休みに勉強しようと思うんですが、
友達に聞いたらもう終わってるとか言われたんですがどうなんでしょう?
何でもキリックスとかに移ったとか(よくわからないのでスマソ)

64:デフォルトの名無しさん
07/08/06 13:05:23
Delphiなんて古木を今更わざわざ拾わなくても
ゆとりプログラマは根の張った大木にぶらさがって優雅にC#でもやってなさいってこった

65:デフォルトの名無しさん
07/08/06 13:44:04
ポインタないし

66:デフォルトの名無しさん
07/08/06 14:03:47
それはJAVAだろ・・・・・っといってもDelphiのClass形と同じような参照としてのポインタはあるんだけどな

67:デフォルトの名無しさん
07/08/06 15:07:11
StringGridについて詳しく解説されてるページとかありませんか?
あったら教えてください。

68:デフォルトの名無しさん
07/08/06 15:46:58
>>63
Unicodeベースでなければならない、.NETでなければならない、
就職に繋げたいということでもないなら
Win32な開発環境としては別に終わっちゃいない。
今なおWindowsで最も楽な開発環境の一つ。

Kylix(カイリックス)はDelphiのLinux版で
かなり大昔にバージョンアップが途絶えて
どちらかというとこっちの方が終わってる環境だ。

69:ななしへたぐらま ◆XcB18Bks.Y
07/08/06 15:58:17
>>35
ためしに+2を取り除いたり違う数(たとえば10とか20とか)にして実行してみましょう.
また片方の値だけを変えて実行してみてください.
その数が何を意味しているのか,またどうして+2なのかがわかると思います.

DelphiやVBはコードを書いたら速攻で実行できるので
いろいろ考えるよりもまずは条件をいろいろ変えて動かしてしまいましょう.

>>36
いつ無くなってもおかしくありませんがまだしぶとく生き残ると思います.
もっとも,大切なことはDelphiという道具の使い方を覚えることではなくて
自分のやりたいことを形にする技術を身につけることなので,
Delphiでそれを身につけていればどの開発環境にいってもうまくやっていけるはずです.

>>56
そのTtest1とTTest2が別のものである必然性は本当にありますか?
実はひとつのもので済んだりはしませんか?

本当に相互に参照しなければならない場面は案外少なかったりします.
これはレコードに限らず,オブジェクトやユニットにも言えます.


70:デフォルトの名無しさん
07/08/06 16:05:48
>>68
ネタにマジレスする馬鹿



71:デフォルトの名無しさん
07/08/06 16:32:23
dephi6 personalを使っています。
クラスのメンバとして定数を定義したいのですがpublicのあたりに
 public
  const val: Integer = 0;
としても「'END'が必要な場所に'CONST'があります」とコンパイルエラーになります。
こういうものはプロパティで代用するしかないんでしょうか。

72:デフォルトの名無しさん
07/08/06 18:52:57
クラスのメンバではないグローバルな定数で代用してください

73:デフォルトの名無しさん
07/08/06 18:56:48
プロパティにするとインスタンス生成しないと参照できなくなるから
class function val: integer;
にするのも手。オーバーヘッドが発生するんで一長一短だな。

74:デフォルトの名無しさん
07/08/06 19:20:37
>>71
使ってる環境をTurbo Delphiに変えれば可能です

75:デフォルトの名無しさん
07/08/06 19:27:21
Delphiは関数内関数や、関数の中で構造体を定義出来たり、定数を定義出来たりするのに
クラスの中で そういうのが出来ないんだよな

まあ、ユニットを1つの単位と考えて、1ユニット1クラスで考えればいいと思うんだけどな

76:デフォルトの名無しさん
07/08/06 20:02:06
Delphi6ではできないことがわかってすっきりしました。
代替方法でやってみます。
ありがとうございました。

77:デフォルトの名無しさん
07/08/06 20:56:11
(´-`)。oO(なんで普通の定数だとまずいんだろう…)

78:ななしへたぐらま ◆XcB18Bks.Y
07/08/06 21:24:10
VCLのソースファイルの再構築はどうやればよいのでしょうか.

Delphi 5を使っているのですが
HeaderControlにメモリリークのバグがあるので
VCLのソースファイル(comctrl.pas)に手を加えてみました.

しかしソースファイルを書き換えただけでは駄目,bcc32でコンパイルしても駄目,
パッケージの再構築をしようにもパッケージのソースファイルがないようなので困っています.


79:デフォルトの名無しさん
07/08/06 21:43:35
URLリンク(www2.big.or.jp)

80:ななしへたぐらま ◆XcB18Bks.Y
07/08/06 22:08:45
ありがとうございます.
おかげさまでうまくいきました.
これで今日は家に帰れます…


81:デフォルトの名無しさん
07/08/07 02:53:32
>>75
おいおい。できるってw


82:デフォルトの名無しさん
07/08/07 02:54:34
アンチは、デマばかり振りまく。
かまうな馬鹿

83:デフォルトの名無しさん
07/08/07 03:28:23
ふるいバージョンではできないでしょ。質問者はそういってるし。

84:デフォルトの名無しさん
07/08/07 03:47:57
いつになったらテンプレートが使えるようになるんですか?

85:デフォルトの名無しさん
07/08/07 11:11:45
StringGridのセルを初期化するにはどうすればいいんでしょうか?

86:ななしへたぐらま ◆XcB18Bks.Y
07/08/07 19:26:07
>>85
文字列グリッドのすべてのセルの文字列をカラにするということですか?
特にそういうメソッドはないので手でカラにしてください.

{ 文字列グリッドのすべてのセルの文字列をカラにする手続き }
procedure ClearGridCells(Grid: TStringGrid);
var
 iRow, iCol: integer;
begin
 for iRow := 0 to Grid.RowCount - 1 do
  for iCol := 0 to Grid.ColCount - 1 do
   Grid.Cells[iCol, iRow] := '';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ClearGridCells(StringGrid1);
end;

87:デフォルトの名無しさん
07/08/07 20:28:16
これでもいけそうだぞ。
for I := 0 to Grid.RowCount - 1 do Grid1.Rows[I].Clear;



88:デフォルトの名無しさん
07/08/07 21:27:39
>>87
オレもそうしている。
でも、行の削除なんかのときに1行削除するたびにクリアしないと、
再度行を増やしたときに前の値が出てくるのは何でなんだろう。

89:デフォルトの名無しさん
07/08/07 23:04:30
DataBaseからデータを取得してグローバル配列変数List:array[1..8]of TListに格納しているのですが、
リストにあるデータを使おうと思ったら変な値が出てきます。
どうしたらいいのでしょうか?
環境はにD5Entです。

90:デフォルトの名無しさん
07/08/07 23:12:07
>>89
・「変な値」とは具体的に何?
・値を取得するコードは?
・TListはちゃんとCreateしたか?

91:89
07/08/07 23:19:39
>>90

変な値とは次に使うSQL文です。

値を取得するコードは次に書きます。

TListはちゃんとFrameのInit(FormのShowイベントで呼ぶ)関数でCreateしています。

92:89 1/2
07/08/07 23:34:36
>>90

SQL.Add('SELECT BEID,GAKKOID');
//集計条件
if SMC.F_KT_DispType=0 then begin //
SQL.Add(',MODEL');
end else begin //
SQL.Add(',G_TYPE');
end;
SQL.Add(',sum(SEITO) FROM V_OPE_U11 WHERE BEID=:b AND GAKKOID=:ga');
SQL.Add(' GROUP BY OWNER,GAKKOID');
//集計条件
if F_KT_DispType=0 then begin //
SQL.Add(',MODEL');
end else begin //
SQL.Add(',G_TYPE');
end;
ParambyName('b').AsInteger := BEID; //
ParambyName('ga').AsInteger := GAKKOID; //
Open;


93:89 2/2
07/08/07 23:37:19
>>90

while not EOF do begin
List.Add;
p.F_KT_OWNER:=FieldByName('BEID').AsInteger;
p.F_KT_STORE:=FieldByName('GAKKOID').AsInteger;
//集計条件
if F_KT_DispType=0 then begin //
p.F_KT_MODEL := FieldByName('MODEL').AsInteger; //
p.F_KT_GAKKO_TYPE_CD := '';
end else begin //
p.F_KT_MODEL := -1;
p.F_KT_GAKKO_TYPE_CD := FieldByName('G_TYPE').AsString; //
end;
p.F_KT_SEITO := FieldByName('SUM').AsInteger; //
List.Add(p);
NEXT;
end;

大体こんな感じです。


94:デフォルトの名無しさん
07/08/07 23:56:18
Jw_cad for Windows のクロックメニューってどうやって実現しているのでしょうか?

95:デフォルトの名無しさん
07/08/07 23:57:05
何かクセェ
List.Add;
p.

96:デフォルトの名無しさん
07/08/08 00:04:17
>>89
うん。Listとpが怪しい。
宣言は?
pは何処で入れてる?

97:89 2/2
07/08/08 00:27:52
>>92の前に
procedure TDM1.Get_SeitoSuu(Cond: TGakkoCond_Rec;
List: TList);
var
p: PGakko004_Rec;
beginで
PGakko004_Rec = ^TGakko004_Rec;
TGakko004_Rec = record
F_KT_BEID: Integer; //
F_KT_GAKKOID: Integer; //
F_KT_MODEL: Integer; //
F_KT_GAKKO_TYPE_CD: String[1]; //
F_KT_SEITO: Integer;
end;
です。

98:デフォルトの名無しさん
07/08/08 01:23:52
>>97
New

99:デフォルトの名無しさん
07/08/08 01:45:05
クラスにして、Create で生成し、TObjectList で管理することを勧める。
1レコードごとに、New でポインタをつくってメモリ確保しなけりゃ
ならないなんて、非効率すぎだし、メモリリークも心配。それに、そのコードを
見ると、ポインタそのものも理解してるのか疑問。

100:89
07/08/08 02:02:23
>>98 List.Add;はNew(p)でした。
>>99 14430000件以上もレコードがあるのですが大丈夫でしょうか?
>>100Get_Seitosuuは今オーバーロードして新しいの作り始めたんですけど、
そっちのほうをコピーしたのでList.Addが二回も出てきちゃったみたいです。

101:デフォルトの名無しさん
07/08/08 02:13:59
>>100
あらかじめ件数分かってるなら配列でいいんじゃない?
すっきりするしポインタで悩むこともなくなる
ちなみに>>99の言ってることは間違ってるから無視していいよ
クラスにしてもCreateする度に内部でメモリ確保してるわけで変わらない
むしろ余計なものが付く分そんなに件数あると有意な差が出てくる

ただその前に、全部メモリに読み込む必要あるの?300MB弱くらいにならない?
SQLで完結しそうにも思えるんだけど

102:89
07/08/08 02:27:26
>>101
データを一覧表とグラフに集計してまとめるんです。
横浜市の学校で1990年以降に出来た小学校限定とか、
関西地区を除く地区の生徒数2000人以下の学校限定とか、
これを検索ボタンを押したら、条件変更ボタンですぐに一覧表とグラフを変えないといけないんです。
2秒以内に表示しなおすことが前提なのでいちいちSQLを使って取得している時間が無くて、
メモリに確保したままにしてグローバルから読み込もうと思ったんです。

103:デフォルトの名無しさん
07/08/08 02:27:37
> 14430000件
ふつうは、DB使う罠w

104:89
07/08/08 02:40:36
>>103 使ってますよ。
SQLで取得したデータをどうするかで悩んでるんです。

105:デフォルトの名無しさん
07/08/08 02:41:15
>>102
やっぱりSQL発行すれば済む問題じゃないかな
ひょっとしてDBから1件ずつ取得して比較してると時間がない、なんて思ってるのかもしれないけど、
SQLってのはそういう条件で絞り込んで結果だけ返してくれる道具ですよ?
コード見てる限り高速検索アルゴリズムを自分で実装するってわけでもなさそうだし、
素直にSQL出しといた方がよっぽど早いかと思われます。

106:89
07/08/08 02:47:00
>>105 SQLは使ってますよ。
SQL使って取得したデータをいち早く表示するために考えたのが、
「取得したらグローバル変数に格納する」なんです。
ですけど、いちいちSQLでデータを取得して書き込みだと、
データを一時変数に代入するのに時間がかかりすぎていて困っているのです。
条件ボタンを押すたびに一千万件以上のデータをSQLから取得していくと、
時間がかかりすぎといわれるのです。

107:デフォルトの名無しさん
07/08/08 03:01:33
バックエンドにDB使ってて、その中身をまんま持ってきて、
フロントエンドの言語のデータ構造に入れ込む状況が思い浮かばん

108:89
07/08/08 03:15:30
>>107
DBへのアクセスは専用のフォームを使っているんです。
ですけどデータ表示とかはおのおののフレームが担当しているんです。
DBへアクセスした後そのフォームが別のグリッドやリストビュー、グラフにアクセスするのはおかしいし、
引数に渡すのも不自然だし、フレームに書いていくと修正が大変なので。

109:デフォルトの名無しさん
07/08/08 04:27:16
>>106
どうも読んでる限りではDBを使いこなせてないみたいだね
SQLは色んな書き方があるから、まずはそれを学ぶといいよ
SQLってのは単にレコードを1件1件読むためのものじゃない

また、1000万件以上の処理ということに変な思い込みを持ってるようだけど、
DBを使う場面ってのは大抵それと同じかそれ以上の件数のレコードを扱うよ
だからそれぞれのDBだってほとんどの場合それに耐えうるように設計されてる

110:89
07/08/08 04:38:09
>>109
分かりました。もうちょっとSQLも勉強したいと思います。
そういえば此処に来たら何を調べていたのか忘れていましたが、
今思い出しました。

TListだとSQLに変わるので、TObjectListを使おうと思ったのですが、
var
Ob:TObject;
begin
Ob:=TObject.Create;
ObjectList1.Add(Ob);
Ob:=TObject.Create;
ObjectList1.Add(Ob);
end;
と言うように同じ変数にCreateを複数回も使ってもエラーとか言わないでしょうか?
また前にObjectListにAddしたオブジェクトは破棄されたり変な値が入らないでしょうか?
それと共にグローバルにおいて、関数が終了したら不正なデータに代わるとか無いでしょうか?

111:デフォルトの名無しさん
07/08/08 08:34:19
Q 同じ変数にCreateを複数回も使ってもエラーとか言わないでしょうか?
A 同じ変数にCreateしたものを複数回代入してもエラーにはならない。 
  ただメモリーリークに注意しなければいけないが、この場合は他の管理方法に委ねているので大丈夫

Q 前にObjectListにAddしたオブジェクトは破棄されたり変な値が入らないでしょうか
A Createによりヒープにオブジェクトが作成され  Addでその参照が管理されるだけなので、それは杞憂

Q 関数が終了したら不正なデータに代わるとか無いでしょうか?
A オブジェクトはヒープにしか作成されない(スタックには作成されない)ので杞憂


なおTObjectのインスタンスを作成してるけど、これは単なる例?
TObjectList を使うより、record を使って型を作り
array of TMyRecord ; のような、動的配列の方が扱い易いよ


112:デフォルトの名無しさん
07/08/08 11:07:18
2秒以内か。データベースサーバー何使って、Delphi側はからデータベースに接続するのに
BDE使ってるの?ADO使ってるの?BDEのこと忘れたけど、ADOならTADODataSetのCacheSizeプロパティで
一度に取り出す行数制限できるからそれ使えば?一度に1千万のデータなんか画面に表示できないから、
一度に1千万のデータなんて読み込まなきゃいいだけ。

113:ななしへたぐらま ◆XcB18Bks.Y
07/08/08 11:45:03
>>110-111
TObjectListはデフォルトで項目オブジェクトを所有します.
つまりリストをクリアしたりオブジェクトを解放すると全項目のオブジェクトを解放します.

TListのような参照するだけのリストを作りたい場合は
コンストラクタで引数にFalseを指定するか
(ナントカ := TObjectList.Create(False) )
生成後にOwnsObjectsプロパティにFalseを代入すると
(ナントカ.OwnsObjects := False )
所有しなくなります.
つまりリストをクリアしたりオブジェクトを解放しても項目のオブジェクトは解放されなくなります.


114:デフォルトの名無しさん
07/08/08 12:11:06
Turbo Delphi Explorerで
Delphi 7と同じ規格?で作ることできますでしょうか?

115:89
07/08/08 12:37:31
>>111
詳しい情報有難うございます。
TObjectは例で実際には構造体を使うのですが、動的配列のほうが速いのですか?

>>112
FireBirdとIBQueryを使っています。

>>113
標準だと参照型じゃないんですね。
参照型だと関数が終了した時に代入していたローカル変数をうやむやにして、
変な所を参照してしまうみたいで。でもそんな心配ないのですよね?

116:ななしへたぐらま ◆XcB18Bks.Y
07/08/08 15:35:15
>>115
Delphiのオブジェクト変数(キーワードclassを使うもの)は常にポインタです.
つまりDelphiのオブジェクト変数はそのオブジェクトの場所を覚えているに過ぎません.

そしてTObjectListはオブジェクトの場所の一覧です.
TObjectListのAddメソッドではオブジェクトの場所が渡されて内部のリストにこの場所を書き足します.

たとえば以下のようなコードだと

TMyForm = class(TForm)
private
 FList: TObjectList;
 procedure Nantoka;
end;

procedure TMyForm.Nantoka;
begin
 obj := TMyObject.Create; // ①
 FList.Add(obj); // ②
end;

①でオブジェクトが生成されてその場所が変数objに書き込まれます.
②でリストにそのオブジェクトの場所が渡ります.
メソッドNantokaを抜けると変数objは消滅しますがオブジェクトそのものは残ります.
(目的のビルの場所を書いたメモが捨てられてもそのビルが消滅するわけではないのと同じです)

リストはオブジェクトの場所しか見ていないので
変数objが消滅しても見てはいけないところを見てしまう心配はありません.

これはリストが項目オブジェクトを所有する場合もしない場合も全く同じです.


117:デフォルトの名無しさん
07/08/08 15:38:02
>>114
 コンパイラそのものはD7から殆ど変わってない。ライブラリも殆ど同じ。

>>115
>TObjectは例で実際には構造体を使うのですが、動的配列のほうが速いのですか?

いちいちオブジェクトをCreateするより、構造体の動的配列の方が一度にメモリを確保するから
多少速度も上がると思うよ。

サイズが判らない場合でも、動的配列は最初に多めにとって、足らなくなったらまた多めにとって
というようにやればいい。

118:89
07/08/08 15:48:00
>>116
だと本来出てこない値が出てきてしまうのは何故でしょう?

>>117
procedure TFrame1.ListSwitch(List1: TList; var List2: array of TSeitoSuu_Rec);
var
i:integer;
p:PSeitoSuu_Rec;
begin
SetLength(List2,List1.Count);←互換性の無い型です。
for i:=0 to List1.Count-1 do
begin
p:=POPE004_Rec(ListA[i]);
list2[i]:=p^;
end;
end;

と成ってしまいます。
どうしたら再定義できますか?

119:デフォルトの名無しさん
07/08/08 15:55:18
>>118
関数の引数でソレをやったら、動的配列ではなくなる
Type TArraySeitoSuu_Rec = array of TSeitoSuu_Rec; と動的配列型を定義しておいてから

procedure TFrame1.ListSwitch(List1: TList; var List2: TArraySeitoSuu_Rec);

とやらないと


120:89
07/08/08 15:59:06
>>119解決しました。
皆さん有難うございました。

121:デフォルトの名無しさん
07/08/08 16:06:21
こんなレベルの人が学校関係のDB扱う仕事やってんのか…
そりゃ情報流出しまくるよなとおもた

122:デフォルトの名無しさん
07/08/08 16:19:47
引数で 動的配列のような格好の定義が出たら、ソレはオープン配列パラメータだ

123:デフォルトの名無しさん
07/08/08 19:11:06
また匿名でコテハン叩きか

キャノンかダかな?



124:デフォルトの名無しさん
07/08/09 10:19:34
Delphi4 Pro を使ってます。
それでKOL(EXEのサイズが小さくなるやつ)を使いたいと思って
KOLとMCKをDLして同じフォルダに解凍、「開く」からDelphi4用の
パッケージ(.dpk)を開き、インストールを選択。
でもKOLaddが無いと怒られてしまった。
オフィシャルからKOLadd.zipを何度DLしても
解凍しようとすると「破損してる」って言われるし・・・

どこが間違ってるんでしょうか?

125:デフォルトの名無しさん
07/08/09 17:00:21
メモ:

TNT Unicode Controls 配布場所

Silverpoint Development
URLリンク(club.telepolis.com)

URLリンク(club.telepolis.com)



126:デフォルトの名無しさん
07/08/09 17:03:09
>>114
Explorer版は、コンポーネントのインストールができないので、
Delphi7で、コンポーネントを使っている場合は、そのままは移植できない。
THoge.Create(Self)のような、動的生成はできるので、無理やり移すことは一応可能。

(Explorer版ではない有償版や、同規格のDelphi2006では、ほぼ修正なしでコンパイルは通る)

127:デフォルトの名無しさん
07/08/09 17:05:46
>>124
ちょっと聞きたいのですが、
KOLってどういう理由で使いたいのですか?
ただ、EXEが小さくなる、という理由だと、はっきりいって、
茨の道を火を付けて歩くことになるので、やめた方がいいです。

128:デフォルトの名無しさん
07/08/09 18:49:40
コンポーネントのツールパレットを、キーボードで、検索したいのですが、
部分一致で検索する方法はなかったでしょうか?
通常は前方一致だけのようです(というか、THogeなら、hogeにヒットする)

環境は、Delphi2006

129:デフォルトの名無しさん
07/08/09 21:18:58
>>127
だな。
UPXMask を勧めとく

130:ななしへたぐらま ◆XcB18Bks.Y
07/08/09 22:27:40
>>118
本来出てこない値について結局わからなかったので適切な答を出せませんでした(すいません).


131:89
07/08/09 23:55:07
>>130
本来出てこない値とは取得したデータが>>97のレコードだった場合に、
本来、Modelは-1~1しかないのに適当な値(118927354等)や
>>97では書き忘れていたんですけど、F_KT_GakkoMei:String;があって、
そのF_KT_GakkoMeiに取得用SQLがそのまま書かれていたりするんです。

解決したんですが、新たな所でつまずいてここにもう一度来ました。
TFrame1のプライベート静的配列を宣言したんです。
ListA:array[1..3]of char;と言う具合に
そして>>118のListSwitchの中で
ListA[0]:='0';
ListA[1]:='T';
ListA[2]:='F';
代入するようにしてButton1Clickの中でListSwitchを呼ぶのですけど、
Button1Clickの関数を一度通り抜けるとListFは('','','','','','','',...)となって、
次にアクセスしようとするとおかしくなるのです。
解決する方法は無いのでしょうか?
どうか教えてください。

132:デフォルトの名無しさん
07/08/10 00:09:13
ListFって何?

133:89
07/08/10 00:22:57
>>132
ListAでした。結構打ち間違えますね。

134:デフォルトの名無しさん
07/08/10 00:33:55
Button1Clickからその後のListAの確認するまでの間でぶっ壊してるんだろ
コードも晒さずに解決法など出るわけ無いと何度

135:デフォルトの名無しさん
07/08/10 00:34:44
あとコード出す時は再現できる最小のコードでな

136:デフォルトの名無しさん
07/08/10 04:03:24
>>131
ご自分で宣言した添え字をお忘れですか?

137:デフォルトの名無しさん
07/08/10 04:38:35
>>134-135
わかったか?能無しは黙ってろってことだ。

138:ななしへたぐらま ◆XcB18Bks.Y
07/08/10 12:11:35
>>131
>>118のコードですが
3バイトの文字配列であるListAの内容を無理矢理POPE004_Rec型だと解釈させていることになります.
POPE004_Rec型は恐らくTOPE004_Recっていうレコード型を定義していて
それに対するポインタ型(レコードのある場所を指す型)なのだと思いますが

> ListA[0]:='0';
> ListA[1]:='T';
> ListA[2]:='F';

という文字の並びを4バイトのアドレスだと解釈すると$??465430番地になります.
当然この場所は意味をなしませんからList2[i]にはでたらめな値が入っていると思われます.

このコードはコピー元がでたらめになるだけなのでListAの内容を壊しているわけではないと思われます.
しかし似たようなミスをほかの場所でもやらかしてListAの内容を壊している可能性は低くないと思います.


139:デフォルトの名無しさん
07/08/10 15:22:57
フォームからドラッグしてデスクトップやエクスプローラにドロップする
処理はどうしたら良いんでしょうか?
エクスプローラからアイテムをドラッグしてフォームにドロップする
処理は彼方此方で見かけるんですが、その逆が見つかりません・・・

140:デフォルトの名無しさん
07/08/10 15:43:19
ドロップして単にショートカット を作るというような事なら、そのままマウスイベントで処理すればいい
ドロップして独自の動作をさせるものを貼り付けるというような事なら シェルエクステンションを作成しないといけない


141:デフォルトの名無しさん
07/08/10 17:04:51
みなさんは、
・配置したコンポーネント名:
・フォーム名:
・フォームのユニット名:
をどのように決めてますか?

コーディング規約に属すると思いますが、
参考までにお聞きしたく。
(どこかに記述あったかなあ?)

私の場合は、
・配置したコンポーネント名:TPanelなら、 HogePanel
・フォーム名:メインフォームなら MainForm、他、HogeForm
・フォームのユニット名:MainFormUnit、HogeFormUnit
としてます


142:128
07/08/10 17:27:44
Delphi 7以降の IDEの新機能
URLリンク(dn.codegear.com)

これによると、
URLリンク(dn.codegear.com)
部分一致検索が標準でできるように見えるのですが、
どうやったらいいんでしょ・・・

143:128
07/08/10 17:42:45
こちらのプラグインで部分一致検索はできるようですが、
>>142のアニメーションが解せないなあ・・・

D_DevLog DDevExtensions
URLリンク(ddev.blog46.fc2.com)

DelphiSpeedUp Delphi/BCB/BDS IDE plugin
URLリンク(andy.jgknet.de)



144:デフォルトの名無しさん
07/08/10 18:00:53
デルファイはもうやめtロケ、最近、ザイリンクスのハードウエアみたいなプログラミング
が面白い

145:デフォルトの名無しさん
07/08/10 18:24:56
確かに VHDLはpascalに似てるけど、このスレで話題にするより他のスレでお願いね

146:デフォルトの名無しさん
07/08/10 19:16:13
ヘルプの表示項目をカスタマイズすることはできないでしょうか?
具体的には、Win32のDelphiだけを表示したいです。

WinHelpの時代は、手動でカスタマイズできたのですが・・・

環境は、Delphi2006です。

147:146
07/08/10 19:22:10
メニューの「ヘルプ」「ページのフィルタの編集」で、
デフォルトの表示を編集しようとしたのですが、フィルタなしを
 ("DevLang"="Delphi") OR ("DocSet"="bds_Win32")
に、カスタマイズして、Saveをしても、

>このページのスクリプトでエラーが発生しました。
>'undefined'は、Nullまたはオブジェクトではありません。

と出てしまいます。


148:146
07/08/10 19:40:48
("DevLang"="Delphi")
だけにしたら、Saveできたけど、
空欄にしたり、変更するとエラーが出て、もどせなくなってしまった。

orz

「フィルタなし」を空欄にしてSaveした場合
---------------------------
Microsoft Internet Explorer
---------------------------
Filter cannot be saved without a definition
---------------------------
OK
---------------------------

("DocSet"="bds_Win32")で、Saveした場合
---------------------------
Microsoft Internet Explorer
---------------------------
All keywords and attributes must be enclosed with in double quotes ( " ).
Please correct your text for this filter definition.
---------------------------
OK
---------------------------
ちゃんと " つけてるよ・・・ orz

149:146
07/08/10 19:50:24
試行錯誤していたら、うまく設定を保存できました。

「ページのフィルタの編集」で、
Newして、
 ("DevLang"="Delphi")
と書いて、Save Asで、「(デフォルト)」と書いて保存したらうまくいきましたヽ( ´ー`)ノ
括弧()つけると最初の項目になり、デフォルトで選択されるようです。

さらに、
("DocSet"="bds_Win32") OR ("DevLang"="Delphi")
にすると、うまくエラーが出ずに保存できました。
(エラー出たりでなかったりするので、うまくいかないかもしれませんけど)

150:デフォルトの名無しさん
07/08/10 22:26:19
>>142-143
つ インクリメンタルサーチ

151:デフォルトの名無しさん
07/08/10 22:54:52
ドキュメントのない開発環境はドキュンだな・・・

152:デフォルトの名無しさん
07/08/10 23:01:32
座布団一枚...

食え

153:デフォルトの名無しさん
07/08/11 05:06:14
>>139
OLE Drag&Drop

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

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

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

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


157:デフォルトの名無しさん
07/08/11 19:50:48
ドキュメントのない開発環境はドキュンだな・・・

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

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


160:デフォルトの名無しさん
07/08/11 21:03:30
すみません、2006でした。

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

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

163:デフォルトの名無しさん
07/08/11 22:30:02
ない。

164:デフォルトの名無しさん
07/08/11 22:31:11
そうですか
じぶんで描くしかないみたいですね

165:デフォルトの名無しさん
07/08/11 22:37:48
コンポーネントさがす

166:デフォルトの名無しさん
07/08/11 22:42:58
GDI+を使う

167:デフォルトの名無しさん
07/08/11 23:15:38
TImage は画像じゃないよ

168:デフォルトの名無しさん
07/08/12 10:29:47
URLリンク(www.asahi-net.or.jp)

169:デフォルトの名無しさん
07/08/12 12:08:42
TBigBitmapCanvas って塗りつぶしうまくいかないよね。

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

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

172:デフォルトの名無しさん
07/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
07/08/12 23:48:21
そして、サブスレッド内で、エラーが起きた場合
Synchronize で、メインスレッドでエラーをポップアップし、
Terminate; を呼び出しています。

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

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

174:172
07/08/12 23:49:04
あ、よく考えたら、

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

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

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

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

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

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

177:172
07/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:デフォルトの名無しさん
07/08/13 01:53:30
TTabControlのDragModeをdmAutomaticにすると
タブをクリックしても選択されないのは仕様ですか?
そうするとOnMouseDownやOnMouseUpイベントも呼び出されてないみたいだし、
自前でやるしかないんですか?

179:デフォルトの名無しさん
07/08/13 02:09:09
自前でやるのがプログラミングなんだぜ

180:178
07/08/13 02:17:21
>>179
そうですか・・・><

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

182:デフォルトの名無しさん
07/08/13 10:49:40
>>181
パスとおせよ。

183:デフォルトの名無しさん
07/08/13 13:18:40
>>182
すみません、通ってるようです。

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

185:デフォルトの名無しさん
07/08/13 16:13:30
URLリンク(rsdn.ru)
ページみてるんですが、

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:デフォルトの名無しさん
07/08/13 16:25:16
いや別にいやだったら本人の好きなようにやればいいんじゃないの?

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


188:デフォルトの名無しさん
07/08/13 16:28:05
>>185
理由はそのページの説明文に書いてあるぞ

189:187
07/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:デフォルトの名無しさん
07/08/13 16:43:46
関数ポインタの使いどころって意味なら
C言語の例だけどqsortで検索してみたら。

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

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

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:デフォルトの名無しさん
07/08/13 23:27:52
一番身近な関数ポインタは「イベント」ですわ。OnClickとか。





194:Delフサギコ ◆A6VzDeLphI
07/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
07/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:デフォルトの名無しさん
07/08/14 11:39:22
指定のアプリーションに、アクティブにせずに、キー入力を送りたいのですが、
可能でしょうか?
可能ならば、どのようにやったらよいのでしょうか?
検索単語でもいいので、ご享受ください

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

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

198:デフォルトの名無しさん
07/08/14 13:58:05
>>196
sendmessage

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

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


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

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

202:デフォルトの名無しさん
07/08/14 20:44:16
こんにちは。

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

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

203:202
07/08/14 20:51:30
わかりました。

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

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

204:デフォルトの名無しさん
07/08/15 00:32:27
また自問自答か・・・

205:デフォルトの名無しさん
07/08/15 00:45:58
自ら成長する
いいことじゃないか

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

207:デフォルトの名無しさん
07/08/15 02:45:07
Delphi and Programming
URLリンク(d.hatena.ne.jp)

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

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

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

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



210:デフォルトの名無しさん
07/08/15 10:59:21
やったじゃん!

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

212:デフォルトの名無しさん
07/08/15 14:26:01
ありゃ核爆

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

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

Components > Forms > State savers. Torry's Delphi Pages
URLリンク(www.torry.net)


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

DelphiDabbler.com || Window State Components - Save and restore window size, state and position
URLリンク(www.delphidabbler.com)


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

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

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

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

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

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

219:デフォルトの名無しさん
07/08/15 22:38:48
>>216
簡単な用途ならこーどでいいんでないかい?

220:Delフサギコ ◆A6VzDeLphI
07/08/16 00:32:02
           _____________
   ∧,,∧    />>213さん
  ミ,,゚Д゚彡 < 漏れは自作
   U  つ   \
 @ミ  ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪ 

DelFusa Library - Delphi OpenSource - DelFusa Floor
URLリンク(delfusa.main.jp)
の、FormPosition.pas

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

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

222:デフォルトの名無しさん
07/08/16 00:35:37
また自問自答してるよ

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

224:デフォルトの名無しさん
07/08/16 03:43:28
それはそれで

225:デフォルトの名無しさん
07/08/16 05:20:50
みじめすぎ

226:悲劇のヒロイン
07/08/16 05:26:32
ありがとう

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

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

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

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

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

228:デフォルトの名無しさん
07/08/16 08:32:18
おめでとう

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

230:|
07/08/16 09:01:45
LabelのColor property使ったことなかたから気付かなかった。
よくわからんだが、意味のないものになってるの?

>>220
サンクスです。

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


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

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


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

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

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



232:デフォルトの名無しさん
07/08/16 11:24:21
はまってごらんよ、あ~の~角を~

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

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

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

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

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





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

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

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


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

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

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

237:236
07/08/16 21:50:23
AppHandleにTApplicationのHandleが入っているとして、

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

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

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

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

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


241:デフォルトの名無しさん
07/08/17 01:10:04
2006→7?

242:236
07/08/17 01:29:51
第6章 ウィンドウの階層について
URLリンク(homepage2.nifty.com)

これ見て、

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

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

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

243:236
07/08/17 01:38:10
なんという勘違い/(^o^)\

第6章 ウィンドウの階層について
URLリンク(homepage2.nifty.com)

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

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

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

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

明日試してみます

244:Delフサギコ ◆A6VzDeLphI
07/08/17 01:48:28
>>236-237さん

DelFusa Library - Delphi OpenSource - DelFusa Floor
URLリンク(delfusa.main.jp)
   ∧,,∧
  ミ,,゚Д゚彡
  ,ミ'  ミ
~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
07/08/17 01:49:24
   ∧,,∧   深夜なのに
  ミ,,゚Д゚彡  気温が暑いっすね~
  ,ミ'  ミ
~OUUつ

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

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

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


246:Delフサギコ ◆A6VzDeLphI
07/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:デフォルトの名無しさん
07/08/17 03:57:44
ListViewのOwnerDataをTrueにすると
CheckboxesをTrueにしてもチェックボックスは表示されません
自分でチェックボックスを描画するんですか?><

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

実験してみるす

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

>>246
マジスカ

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

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

251:デフォルトの名無しさん
07/08/17 19:06:22
中学生からやりなおせ

252:デフォルトの名無しさん
07/08/17 19:50:44
郵便番号

253:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/17 20:41:15
ほう

255:デフォルトの名無しさん
07/08/17 20:49:05
stringlist.count
case文

美しくないな

256:ななしへたぐらま ◆XcB18Bks.Y
07/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
07/08/17 23:30:05
    ,,,,,,,,,,,,,,,∧,,∧   /もちろん
  ~′,,,,,,,,,,ミ,,゚Д゚彡<  わざとやがな
   UU"""" U  ⊃  \

いやあ、ご無沙汰っす。元気してます~?
暑いっすねー。



258:デフォルトの名無しさん
07/08/18 00:22:00
初心者スレを荒らすなよ・・・

259:デフォルトの名無しさん
07/08/18 01:57:00
文字列とか動的配列は参照カウントとか使ってるのに、
なんでクラスのインスタンスはわざわざFreeしなくちゃならず、
しかもC++みたいにスタックに置いたりできないのですか?

260:デフォルトの名無しさん
07/08/18 02:46:29
文字列や動的配列はCopyOnWriteの機能が特に有効に使える型なので標準で実装されているが、
クラスは必ずしもそうとはいえないので各々のクラスの実装に任せている。

スタックに置けないのは、メモリの確保をクラスに委譲する設計を採用している為。

261:デフォルトの名無しさん
07/08/18 04:28:45
理由を聞いてるんじゃないでしょ。

「できません」が回答。

262:デフォルトの名無しさん
07/08/18 04:32:27
誰か2007洒落にください

263:259
07/08/18 04:43:25
>>261
理由を聞いているんですが、何か?

264:デフォルトの名無しさん
07/08/18 05:05:07
>>261
文字列とか動的配列は参照カウントとか使ってるのに、
なんでクラスのインスタンスはわざわざFreeしなくちゃならず、
~~~~~~
しかもC++みたいにスタックに置いたりできないのですか?


265:デフォルトの名無しさん
07/08/18 06:10:51
>文字列とか動的配列は参照カウント
文字列や動的配列は変数の寿命をそのままメモリ確保の寿命と出来る。
なお、俺がソースを見た範囲では参照カウントは使われていないようだ。
代入時に中身をコピーしてるように見える

クラスの場合、windowsハンドルとかのリソースを持ってる場合があり、
開放時期を自分でコントロールしたい場合も出てくるのと、
自動開放するためには、その参照の代入で 複数の変数が参照してる場合もあり、
参照カウンタなどの管理機構が必要になる。 
なおインターフェース型では参照型でメモリ開放管理が出来るようになっている。

>しかもC++みたいにスタックに置いたりできないのですか?
これは単純に面倒だったからだろう。 その代わりにC++のようにドットと-> を混在させなくてすむ。
try finally の構文もあるし、ユニットという単位を持っていて、ユニット単位にinitialization や
finalizationも書けるので、メモリスコープへの出入りで自動的に
コンストラクタデストラクタを呼ぶような仕掛けを作る必要は無かったのだろう

266:デフォルトの名無しさん
07/08/18 06:25:45
よくもまぁ適当なことが書けるもんだなぁ・・・

267:デフォルトの名無しさん
07/08/18 06:26:48
>>265
>代入時に中身をコピーしてるように見える
え?StringってCopy on Write じゃないの?

268:デフォルトの名無しさん
07/08/18 06:30:05
StringはCopy on write
動的配列は、普通の参照カウンタ

269:デフォルトの名無しさん
07/08/18 06:35:37
実装が古い

だけでしょ。

270:デフォルトの名無しさん
07/08/18 06:40:36
Stringと動的配列はクラスベースにして
'foo'.UpperCase // = 'FOO'
[1, 4, 3].Add(6).Sort // = [1, 3, 4, 6]
とかできるようにしてもらいたいね。

271:デフォルトの名無しさん
07/08/18 07:43:28
>>269
いやC++のほうが古いよ。
C++の二の舞にならぬようこの方法になった。

272:デフォルトの名無しさん
07/08/18 08:18:00
知ったか乙

273:デフォルトの名無しさん
07/08/18 08:42:09
文字列の構造は
StrRec = packed record
  allocSiz: Longint;
  refCnt: Longint;
  length: Longint;
end;
この後に文字列が続いている。 基本的に、メモリ管理は参照カウンタ方式

文字列を代入すると system.pas の _LStrLAsg _LStrAsg というアセンブラ関数が呼ばれるので確認よろしく

274:デフォルトの名無しさん
07/08/18 08:54:15
知ったか乙

275:デフォルトの名無しさん
07/08/18 12:05:55
長い文字列は、Delphi2 から、Interface 型は Delphi3 から、動的配列は
Delphi4 か 5 からですね。だから、スマートポインタ関係はここ10年で
実装された。クラス実装を可能にしたのは、Delphi 以前の直前のバージョン。
Delphi は、Pascal の文法は拡張してきたが、変更はしていないので、
古い実装はそのままなんだよ。それが、つぎはぎ感を感じさせるが、一方、
あるていど使いやすさにも通じている。OOPL として不完全なのも同じ。

276:デフォルトの名無しさん
07/08/18 16:35:40
>>273
allocSizの部分ってあったっけ?
その後はあったと思うけど

277:デフォルトの名無しさん
07/08/18 18:27:38
>>275
知ったか乙。

278:デフォルトの名無しさん
07/08/18 19:27:39
>>277
知らない乙

279:デフォルトの名無しさん
07/08/18 19:36:05
しったかならまだいいが、おすた化しないようにな
URLリンク(genpin.com)


280:253
07/08/18 22:19:23
>>256
ありがとうございます。激しく感激。

281:デフォルトの名無しさん
07/08/18 22:45:10
var
S : TStringList;
begin
while True do S:=TStringList.Create;
end;

282:デフォルトの名無しさん
07/08/18 23:19:59
AnsiIndexTextって言うのを使いたいんですが、
2つ目のパラメータの意味というか設定の仕方が
分かりません。
string型の変数を渡してもだめって言うのは分かったのですが、
じゃあどうすればいいのかがさっぱりです。


283:デフォルトの名無しさん
07/08/18 23:32:05
>>281
こんな感じに使う。
AnsiIndexStr('うう', ['ああ', 'ううい', 'うう', 'ええ']);
詳しくはヘルプの「オープン配列コンストラクタ」を参照のこと。

284:デフォルトの名無しさん
07/08/19 00:00:59
>>280
他の奴にも礼言ったれよ死ね

285:デフォルトの名無しさん
07/08/19 08:19:09
つまりはつぎはぎのないC#が最高なのです。
Pascalは糞です。いますぐやめるべきです。

286:デフォルトの名無しさん
07/08/19 09:01:12
まあPascalが廃れC#が主流になったとしても
VBしか使えない人がが主役になることはない訳だが。

287:デフォルトの名無しさん
07/08/19 14:19:13
>>283
THX. よくわかりました。

288:デフォルトの名無しさん
07/08/19 21:26:42
while True do ShowMessage('あひゃ');

289:デフォルトの名無しさん
07/08/19 22:41:16
>>285
 おまいは鮮人か?


290:デフォルトの名無しさん
07/08/19 22:48:11
そっとしておいてあげてください。

291:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/20 09:47:50
ある文字列の中に0~9、a~fの文字が使われていればTrue、それ以外の文字
が使われている場合はFalseを入れるプログラムを作りたいのです。
どうかご教授よろしくお願いします。

293:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/20 10:00:01
>>293,>>294
御二方ともありがとうございます。
早速試してみますね。

296:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/20 19:02:33
try
 raise EMyError.Create('foo');
except
 on E: EMyError do
  self.error := E; // インスタンスを開放せずにerrorにセット。後でfreeなんてことは出来ませんか?
end;

299:デフォルトの名無しさん
07/08/20 19:13:23
こんにちは。
Delphi7で、Excelに書き込まれた値を読むプログラムを作成します。
ユーザー側のExcelのバージョンが統一されていないため、
バージョン依存しないようにプログラムを作成したいのです。

VBだと、ExcelのDLLに対する参照設定を行わずに

dim objExcel as Object
Set objExcel = CreateObject("Excel.Application")

というようにできるのですが、
Delphiではどのように行えばよいのかお知恵を拝借させてください。

"Delphi レイトバインディング"などで検索したのですが、
見つけることができませんでした。
お力をお貸しくださいませ。
どうぞよろしくお願いします。

300:デフォルトの名無しさん
07/08/20 20:17:03
>>299
Delphi Excel CreateOleObject

これでぐぐれば色々でてくるから参考に汁

301:デフォルトの名無しさん
07/08/20 20:25:39
>>300
参考になるサイトがわんさか出てきました。
これでいけそうです♪
ありがとうございます!!


302:デフォルトの名無しさん
07/08/20 22:10:17
>>298
raise した分は勝手に破棄されるので㍉
同じ例外オブジェクトをもう一度 raise 無しで作ればおk

303:Delフサギコ ◆A6VzDeLphI
07/08/20 22:22:48
>>292-296
          _______________
   ∧.,,∧   /そこで、前にも紹介した
  ミ.*゚Д゚彡< CheckStrInTableですよ。
  ミ つ目(ミ . \
~ミ,,O,,,,,,つ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
いつでもどこでも、一度書いていれば再利用できて汎用的って素敵。ウットリ

URLリンク(delfusa.main.jp)

type TInTable = (itUnknown, itAllInclude, itAllExclude, itPartInclude);
function CheckStrInTable(const Str, Table: WideString): TInTable;

文字がテーブルに指定したもので
全部含まれている、全部含まれていない、一部含まれている
を判断できます。



304:デフォルトの名無しさん
07/08/20 22:25:46
   ∧.,,∧  
  ミ.*゚Д゚彡
  ミ つ目(ミ .
~ミ,,O,,,,,,つ   

305:Delフサギコ ◆A6VzDeLphI
07/08/20 22:34:38
            _____________
     ∧,,∧   /
    ミ,,゚Д゚彡<  ところでですね。
   'ミ つ旦(ミ~~ \___________
  ⊂ミ",, ,,ミ つ

delphi-fanさんところで、listviewの項目並び替え
テクがのっていますが
あたしは、メーラーでよくみかける
listviewヘッダの△▽マークを実装したいのですよ。

実装方法はわかっているんですが
これが、コンポーネント化誰かしませんか...

漏れ、もうコンポーネント化するとか、って
相当わすれちゃったので、誰か教えてくらさい。

Delphiでlistviewヘッダの△▽マークを実装方法は
日本語で非常に情報が少ないですが、この辺。

ListView?の?カラムクリックによるソート
URLリンク(hpcgi1.nifty.com)
URLリンク(delfusa.main.jp)



306:デフォルトの名無しさん
07/08/20 22:37:29
     ∧,,∧  
    ミ,,゚Д゚彡
   'ミ つ旦(ミ~~
  ⊂ミ",, ,,ミ つ

307:デフォルトの名無しさん
07/08/20 22:46:59
>>303
これはひどい

308:デフォルトの名無しさん
07/08/20 22:48:52
>>307
これはひどい

309:Delフサギコ ◆A6VzDeLphI
07/08/20 23:34:40

      ∧,,∧___   /最近、よーやく
    /ミ*゚Д゚ミ/\<  テストコードを
  /| ̄∪∪ ̄|\/  \同一ユニットに
    |____|/     いれるべきではないかなと
     ,,,,∪∪,,, ,,      きがちいた。


310:デフォルトの名無しさん
07/08/21 03:27:38
>>323
つまりどーすんの?

311:デフォルトの名無しさん
07/08/21 04:10:32
>>323に期待

312:デフォルトの名無しさん
07/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
07/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:デフォルトの名無しさん
07/08/22 00:02:43
うぅむ

315:デフォルトの名無しさん
07/08/22 00:16:25
procedure ahya;
begin
 ahya;
end;


316:デフォルトの名無しさん
07/08/22 00:26:31
うぅむ…。

317:312
07/08/22 00:43:17
そういやこれのネタ元どこだっけな?確か海外だったような希ガス。

318:デフォルトの名無しさん
07/08/22 16:55:31
TComboBoxでTMemoのModifiedみたいに、値が変更されたのかを知るにはどうすればいいのですか?

319:デフォルトの名無しさん
07/08/22 17:03:03
うぅむ…。

320:haru
07/08/22 17:36:28
はじめましてよろしくお願いします。

GetWindowやFindWindowを使って、ウインドウハンドルを取得し、
とあるソフトを自動的に操作したいのですが、
そのソフトが、確認の際にダイアログを表示してきます
(delphiでいうMessageDlgを使用している感じ)
その際、delphiのソフトは待ち状態になってしまうのです。

そのダイアログを消さないと操作が続かないのですが、
delphiのソフトからはどうにもこうにもできなくて困っています。

何かよい方法をご存知の方はいらっしゃいませんか?

321:デフォルトの名無しさん
07/08/22 17:42:23
ダイアログも自動的に操作すればいいじゃん

322:デフォルトの名無しさん
07/08/22 21:54:50
>>323に期待

323:デフォルトの名無しさん
07/08/22 22:07:59
テスト専用のプロジェクトを作るんでしょ。

>>320
OKボタンがウィンドウなら、OKボタンに対してWM_LBUTTONDOWNを送る。

324:デフォルトの名無しさん
07/08/23 07:03:08
>>320
SendMessage を使って操作したら、その操作の中で相手がダイアログを出すから処理が帰って来ないって事だよね?

ならPostMessageに変更したらどう?

325:haru
07/08/23 09:40:41
早速のお返事ありがとうございます。
>>321さん
ダイアログが出た瞬間、delphiのソフトは待ち状態になるので
ウィンドウが取得できないのです。
>>323
そのダイアログのウィンドウハンドルが取得できなくて悩んでいます。
>>324
そのとおりです。
PostMessageについて調べてみました。
確かにこれを使えばできそうな気がしますが、
その前に、出てきたダイアログのウィンドウハンドルが取得できません。
これは元のウィンドウから見てハンドルが決まってたりするんでしょうか?
ダイアログが出ていないときに、
ウィンドウハンドルやその中のボタンのハンドルは決まっているのでしょうか?
(ダイアログが出てしまうとdelphiソフトは何も調べられないので。。)

再度よろしくお願いします。

326:デフォルトの名無しさん
07/08/23 09:53:27
>>325 PostMessage に変更したら、処理は即座に帰って来るので
その後開かれるダイアログを検索する事は出来ると思うよ。

Delphiのbinフォルダに WS32.exe があるからコレをまず眺めてみたら?

327:デフォルトの名無しさん
07/08/23 14:25:42
TListの中身がFreeされているか判断したいとき
予めnilを入れておく以外の方法ってありますか?

328:haru
07/08/23 14:54:52
>>326
解決しました。
ありがとうございました。

またお世話になるかもしれないので、よろしくお願いします!!

329:デフォルトの名無しさん
07/08/23 15:41:34
>>327
難しく考えず、ポインタも所詮数値なんだから
数値の正しさとは何か、を追求すればおのずと答えが出るじゃろ

330:デフォルトの名無しさん
07/08/23 15:45:23
コンソールアプリケーションを用いて、
1 4 9 16
2 3 8 15
5 6 7 14
10 11 12 13
17 18 …
と書くプログラムを作りたいのですが、よく分かりません。
分かる方、教えてください。



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch