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


116 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/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); // A
end;

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

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

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


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

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

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

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

118 名前:89 [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 15:55:18 ]
>>118
関数の引数でソレをやったら、動的配列ではなくなる
Type TArraySeitoSuu_Rec = array of TSeitoSuu_Rec; と動的配列型を定義しておいてから

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

とやらないと


120 名前:89 [2007/08/08(水) 15:59:06 ]
>>119解決しました。
皆さん有難うございました。

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

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

123 名前:デフォルトの名無しさん [2007/08/08(水) 19:11:06 ]
また匿名でコテハン叩きか

キャノンかダかな?



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

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



125 名前:デフォルトの名無しさん [2007/08/09(木) 17:00:21 ]
メモ:

TNT Unicode Controls 配布場所

Silverpoint Development
club.telepolis.com/silverpointdev/sptbxlib/support.htm#installation

club.telepolis.com/silverpointdev/sptbxlib/TntUnicodeControls.2.3.0.zip



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

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

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

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

環境は、Delphi2006

129 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 21:18:58 ]
>>127
だな。
UPXMask を勧めとく

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


131 名前:89 [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 00:09:13 ]
ListFって何?

133 名前:89 [2007/08/10(金) 00:22:57 ]
>>132
ListAでした。結構打ち間違えますね。

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



135 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 00:34:44 ]
あとコード出す時は再現できる最小のコードでな

136 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 04:03:24 ]
>>131
ご自分で宣言した添え字をお忘れですか?

137 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 04:38:35 ]
>>134-135
わかったか?能無しは黙ってろってことだ。

138 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 15:22:57 ]
フォームからドラッグしてデスクトップやエクスプローラにドロップする
処理はどうしたら良いんでしょうか?
エクスプローラからアイテムをドラッグしてフォームにドロップする
処理は彼方此方で見かけるんですが、その逆が見つかりません・・・

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


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

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

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


142 名前:128 [2007/08/10(金) 17:27:44 ]
Delphi 7以降の IDEの新機能
dn.codegear.com/no/article/34361

これによると、
dn.codegear.com/article/images/34323/ToolPalette.gif
部分一致検索が標準でできるように見えるのですが、
どうやったらいいんでしょ・・・

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

D_DevLog DDevExtensions
ddev.blog46.fc2.com/blog-entry-57.html

DelphiSpeedUp Delphi/BCB/BDS IDE plugin
andy.jgknet.de/dspeedup/index.php?page=DDevExtensions



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



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

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

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

環境は、Delphi2006です。

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

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

と出てしまいます。


148 名前:146 [2007/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 [2007/08/10(金) 19:50:24 ]
試行錯誤していたら、うまく設定を保存できました。

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

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

150 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 22:26:19 ]
>>142-143
つ インクリメンタルサーチ

151 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 22:54:52 ]
ドキュメントのない開発環境はドキュンだな・・・

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 ]
郵便番号

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

 
です。


332 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 16:22:16 ]
>>331
Pascalの宿題は俺にやらせろ!!Part2
pc11.2ch.net/test/read.cgi/tech/1136994325/

333 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 17:14:04 ]
begin
Writeln('1 4 9 16');
Writeln('2 3 8 15');
Writeln('5 6 7 14');
Writeln('10 11 12 13');
Writeln('…');
end.

じゃだめなの?

334 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 17:54:48 ]
>>329
kwsk
freeしてもポインタはそのままなので判断できないのですが。



335 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 17:55:18 ]
規則性のあるものにソレやっちゃったらダメだろうw

336 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 18:18:18 ]
>>327
コミュニケーション能力の欠如した輩がなにやらグダグダ言ってるようだが
一言で言うと「ない」。

337 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/23(木) 18:35:02 ]
>>327
ないと思います.
ポインタの値(場所,アドレス)がnilではない場合,
その値自体からそれが指している場所が開放されたかどうかは知ることはできませんし
ポインタが指している場所のデータを実際に読み書きして試すこともできません.

結論として領域を解放したあとにnilを入れることになると思いますが
開放する領域がオブジェクト以外ならFreeMem(p)の代わりにReallocMem(p, 0)とすると
領域の解放とnilの代入を一度にできます.

>>333
計算して値を出せという宿題なのでしょう.


338 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:29:37 ]
お前ら頭いいな
330の言葉足らずな質問だけでは俺も333としか思わかった
一種のエスパーだよ

339 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:35:25 ]
>>329
が言いたかったのは
>>336-337
なんでしょ。つーかポインタって嫌いなんだけど好き

340 名前:329 mailto:sage [2007/08/23(木) 20:40:10 ]
違う

341 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 21:59:10 ]
何が

342 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:10:09 ]
日本語をおk

343 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:50:18 ]
日本語を?

344 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:18:38 ]
日本語が



345 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:43:12 ]
>>327
Freeしたとき、Deleteもしちゃえ。
そうすれば、ListになければFreeされてると判断できる。
Createもされてないけどね!

346 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:46:59 ]
このスレならどんな質問にも答えてくれるよ
pc11.2ch.net/test/read.cgi/avi/1102121520/

347 名前:デフォルトの名無しさん [2007/08/24(金) 09:53:27 ]
Turbo Delphi で正規表現って、使えますか?

348 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 09:55:03 ]
使えません
www.google.co.jp/search?q=delphi+regexp&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_jaJP229JP231

349 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 10:03:51 ]
使えます

350 名前:デフォルトの名無しさん [2007/08/24(金) 10:32:37 ]
Turbo Delphi 無料の で正規表現の使い方を教えてください。

351 名前:自殺志願者 ◆bBXkw6pgOA mailto:sage [2007/08/24(金) 10:58:23 ]
Delphi for PHPの話題もココでいいでつか?

352 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 11:02:55 ]
消えろカス

353 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 11:55:38 ]
>>351
初心者用の質問スレはないからここでいいんじゃね? あってもどうせすぐ落ちそうだし。
でも、答えられる人がいるかは不明。
PHPに関する質問なら、PHPスレのがいいかもね。

総合的な話題なら、オッチャの方でも時々出てるよ。

354 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 12:09:12 ]
オッチャ って何? とgoogle 検索したら・・・・なるほど、オッチャだけで成立してるんだな



355 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 12:15:48 ]
(ノo`)アチャー (ノO`)アチャー
(ノ∇`)アチャー (ノ▽`)アチャー
(ノ∀`)アチャー (ノ◇`)アチャー
アチャー(ノo`;) アチャー(ノO`;)
アチャー(ノ∇`;) アチャー(ノ▽`;)
アチャー(ノ∀`;) アチャー(ノ◇`;)
アチャ・・・(ノ_< ;)  
(・o+)アチャー (+。+)あちゃー
(*_*)アチャ (^_・;)あちゃー
(;´o`)ゞアチャー!! (;´O`)ゞアチャー!!
(;´∇`)ゞアチャー!! (;´▽`)ゞアチャー!!
(;´∀`)ゞアチャー!! (;´◇`)ゞアチャー!!
Σ(´o`;|||)アチャァ〜ッ Σ(´O`;|||)アチャァ〜ッ
Σ(´∇`;|||)アチャァ〜ッ Σ(´▽`;|||)アチャァ〜ッ
Σ(´∀`;|||)アチャァ〜ッ Σ(´◇`;|||)アチャァ〜ッ
(≧o≦;)アチャー (≧O≦;)アチャー
(≧∇≦;)アチャー (≧▽≦;)アチャー
(≧∀≦;)アチャー (≧◇≦;)アチャー
(/≧o≦\)アチャー!! (/≧O≦\)アチャー!!
(/≧∇≦\)アチャー!! (/≧▽≦\)アチャー!!
(/≧∀≦\)アチャー!! (/≧◇≦\)アチャー!!
(/o≦\)アチャー! (/O≦\)アチャー!
(/∇≦\)アチャー! (/▽≦\)アチャー!
(/∀≦\)アチャー! (/◇≦\)アチャー!
(/o≦\)アチャー!ミテランナイ!(/O≦\)アチャー!ミテランナイ!(/∇≦\)アチャー!ミテランナイ!
(/▽≦\)アチャー!ミテランナイ!(/∀≦\)アチャー!ミテランナイ!(/◇≦\)アチャー!ミテランナイ!
アチャ〜(/o\) アチャ〜(/O\)アチャ〜(/∇\) アチャ〜(/▽\)アチャ〜(/∀\) アチャ〜(/◇\)
(/・_・\)アチャー・・  
(→←)アチャ (→o←;;; アチャ
(→o←)ゞあちゃー  
q(→-←q) q(→0←)p (p→-←)pアチャー

356 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/24(金) 17:41:33 ]
           _____________
   ,∧,,∧∩  /せんせい、
  ミ,,゚Д゚彡<  しつもんでーす
__ミ ミ  ミ   \
\,,∪  ̄ ̄ ̄\  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
||ヽ|| ̄ ̄ ̄ ̄||"
 ...|| ̄ ̄ ̄ ̄||

ファイルパスって
A:\とか
C:\とか
\\マシン名\
とかじゃないですか。

AA:\
とかっていう可能性もあるんですか?

それとも、アルファベット1文字限定?

ネットワークドライブ接続をみると、アルファベット1文字のほうかなと
思っているんですが。


357 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 17:46:16 ]
>356
スレ違いだが、Windows上では2文字のドライブレターは存在しないと思う。

358 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 23:20:22 ]
誰もWindowsなんて言ってない

359 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 23:28:27 ]
じゃあ>356は何のOSの話してるんだ?

360 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 23:31:13 ]
ひ・み・つ♪

361 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/08/25(土) 01:07:59 ]
          _______________
   ∧.,,∧   /ああ、そうか。
  ミ.*゚Д゚彡< 
  ミ つ目(ミ . \
〜ミ,,O,,,,,,つ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

自分の関数で、ファイルパスか否かを判断する関数を作ろうとしてて

一文字目アルファベット
二文字目:
三文字目\
で、\が連続して追加されてなければ
ファイルパスかな、って判断。
している仕様でよいかな、

っておもう思考して質問してたから
すれ違いとか、全然わかんなかったよ。

delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070708185145/FileNameUnit/FileNameUnit.pas
これで、CheckDrivePathやCheckUNCPathはOKってことだね。
よかったよかった。

ありがとうございます。

362 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:14:20 ]
   ∧.,,∧  
  ミ.*゚Д゚彡
  ミ つ目(ミ
〜ミ,,O,,,,,,つ  

363 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 09:26:27 ]
印刷プレビューを作ってるんですが、
例えばモノクロプリンタで黒以外の色で線を引くと、当然グレーなどで印刷されますよね。
それを画面上でプレビューするにはどうすればいいでしょうか?
ようするに線やフォントのColorプロパティをグレイスケールに変換したいのです。

364 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 09:48:28 ]
モノクロプリンタで黒以外の色で線を引くと
1、グレーで印刷される・
2、消えたり、黒だったりする     場合の2通りありますね

いったん TBitmapを作成して そのTCanvasにいったん描画すればいいんじゃないの?
1の場合は256色グレースケールのパレットで
2の場合はモノクロで



365 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:02:13 ]
QuickRep

366 名前:363 mailto:sage [2007/08/25(土) 15:06:29 ]
YUV変換でググったらありました。

367 名前:デフォルトの名無しさん [2007/08/25(土) 20:20:47 ]
初心者も初心者でおはずかしいのですが、
0から始めるとしたら、Turbo ExplorerとDelphi6 Personal
どっちを選んだほうがいいのかな?

さらにTurbo Explorerを選ぶとするなら、DLページに
Turbo C++、Turbo Delphi、Turbo Delphi for .NET、Turbo C#から
どれか選べとありますが、どれにしたらいいのか…。
.NET って.Net Framework対応のソフトを作るとかそういう為?
利点さえよくわかってないので…ごく普通に配布用ゲームとか
自分用プログラムが作りたいだけなんです。

368 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:27:19 ]
DBが使いたいならTurbo。そうじゃなきゃ6でいい。

369 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:30:47 ]
>>367
6はライセンス取得できない。サイズやメモリ消費量の小さいバイナリが作れるTurboにしとけ

370 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:38:58 ]
>>368
DB自体がよくわかって(ry 言葉自体は聞くんですが…
そっから始めないとというレベルで。
でもないよりはあったほうがいいのかな?

>>369
ライセンスキー?は現在取得できないとかまとめWikiに
ありましたがそれのことでしょうか?

お二人ともが推薦してくれてるのでおとなしく
Turbo Explorerにしてみます。>>366の4つのTurboでは
無印「Turbo Delphi」を選んだほうが無難ですか?

371 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:39:26 ]
.NET が必要でヘルプが糞でコンポインストールできないTurboにしとけ

372 名前:367=370 mailto:sage [2007/08/25(土) 20:41:58 ]
グダグダですいません

>>370
×>>366 → ○>>367

>>371
無印Turboは糞なんすか?

373 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:42:25 ]
デルファイアンのみなさまこんにちは、毎年お騒がせしています夏厨です。

今日はこのページで配布されているマウスジェスチャーコンポーネントについて
質問です。 ⇒ ttp://hp.vector.co.jp/authors/VA024591/

このページの一番下の 「マウスジェスチャー(右クリックでグリグリ)」 のリンクから
ダウンロード出来ます mousegesture.zip 内に収録されている Project1.dpr ですが
何故かエラーが出てコンパイル出来ません。
これを出来るように修正出来る方、良かったらご教授下さいませ。

エラーの内容は

「クラスTMouseGestureが見つかりません」

というものです。

gMouseGesture.pas にはこのクラスが定義されているのにおかしいです。
Unit1の uses節 には gMouseGesture が正しく追加されています。

一体何がいけないのでしょうか、Delphi MLやGoogleさんに聞いても教えて
もらえませんでした、よろしくお願い致し候。

374 名前:373 mailto:sage [2007/08/25(土) 20:46:18 ]
環境は Delphi6 personal、RTL3までの全てのアップデートを適用済みでおじゃる。
OSはWindowsXP home SP2でおじゃる。



375 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:50:51 ]
コンポーネントとしてインストールしていないから。

376 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:51:48 ]
あ、ゴメン。
インスコしてなかったらIDEがフォームを表示する時にエラーになるわ。

377 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:57:24 ]
いやインストールしてないだけだろ

378 名前:373 mailto:sage [2007/08/25(土) 21:00:07 ]
>>375-377
なるほど、そういうことでおじゃるか、今から試してみるでおじゃる。
ありがたき幸せ。

379 名前:373 mailto:sage [2007/08/25(土) 21:04:59 ]
動いたでおじゃる!! ありがとうごじゃる! おまんら神!

380 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 21:06:58 ]
偉くレベルの低い神だな

381 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 21:33:07 ]
>サイズやメモリ消費量の小さいバイナリが作れるTurbo
kwsk

382 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 21:50:28 ]
自分で試してみればいいじゃん

383 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 21:58:30 ]
なんとか長所をさがした末の苦しいほめ言葉wwwwww

384 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:13:01 ]
ウザイな。自分が使ってる物が一番だと思ってるんだろうね。



385 名前:デフォルトの名無しさん [2007/08/25(土) 22:15:27 ]
>>383
長所のない過去の産物に縋り付いてる人に言われたくないですよ。


386 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:27:02 ]
ばか
反論するなら383だけにしろ。
Personal版使ってる人に謝れ。

387 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 23:11:01 ]
どっちも素晴らしいと思います。

388 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 00:24:34 ]
その割には使われてないなぁ・・・






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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