09/03/26 23:08:33
はいはい破綻した破綻した
ところで
Extend Delphi Components Without the Need to Install in the IDE - Delphi Interceptor Classes
URLリンク(delphi.about.com)
こんな手法はどうよ?
176:デフォルトの名無しさん
09/03/26 23:37:33
それTMemoでCtrl+A押した時に全選択とかの時にしか使ったことねーな
177:デフォルトの名無しさん
09/03/27 01:25:50
えーと Delphi7Lite ってキーワードで調べてみなさい
178:デフォルトの名無しさん
09/03/27 04:41:13
>>177
違法なもの勧めてんじゃねーよ厨房
179:デフォルトの名無しさん
09/03/27 11:30:50
>>175
日本でもちょっと前に紹介されてるね
URLリンク(twc.xrea.jp)
知ってる人は普通にやってるテクニックだとは思うけど
180:|Д゚彡 ◆A6VzDeLphI
09/03/28 00:54:36
すばらしいテクですな。
181:デフォルトの名無しさん
09/03/28 01:03:05
~Exと拡張していたコンポをそれでリプレースしたい誘惑に駆られるな・・・
フサは日常的に置き換えちゃったりしてる?
182:|Д゚彡 ◆A6VzDeLphI
09/03/28 11:00:35
時々。
コンポインストールは最近は使わない。
複数のDelphiバージョンつかっていたりして
面倒だし。
コンポインストールしないほうが楽かと。
183:デフォルトの名無しさん
09/03/28 11:08:13
それじゃ Delphi 使う意味何所にあるのかしら。
184:デフォルトの名無しさん
09/03/28 11:16:56
コンポインストールするとIDE重くなるしな
185:デフォルトの名無しさん
09/03/28 11:20:50
インストールするけど使わなきゃ起動時間にも影響でないよ。
使いたいときに、プロジェクトオプションで有効にするだけですむ
186:デフォルトの名無しさん
09/03/28 12:05:01
パレットにロードする時間が増えるから影響がないことはないっしょ
187:デフォルトの名無しさん
09/03/28 16:05:47
それで遅くなるような PC / Video カードなら窓から投げ捨てな
188:デフォルトの名無しさん
09/03/28 17:12:00
俺が拾ってやるから
189:デフォルトの名無しさん
09/03/29 23:12:03
IDEとコンポーネントが癒着しすぎてるのは確かだな。
プロジェクトごとにインストール出来るような仕組みが欲しい所。
現状一応チェックボックスで選べるようになってるけどもうちょっと進めて。
190:デフォルトの名無しさん
09/03/30 10:02:08
パッケージ化しなくても、プロジェクト内のソースファイルからプロジェクト限定でパレットに登録できるようになればなぁ
191:デフォルトの名無しさん
09/03/31 20:10:16
プロジェクト全体で定数を共有したいんだが方法ありますか?
192:デフォルトの名無しさん
09/03/31 20:33:18
uAppCommon.pas
をusesしてるな
193:デフォルトの名無しさん
09/03/31 22:07:30
おれもそんな感じ
194:デフォルトの名無しさん
09/04/02 13:20:34
ファイルから読み込みたいお年頃
195:デフォルトの名無しさん
09/04/02 15:52:23
2つ質問したいことがあります。
・Indyについて質問
URLリンク(homepage3.nifty.com)
このサイトの通りにIndyをインストールしようとしたのですが、
「開くメニューから読み込んで以下の順番でインストールします」
と書いてあるのですが、インストールとは何をすればいいのでしょうか?
一応コンパイルかと思い、順番にコンパイルしてみたのですが、画像のようにIndyのアイコンがでてきません。
・プログレスバーについて質問
ウェブブラウザを作っているのですが、プログレスバーの記述の仕方がわかりません。
IEのようにページを表示してる最中に進度をプログレスバーにしたいのですがどのように記述すればいいのでしょうか。
WindowsXP SP3 Delphi6 Personal
お願いします。
196:デフォルトの名無しさん
09/04/02 18:37:31
URLリンク(d.hatena.ne.jp)
197: ◆XcB18Bks.Y
09/04/02 19:19:30
最近全然書き込みがないなぁと思ったら板移転していたのですね。
(お気に入りからだと移転に気づかない罠でした)
198:デフォルトの名無しさん
09/04/02 20:36:55
マウスがフォームから出たらフラグを立てるというのはどうすればいいんでしょうか
OnMouseMoveではフォーム上でしかイベントが起きませんし
199:デフォルトの名無しさん
09/04/02 21:22:13
CM_MOUSEENTER CM_MOUSELEAVE
メッセージが飛ぶからそれを捕まえる。
Delphi CM_MOUSEENTER
で検索するとサンプルが出てくるよ。
200:デフォルトの名無しさん
09/04/02 21:38:03
回答ありがとうございます
さっきまさにその方法で解決した所だったんですが今度はフォームの外でマウスボタンを放したイベントをキャッチできないか悩み中です
やりたいことは、えーとお絵かきソフトの消しゴムみたいな物で、クリック中に発動
操作中にカーソルがフォームの外に出てまた戻ってきてもボタンを押したままならそのまま作業できるが、
ボタンをどこかで離したら、無効になる
というものです
乱暴に操作するとカーソルがフォームの外に出ちゃう事もあると思うんですがそれでいちいちボタンを押しなおすのが面倒だと思うので
201:デフォルトの名無しさん
09/04/02 22:04:07
MouseCaptureでできますた
スレ汚しすみませn
202:デフォルトの名無しさん
09/04/02 22:45:28
delphi自体のツールバーでも使われてるようなアイコンって、何処にありますか?
ネットで検索しててdelphiインストール時に一緒にインストールされると見たのですが、場所が分からずImageListに追加出来ません。
使用しているのはDelphi6です。
203:デフォルトの名無しさん
09/04/02 22:52:19
C:\Program Files\Common Files\Borland Shared\Images\Buttons
にあるけど古臭すぎて使い物にならない。
Visual C# Express入れるとProgram Files\Common Files\MSなんちゃら
にそこそこモダンなビットマップが詰まってるよ。
204:デフォルトの名無しさん
09/04/02 23:30:58
>>203
それってVC以外でコンパイルする物に使って良いの?
205:デフォルトの名無しさん
09/04/02 23:44:59
>>203
入れてみましたが見当たりませんでした。。。
「Program Files\Common Files\MSなんちゃら」というフォルダが見当たりません。
Pro版にはzipでアイコンが固めてあるという情報をグーグル先生が教えてくれたので、そっちを当たってみます。
206:デフォルトの名無しさん
09/04/02 23:51:17
\Common7\VS2005ImageLibrary\VS2005ImageLibrary.zip
でそ
207:デフォルトの名無しさん
09/04/03 03:05:58
SQLiteのラッパー、Simple Delphi Wrapperについての質問です。
URLリンク(www.itwriting.com)
下記の様にして、テーブルのインスタンスを作るとします。
sqlTb := sqlDb.GetTable( 'SELECT * FROM hoge' );
この時、sqlTbのテーブルにある「カラム(列)の数」が知りたいのですが、
どうすればいいでしょうか?
ちなみにsqlTbには、まんまColCountというプロパティがあるのですが、
何故か、値は常に'0'です。
Delphi 2009です。よろしくお願いします。
208:デフォルトの名無しさん
09/04/03 03:39:59
2009+indy10のsmtpを使用してメ-るを送信すると、
空白メール届くのです。
2005でコンパイルしたものは正常に送信できるのですが、
教えていただけませんか
209:デフォルトの名無しさん
09/04/03 03:48:50
普通に文字コード絡みの問題だと思うが
210:207
09/04/03 03:54:51
すみません、自己解決しました。
colcountはCarginal型なのですが、表示の際にハマっていただけでした…
211:デフォルトの名無しさん
09/04/03 05:59:39
すいません、言語ではなくこのソフトに関する質問なんですが
左下にある(初期レイアウトでは)プロパティの中の設定する値が記述されてる部分のフォントの色って変えること出来ますか?
ターボ、xpです。よろしくお願いします。
212:デフォルトの名無しさん
09/04/03 07:15:27
できません。
213:デフォルトの名無しさん
09/04/03 09:53:53
なんでBooleanは8ビットも使ってしまうん?(´・ω・`)
214:デフォルトの名無しさん
09/04/03 09:58:22
パソコンのしくみ
215:デフォルトの名無しさん
09/04/03 14:55:57
8つのbooleanが詰まった1バイトのbooleans型を定義するといいよ。
216:デフォルトの名無しさん
09/04/03 15:20:02
2009のサンプルコンポーネントが相変わらす古いものしか入っていないんですが、
使えるShellListViewって何処にありますか?
217:デフォルトの名無しさん
09/04/03 18:56:04
指定フォルダ内のファイル数を、サブフォルダ内のファイルも含めて取得したいです。
hoge
-test1
hogehoge
-test2
-test3
というようなフォルダ構造の場合、3を得たいという事です。
何か簡単な方法は無いものでしょうか。
FindFirstとFindNextでやろうとすると、サブフォルダ内の処理をする時に対象フォルダが移動する為、
FindNextで親フォルダを正しく検索する事ができません。
218:デフォルトの名無しさん
09/04/03 19:26:54
はいはい再帰再帰
俺は太ってるから書けないけどね
219:217
09/04/03 19:48:16
FindFirstでフォルダを列挙して、それをFileListBoxに突っ込んでCountを足す事でファイルカウントにしました。
再帰は良く分かりませんが、動くので取り敢えず上記ので実装しますorz
220:デフォルトの名無しさん
09/04/03 21:53:05
>219
つ URLリンク(www.google.co.jp)
221:デフォルトの名無しさん
09/04/04 22:40:14
URLリンク(ja.uncyclopedia.info)
222: ◆XcB18Bks.Y
09/04/06 19:11:33
>>199
Turbo Delphi Explorerとか最近のバージョンだと
OnMouseLeaveイベントが実装されていますね。
最初は知らなかったので今までのように
自分でメッセージに応答するコードを書き終わってから見つけて涙目でした。
223:デフォルトの名無しさん
09/04/07 09:32:11
Delphi7でFirebirdのクライアントアプリケーションを開発してましたが、
この度Delphi2009にバージョンアップしました。以前のソースを一部修正して
コンパイルは出来たのですが、実行すると一部文字列フィールドでサイズ不一致のエラーがでます。
データはVARCHAR(8)のSJIS_0208の項目に半角英数字で10文字セットされた行でエラーが出ていますが
対処法がわかりません。テーブルのデータ構造をVARCHAR(16)に再構築すればいけるかと思いますが、
できればテーブルはそのまま使いたいのですが、無理でしょうか?
224:デフォルトの名無しさん
09/04/07 20:45:23
∧__∧
(´・ω・) 無理どす
ハ∨/^ヽ
ノ::[三ノ :.、
i)、_;|*く; ノ
|!: ::.".T~
ハ、___|
"""~""""""~"""~"""~"
225:デフォルトの名無しさん
09/04/08 13:07:58
TMenuItemに複数のShortCutを設定するにはどうすればいいでしょうか?
226:デフォルトの名無しさん
09/04/08 13:55:40
パーテーションなどディスク上のデータを直接読みたいのですがどうすればいいでしょうか?
Delphi3です。10年くらいブランクがあるのでほとんど忘れてしまったorz
低レベルなアクセスだとやっぱりAPIを駆使でしょうか?
Delphi側で手軽に扱える便利な手続きが用意されてると有り難いのですが。。。
詳細はググりますんで、検索キーワードだけでもご紹介くださいませ
227:デフォルトの名無しさん
09/04/08 14:07:16
>>225
TActionList&TActionだとセカンダリを指定できる。
MenuItemよりAction使っといた方が全体的に便利だよ。
228:デフォルトの名無しさん
09/04/08 15:01:38
>226
それはWin32APIスレにいったほうがいいような。Delphiで簡単に、という性質のものではない。
あとOS(2000/XP/Vista)によってもプログラミングに違いがあると思う。UACとか。
229:226
09/04/08 15:31:34
>>228
やっぱりAPIですか。誘導してくださってありがとうございます。
230:デフォルトの名無しさん
09/04/08 16:52:16
>>227
Actionは使ったこと無かったので思いつきませんでした
ありがとうございます
231:デフォルトの名無しさん
09/04/08 23:11:02
今DDEのヘルプを読んでるんですが、
サーバーからデータA、データB 、データCを取得したいときって
DDEクライアントを3つ置かないといけないですか?
232:デフォルトの名無しさん
09/04/09 04:57:24
統合アーカイバコンポーネント
ってもうどこにもないですかねぇ…?
ググったけどDelphian Worldは閉鎖されてるし…
233:デフォルトの名無しさん
09/04/09 10:09:28
>>232
URLリンク(www.geocities.jp)
234:デフォルトの名無しさん
09/04/09 16:06:29
>>233
ありがとうございます。
235:デフォルトの名無しさん
09/04/10 12:28:12
質問です。
ToolBarコンポーネント上にボタンを複数配置し、
実行中にボタンのVisibleプロパティを変更した場合、
ボタン新規作成でToolButtonを配置していた場合は
自動的にVisibleがFalseになったボタンより右のボタンは
自動的に左詰めしてくれるのですが、
SpeedButtonを配置していた場合、
VisibleをFalseにしたボタンの部分が空いてしまい、
それより右のボタンが左詰されません。
(設計時にVisibleをFalseにして実行した場合は左詰してくれますが)
SpeedButtonでも自動的に左詰してくれるようになる
プロパティとかはないでしょうか。
Delphi4を使用しています。
236:デフォルトの名無しさん
09/04/10 12:32:25
if Visible then Width := 32 else Width := 0;
237:デフォルトの名無しさん
09/04/10 13:07:43
CombBoxってタブオーダー無視する?
タブストップはTrueにしてるんだけど次のやつにいっちゃう。
DEL7です。
どなたかよろしく。
238:デフォルトの名無しさん
09/04/10 13:17:56
>>237
まず新規アプリケーションにComboBoxを100個並べてTABキー押してみてくれ。
239:デフォルトの名無しさん
09/04/10 16:57:20
高級INIファイル程度の感じで簡単にXML読み書きするのってどうやるのが楽?
Delphi XMLで検索するとOpenXMLとかいうのがヒットするみたいだけど。
240:デフォルトの名無しさん
09/04/10 19:07:23
大人しく付属してるTXMLDocument使えばいいんじゃ。デフォルトでMicrosoftのXMLパーサー使うように
なってたような。嫌なら切り替えれたような。
241:デフォルトの名無しさん
09/04/11 23:39:00
>>237
今試してみたが普通にTAB移動するぞ D2007,D5
Styleプロパティも変えてみたけどOKだ
新規フォームでもう一度試してみな
また、そんなときはうまくいかないComboBoxを選択してCtrl+Cして
エディタにでも貼り付けて違いを調べるんだ
お前の言う「昆布ボックス」がカスタムコンポーネントなら知らん
242:デフォルトの名無しさん
09/04/12 09:49:26
製品版を購入するには2009だと10万弱かかるので、ためらっています。
バージョンアップ版は4万強ですが、例えばTurboをインストしていれば、
それが使えるとかの技はありませんでしょうか?それとも素直に10万弱
出すしかないのでしょうか?どうかご教示ください。
243:デフォルトの名無しさん
09/04/12 09:55:37
DEL6なんだけど今時のインターフェイスのフォルダー選択コンポーネントないかな?
244:デフォルトの名無しさん
09/04/12 10:38:45
ライセンス関係は Codegear に聞いてください
電話かメールで尋ねられるとおもいます
実のところ、アップデート版のインストーラーは既存製品のインストール状況を
チェックしません。純粋に、ライセンス、契約の問題です。
もっとわかりやすく言うと「アップデート版はアップデートユーザーが使うと信じてるよ」です
245:デフォルトの名無しさん
09/04/12 12:29:59
んなこたーない
246:デフォルトの名無しさん
09/04/13 09:13:16
>>243
今時って?こういうコンポーネントじゃなくて?
URLリンク(mrxray.on.coocan.jp)
247:デフォルトの名無しさん
09/04/13 20:48:22
Delphi6 personalでIndyインスコしてIdHTTPをForm1に貼り付けると「IdBaseComponent.dcuが見つかりません」とでてコンパイルできません。
なぜでしょうか?
もしかしてDelphi6 PersonalとTurbo Delphiの両方をインスコしてあるからなんですかね?
248:デフォルトの名無しさん
09/04/13 21:49:45
ライブラリパスは設定したのか?
249:デフォルトの名無しさん
09/04/13 22:00:52
>>248
すいませんライブラリパスとは何ですか?
具体的に教えてもらえると助かります;;
250:デフォルトの名無しさん
09/04/13 22:34:31
ツール(T)→環境オプション(O)→ライブラリ→ディレクトリ→ライブラリパス(B)
ここにIndyの入ってるディレクトリを追加する
251:デフォルトの名無しさん
09/04/13 23:31:12
>>246
レストン
左側にマイコンピューターとかマイネットワーク
とか出て、フォルダーの新規作成も出来てみたいなの
が無いかなと思ったんですが、紹介してもらったのは
ソースつきなんで勉強がてら改造してみます。
252:デフォルトの名無しさん
09/04/14 00:21:16
dllインジェクションやりたいお
253:デフォルトの名無しさん
09/04/14 00:29:45
>>251
> 左側にマイコンピューターとかマイネットワーク
それってただのTOpenDialogでは?
Vista風の見た目とかなら探せばコンポ落ちてるだろうけど
254:デフォルトの名無しさん
09/04/14 02:57:10
URLリンク(blog.toratech.net)
を参考に、Delphi2009にQuadruple Dをインストールしようとしてるのですが、
再構築のところでエラーが出てコンパイルが出来ません・・・
何が悪いのか見当すら付かないんですがヒントをお願いします
255:デフォルトの名無しさん
09/04/14 04:07:02
せめてエラーメッセージをおしえて
256:デフォルトの名無しさん
09/04/14 04:13:23
いきなり30個くらいあったので・・・
最初は定義の多重宣言とか言われて、とりあえず//でコメントアウトしていくと、
constの所で、(が必要な所に;があります、とか言われて
もうわけわかめでした
257:デフォルトの名無しさん
09/04/14 08:43:06
解決する気がないならチラシの裏へどうぞ。
258:デフォルトの名無しさん
09/04/14 08:49:41
はあ
何を根拠にそんなアオリを入れてるのか知りませんが
URLリンク(kazina.seesaa.net)
↑の通りにやっても同じ結果でしたね
TurboDelphiでは問題なく実行出来ましたが
259:デフォルトの名無しさん
09/04/14 08:58:18
めんどくさがらずに、エラーの最初の10行ぐらいをコピペしてみろよ
260:デフォルトの名無しさん
09/04/14 09:23:12
何の権利があって人に命令してるんですか?
物の頼み方を知らない人ですね。
261:デフォルトの名無しさん
09/04/14 09:33:51
>>254-259
ID無いからわかりにくい。アンカーくらい付けろや!
262:デフォルトの名無しさん
09/04/14 09:52:03
わからないのなら黙っててください。
263:254
09/04/14 09:58:51
すいません、自己解決しました!
264:251
09/04/14 10:27:47
>>253
そうなんですけど、OpenDialogではファイルを選ばないといけないでしょ?
2,3フォルダーコンポ落としたんですが、フォルダーの新規作成とかが
ないものばかりで。
265:デフォルトの名無しさん
09/04/14 10:29:21
なんか荒らされてるのはスルーしつつ一応ログの一部貼っときます
[DCC エラー] DInput.pas(803): E2004 識別子の多重定義 : 'DIACTIONFORMAT'
[DCC エラー] DInput.pas(883): E2004 識別子の多重定義 : 'DICONFIGUREDEVICESPARAMS'
[DCC エラー] DInput.pas(938): E2004 識別子の多重定義 : 'DIDEVICEIMAGEINFO'
[DCC エラー] DInput.pas(978): E2004 識別子の多重定義 : 'DIDEVICEIMAGEINFOHEADER'
[DCC エラー] DInput.pas(1076): E2029 '(' が必要な場所に ';' があります
[DCC エラー] DInput.pas(1082): E2026 定数式が必要です
[DCC エラー] DInput.pas(1359): E2004 識別子の多重定義 : 'DIDEVICEINSTANCE'
[DCC エラー] DInput.pas(1429): E2026 定数式が必要です
[DCC エラー] DInput.pas(1433): E2003 未定義の識別子 : 'IDirectInputDeviceWVtbl'
[DCC エラー] DInput.pas(1551): E2029 '(' が必要な場所に ';' があります
[DCC エラー] DInput.pas(1555): E2026 定数式が必要です
266:デフォルトの名無しさん
09/04/14 18:01:06
>>250
ありがとうございます!
解決しました!
267:デフォルトの名無しさん
09/04/14 19:04:19
>>264
>>246 のは新規作成できるみたいだね。でもフォルダ選択で
> 左側にマイコンピューターとかマイネットワーク
ってのは見たことないなあ。あったら便利な感じもするけど…
もし作ったら公開してくださいね^^
268:デフォルトの名無しさん
09/04/14 20:24:05
function BrowseFolderProc(hWindow: HWND; uMsg: UINT; lParam: LPARAM;lpData: LPARAM): Integer; stdcall;
var
PathName: array[0..MAX_PATH] of Char;
begin
case uMsg of
BFFM_INITIALIZED:
SendMessage(hWindow,BFFM_SETSELECTION,1,integer(PChar(lpData)));
BFFM_SELCHANGED:
begin
SHGetPathFromIDList(PItemIDList(lParam),PathName);
SendMessage(hWindow,BFFM_SETSTATUSTEXT, 0,LongInt(PChar(@PathName)));
end;
end;
Result:=0;
end;
269:デフォルトの名無しさん
09/04/14 20:24:54
function OpenFolder(IniDir,Title:string;OwnerHandle:HWND;
AddCreateFolder:Boolean;Files:Boolean=False):string;
var
IDList: PItemIDList;
BrowseInfo: TBrowseInfo;
PathName: array[0..MAX_PATH] of Char;
DisplayName: array[0..MAX_PATH] of Char;
const
BIF_USENEWUI=$0050;
begin
with BrowseInfo do
begin
hwndOwner :=OwnerHandle;
pidlRoot:=nil;
pszDisplayName:=DisplayName;
lpszTitle:=PChar(Title);
if Files then
ulFlags:=BIF_STATUSTEXT or BIF_RETURNONLYFSDIRS or BIF_BROWSEINCLUDEFILES or BIF_USENEWUI else
ulFlags:=BIF_STATUSTEXT or BIF_RETURNONLYFSDIRS;
if AddCreateFolder then ulFlags:=ulFlags or BIF_USENEWUI;
lpfn:=BrowseFolderProc;
lParam:=integer(PChar(IniDir));
end;
//つづく
270:デフォルトの名無しさん
09/04/14 20:25:50
IDList:=SHBrowseForFolder(BrowseInfo);
if IDList=nil then
begin
Result:='';
exit;
end;
SHGetPathFromIDList(IDList,PathName);
Result:=PathName;
end;
271:デフォルトの名無しさん
09/04/15 23:19:33
DELPHIのブラウザコンポーネント使ったら、
ブラウザ画面から目的の文字列を探すことって簡単に出来ますか?
ソースをダウンロードして検索したほうが簡単ですか?
272:デフォルトの名無しさん
09/04/16 06:06:13
imiwakannne
273:デフォルトの名無しさん
09/04/16 15:30:58
[Delphi] WebBrowserからHTMLソースを取得する
uses mshtml;
Memo1.Text:= OLEVariant(WebBrowser1.Document as IHTMLDocument2).Body.InnerHTML;
って話か?
274:271
09/04/16 21:07:38
試してないけどそういうことです。
275:271
09/04/16 21:08:17
ありがとう
276:デフォルトの名無しさん
09/04/18 23:14:02
今、簡単に言えばようつべから動画をダウンロードするプログラムを作っているのですが、
・動画をどこまで落としたかの進行度をプログレスバーに表す
・中断機能をつける
この2つがよくわかりません。
前者は動画の容量をprogress.max、落とした容量をprogress.positionにすればいいのはわかるんですが、どのように取得してどう記述すればいいのかがわかりません。
後者はスレッドを複数使う、というのはわかったのですがどうスレッドを複数作り、どのようにダウンロードを中断させればわかりません。
WindowsXP SP3 Delphi6 Personal Indy10 です。
どなたかご教授お願いします。
277:デフォルトの名無しさん
09/04/18 23:41:16
URLリンク(www.google.com)
URLリンク(www.google.com)
278:デフォルトの名無しさん
09/04/18 23:43:34
いるよね
超初心者用ってスレなのに上から目線で英語のサイトくらい嫁とか言う奴
まあそんなんだから廃れたんだろうなDelphi
あ、俺は只のROMで質問者じゃないからね
279:デフォルトの名無しさん
09/04/18 23:45:55
>>278
コピペ?
280:デフォルトの名無しさん
09/04/18 23:49:25
>>278
どっちも日本語だけどな
281:デフォルトの名無しさん
09/04/18 23:51:03
しかも普通にIndyの公式とかしかヒットして無い様に見えるんだけど何が言いたいんだろうね
282:デフォルトの名無しさん
09/04/18 23:52:04
ああ
IEで開いたら日本語だったわ
283:デフォルトの名無しさん
09/04/18 23:55:32
google.co.jpじゃなくて.comだから、外国だと思ったんだろう
いるよね?リンクの中身すら見ずにURL名だけで判断する奴
あ、俺は只のROMで質問者じゃないからね
284:デフォルトの名無しさん
09/04/18 23:57:28
なんでプログラム板ってID非表示?
質問スレが多く立ちそうな板なのに不便アル
285:デフォルトの名無しさん
09/04/18 23:59:12
まあ俺の勘違い?だったから罵倒してくれていいんだが
Firefoxだと
Delphi Indy i’≫
になってて英語サイトしかヒットしてないんだよ
文字エンコードはUTF-8だけど他のに変えても駄目だ
IEとChromeで開いたらDelphi Indy 進捗になったよ
286:デフォルトの名無しさん
09/04/19 00:01:17
>>285
俺FireFoxだけど普通に表示されたぞ
287:デフォルトの名無しさん
09/04/19 00:03:29
Accept-Languageで日本語が無いか優先度が低いんじゃね
288:デフォルトの名無しさん
09/04/19 00:04:11
そっか
じゃあ俺の環境がなんかおかしくなってんだな
正直すまんかった
あと俺は本当に質問者じゃないから本人さんに何も関係ないことだから
以前他の言語のくだすれでちょっとあって・・・
脊髄反射で書き込んでしまった
289:デフォルトの名無しさん
09/04/19 10:03:38
必死だな質問者
290:デフォルトの名無しさん
09/04/19 21:56:08
ネットのログインを自動でやりたいんだけどdelでやる時の
参考になるページ教えてください。
291:デフォルトの名無しさん
09/04/19 22:17:41
俺はVBやC#の例を見ながら作ったぞ。
292:デフォルトの名無しさん
09/04/19 22:43:14
おまいIndyスレに書き込んだヤツか。
失敗している原因をちゃんと調べないとダメだぞ。
293:デフォルトの名無しさん
09/04/19 22:54:42
そもそも、ネットのログインってのが抽象的でよくわからない
294:デフォルトの名無しさん
09/04/19 22:56:11
>>292
>おまいIndyスレに書き込んだヤツか。
>失敗している原因をちゃんと調べないとダメだぞ。
残念ながら違う。
自動ログイン DELPHIでググったんだけど、いまいちピンと来なかったんだ。
295:デフォルトの名無しさん
09/04/19 23:04:21
IEコンポ使う方法とIndyでやる方法じゃあ、全然違うからな。
296:290
09/04/19 23:43:40
>>291,295
レストンです。
ログインして、ブラウザに表示されるページの中からキーワードを
拾い出したいんですが、出来ればブラウザを起動させずに出来ないかなと
思い調べてました。
297:デフォルトの名無しさん
09/04/20 01:27:25
で、何を使ってどんな風にどこまで作って何が不満だったかくらい言おうよ。
298:デフォルトの名無しさん
09/04/20 09:27:21
質問の内容が悪くてすみません。
テンパってて。
ブラウザを起動させなくてもURL直接送ってページに表示されるHTML
の内容を取得して、目的のキーワードを取得は出来るんですが、
最初にログインが必要な場合にどうすればいい買って事なんです。
299:デフォルトの名無しさん
09/04/20 10:10:50
>>298
何言ってるかいまいちだがログインすればいいだけじゃないのか?
300:デフォルトの名無しさん
09/04/20 10:15:26
>>290の時点で何を聞きたがってるのか分からない奴ってアホだろw
301:デフォルトの名無しさん
09/04/20 10:19:16
>>300
じゃあお前が教えてやれ
よかったな>>290
今から>>300が教えてくれるぞ
302:デフォルトの名無しさん
09/04/20 10:44:10
>>300
お前は黙ってろ
303:デフォルトの名無しさん
09/04/20 12:18:00
>>298
「indy コンポーネント BASIC認証」でググレ
「自動ログイン DELPHI」は酷すぎるwww
304:290
09/04/20 13:01:56
>>303
今からググって見ます。
アリガトン
305:デフォルトの名無しさん
09/04/20 13:34:58
BASIC認証のサイトなんてもう少ねえよな。
まあどんな認証方法のサイトなのかは知らんけど。
306:290
09/04/20 13:57:00
認証に種類があるんですか。
そんなことも知らなかった。
おとなしく、ブラウザを表示させて
自動入力みたいにしたほうが初心者には
簡単ですね。多分。
307:デフォルトの名無しさん
09/04/20 20:21:09
まずDelphiの前にHTTP勉強しろ
308:290
09/04/21 01:06:15
ごもっともです。
309:デフォルトの名無しさん
09/04/21 02:19:31
マジレスすると>>305の言うようにBASIC認証じゃなさそうだし、
たぶんmixiみたいなIDとパス入れてログインするようなサイトなんだろうけど、
ログインしてすぐのページさえ取れればいいのならIndyでGetの代わりにPost使えば大概簡単に取れる
ただしSSLが必要だったりページの遷移があったりすると色々と面倒なんで、
IEコンポを貼り付けて見えないサイズにして(単純にVisible:=Falseだと動かない場合があった気がする)、
あとはNavigate辺りでJavaScript呼ぶかレイトバインドで直接タグ操作してやれば確実
こっちの方が資料も豊富だろうし
310:デフォルトの名無しさん
09/04/21 10:31:20
認証時に何をPOSTしてるのか調べて、同じようにPOSTするプログラムを書けばよろしい。
311:デフォルトの名無しさん
09/04/21 14:26:05
フォーム認証だとログインしたあとにセッションかクッキーでログイン状態を管理すると思うけど、
そのあたりindyだとどうやるんだろね
単にページを巡回したいなら、スクリプトでコントロールをクリックしたり
ページ遷移できるブラウザがあったと思うんだけど、
それを使えば便利だが、趣旨とは異なるかな?
312:デフォルトの名無しさん
09/04/21 14:58:04
サブフォームをモーダルで開いた時にメインフォーム上の処理を行いたいんだが
OnDeactivateに書いても動作せず。試しにこんな感じで。
procedure TForm1.FormDeactivate(Sender: TObject);
begin
form1.Color := clwhite;
end;
どうすればいいんでしょ?
313:デフォルトの名無しさん
09/04/21 15:07:33
Form2.ShowModal;
したらフォーム閉じるまで制御が戻ってこないんだからどうにもならない。
Form2側からuses Unit1;して
Form2Showかなんかで
Form1.Color := clWhite
してみたら
314:デフォルトの名無しさん
09/04/21 16:27:49
Halbowさんと俺とゲームボーイの誕生日が今日らしい
誰か祝ってやれ
315:デフォルトの名無しさん
09/04/21 16:43:05
tmpフォルダにzipから解凍してきたファイルを置いて、読み込み、処理が終わったらtmpフォルダを空にしたいと思ってます。
現状
tmp
-test
-A.txt
という様なフォルダ構成で、A.txtを読み込んだ状態です。
そこで、testフォルダを削除しようとすると「プログラムが使用してます」といった旨のエラーダイアログが出て削除する事が出来ません。
A.txtを読み込んだだけでtestフォルダにロックがかかってしまうのでしょうか。
また、そのロックを解除する術はあるのでしょうか。
A.txtの読み込みにはLoadFromFileを使ってます。
また、A.txtの検索にFindFirstを使ってます。
上記2つのどちらかが、フォルダのロックの原因でしょうか。
フォルダの削除はエクスプローラ上からも出来ませんでした。
A.txtはエクスプローラ上から削除可能でした。
何方かご教示お願い致しますm(_ _)m
316:315
09/04/21 16:46:04
追記:
フォルダの削除にはSHFileOperationを使ってます。
フォルダをファイルが入った状態で削除するにはコレが良いとGoogle先生に聞いたので。
317:デフォルトの名無しさん
09/04/21 20:15:55
>>314
Halbowさんおめでとうございます
318:デフォルトの名無しさん
09/04/21 20:19:33
>>315
フォルダをつかんでる(ロックしてる)んではなくて、そのフォルダで作業してる
(カレントフォルダになってる)だけだと思う
処理が終わったら
SetCurrentDir(ExtractFileDir(Application.ExeName));
して味噌
319:デフォルトの名無しさん
09/04/21 21:04:06
>>315
それオレもハマった。FindFirstが原因だと思うよ。FindFirstが終わったら
FindClose(SearchRec)とかやってクローズする必要があると思う。
320:デフォルトの名無しさん
09/04/21 21:06:24
削除前にきっちりFindCloseを呼ぶ。
カレントディレクトリってコマンドプロンプト以外でもロックしちゃうんだっけ?だったら戻した方がいいかも。
321:デフォルトの名無しさん
09/04/22 00:56:17
昨日Turbo Delphi Explorerを入れてみたです。
正規表現使えないかなーとBRegExpとそのUnitを入れてみたんですが
試しに簡単なの動かそうとしたらエラー出ました。
BabaさんのBREGEXPとosamuさんのUnitとを解凍してできるファイルを
とりあえず*.hと*.hlp以外全部delphiのLibフォルダに突っ込んであります。
エラーはこんなかんじ
[Pascal エラー] BRegExp.pas(226): E2064 代入できない左辺値です
[Pascal エラー] BRegExp.pas(227): E2250 指定された引数で呼び出すことのできるオーバーロード関数 'UniqueString' が定義されていません
[Pascal 致命的エラー] Project6.dpr(6): F2063 'BRegExp.pas' ユニットはコンパイルできませんでした
コードはこんなかんじ
program Project6;
{$APPTYPE CONSOLE}
uses
SysUtils,BRegExp;
var
Str: String;
begin
Str := 'うんこ:ちんこ:まんこ';
brx.Match('m/;(+);/',Str);
Writeln(brx[1]);
end.
うまく動かせてる人アドバイス求ム
322:デフォルトの名無しさん
09/04/22 18:20:05
使ってないけど落としてソース覗いてみた(出来ればurl書いて欲しかった)
const TextBuffer: string='';の定数が
問題なんじゃね?
{$J+}オプション入れるか、constを
vart TextBuffer: string;
に変えて
functionの最初に
TextBuffer:='';
入れておけばいんで内科医?
ちなみに俺は「TRegExpr」
URLリンク(delwiki.info)
323:315
09/04/22 19:07:58
>>318-320
ありがとうございます。対応入れてみました。
結果、複数フォルダがある場合に、最後の一つだけは削除できるようになりました。
まだ何処かでロックしてるみたいですorz
324:デフォルトの名無しさん
09/04/22 21:37:56
>323
原因は間違いなくFindCloseのし忘れ。FindFirstした分必ずFindCloseすること。
おそらく今は最後の一回分しかFindCloseしてないんじゃないか?
325:デフォルトの名無しさん
09/04/22 23:25:56
Delphiのグラフ書くコンポーネントって
2本の折れ線グラフが交差した座標を検出とか
そんな機能あるわけないよね?
326:デフォルトの名無しさん
09/04/23 00:26:40
あるわけがない。
ポイントの座標くらいなら自分で取得できそうだし、
交点くらいちょびっと計算して出せよ。
327:321
09/04/23 02:10:16
>>322
レスありが㌧
constに代入してるのはPascal初心者には奇怪だったんですが
やっぱりDelphiな人にも奇怪だったのね。
const取ってvar内に宣言したり、言われて{J+}オプション(理解できてない)
入れたりしたらビルドは通ったんですが、別な例外で動かないですわ。
まだまだ手に負えそうにないんで、おいらもTRegExprにしてみる。
328:デフォルトの名無しさん
09/04/23 03:06:48
constへの代入が何故使われてるかというと、あれはDelphiでスタティック変数もどきを使用するテクニックなんで、
動作するには前回の値が保存されてる必要があるから、単純にvarにするだけじゃ動かない
実体はスコープが関数内に限定されたグローバル変数だから、宣言をfunctionの外に移動させてやればおk
ただ$Jスイッチは局所的に有効になるから、ユニットの先頭にでも{$J+}と書くのが一番確実かな
329:デフォルトの名無しさん
09/04/23 04:57:55
>>327
古いDelphiではConstは常に書き込み可能だったのだ
var TextBuffer: string='';
function TBRegExp.Subst()
begin
end;
と外に出してグローバル変数にすればおk
今時{J+}は使わなくて良いでしょ
あと、肝心の正規表現間違ってるよ
エラーはそのせいかと
Str := 'うんこ;ちんこ;まんこ';
brx.Match('m/;(.+);/',Str);
Writeln(brx[1]);
330:デフォルトの名無しさん
09/04/23 05:09:19
というか、DLLで良いのなら鬼車の方が良いかな
URLリンク(homepage2.nifty.com)
(DLLのLinkがonig.zip になってるけどonig.lzhが正解)
URLリンク(www.geocities.jp)
331:デフォルトの名無しさん
09/04/23 11:53:16
クラス化してくれ…
332:デフォルトの名無しさん
09/04/23 19:29:51
>>328
322だが、もちろんその使い方で私も使ってます
ただ、くだんのBRegExp.pasでは単に初期化するだけに使っていることを
確認してのレスでした
333:デフォルトの名無しさん
09/04/23 22:35:40
エクセルのブックをDelphiで作成したいのですが、
Excel := CreateOleObject('Excel.Application');
てやるとエクセルが起動しちゃうんですよね?
起動させずにブックを作ることって出来ませんか?
334:デフォルトの名無しさん
09/04/23 22:49:55
不可能
でも表示をオフにすれば起動されたことはわからんけど。
335:デフォルトの名無しさん
09/04/23 22:59:47
鬼車をLoadLibraryなどの実行時動的リンクではなく、
ロード時動的リンクしようとすると、Delphiが変数のインポートをサポートしてないから
面倒なんだよな。Delphiってうんこだよな。
336:デフォルトの名無しさん
09/04/23 22:59:49
レストンです。
そうですか。
シートに書き込むデータがアドインソフトに関するもので書き込んだ瞬間
「外部データにアクセスできない。アドインを実行するか?」
見たいなメッセージが出てきてしまします。
エクセルの特定のアドインを一時的にとめることって出来ますか?
エクセルのヘルプに見ても登録と削除しか出てこないようなので。
337:デフォルトの名無しさん
09/04/24 00:50:22
>>333
勿論できるぞ。種になるブックをどこかに作っておき、
それをコピーするんだ。実行自体にはExcelすら要らん。
338:デフォルトの名無しさん
09/04/24 01:05:32
>>336
削除と登録ができるのに、一時的に止められないってこたないだろ。
削除して、また登録すればいいんだから。
それはさておき、
Excel.AddIns['アドイン名'].Installed := false;
Excel.AddIns['アドイン名'].Installed := true;
あたりで出来ないか?
339:デフォルトの名無しさん
09/04/24 05:57:23
>>333
使ったことはないけど
URLリンク(wiki.lazarus.freepascal.org)
340:デフォルトの名無しさん
09/04/24 08:05:52
>>337,338,339
ありがとうございます。
>>337
>勿論できるぞ。種になるブックをどこかに作っておき、
このレス見たとき、昔こういうやりか足してた先輩がいたの思い出した。
今は会社辞めちゃったけど。
>>338
>Excel.AddIns['アドイン名'].Installed := false;
>Excel.AddIns['アドイン名'].Installed := true;
作ったら人に渡すので削除とかは実際したくないってのがありました。
こういうのがあるんですね。
ヘルプを見てみます。
>>339
これコンポーネントですよね。
よさそうなんですが、ダウンロードするところがよくわからなかった。orz
341:デフォルトの名無しさん
09/04/24 10:51:59
ポインタについてなんですけど、
ある手続きで参照先のデータを解放した後に、
別の手続きでその場所にデータがあるかどうか調べるって事は出来るんでしょうか?
342:デフォルトの名無しさん
09/04/24 12:18:31
出来ない。
メモリの内容見てそれがオブジェクトなのか、生きているのか死んでいるのかを厳密に判別する術はない。
procedure foo(var a: TObject);
begin
FreeAndNil(a);
end;
とかやって参照自体を潰して参照がnilかどうかで判断するのが定石だな。
343:デフォルトの名無しさん
09/04/24 20:06:14
メモリマネージャを差し替えればそれっぽいことができなくもないけど、激しくオススメしない
344:デフォルトの名無しさん
09/04/24 20:58:07
どんな手使っても、アプリケーションが全てと思うけどな。
やな手使って欲しくないけど…
345:デフォルトの名無しさん
09/04/24 21:19:38
よーわからんけど
ポインタが有効かどうかって
Assignedすればエエだけなんじゃねえの?
外していたらメンゴ
346:デフォルトの名無しさん
09/04/24 21:23:40
Assignedはnilチェックだよ
347:デフォルトの名無しさん
09/04/25 03:27:42
EAccessViolationで囲むとか
動いたり動かなかったりだろうからオヌヌメしない
348:デフォルトの名無しさん
09/04/25 18:54:06
>>341はたぶん一つのオブジェクトに複数の参照があってその管理で困ってると思うんだけど、
そういう場合は参照カウンタで管理すべきじゃないかと思う。別解としては、参照をさらに参照する。
type
PObject = ^TObject;
var
p1: PObject;
p2: PObject;
p1^ := TObject.Create;
p2 := p1;
この状況下で、
p1^.Free;
p1^ := nil;
この時点で当たり前のこととしてp2^もnilになるから、p2を見る手続きからも実体が解放された事は分かる。
ただ、こういうのは小手先の話で、あまりそういう事をしなくてもいいのがよい設計だと思う。
349:デフォルトの名無しさん
09/04/25 19:52:20
Delphi2009で、文字が半角か全角かを判断する方法が分からず困ってます。
これまでDelphi6でByteType関数を使ってたんだけど、挙動が変わってしまって・・・
350:デフォルトの名無しさん
09/04/25 20:18:50
leadbytesとかは使えないの?
351:デフォルトの名無しさん
09/04/25 21:11:09
WideStringなら
単純に文字コードを見ればわかるけど。
1バイトなら半角だし、2バイトなら半角カナかをチェックする
352:デフォルトの名無しさん
09/04/25 21:25:34
unicodeの事いってるんなら1バイトで全角幅もあるぞ
353:348
09/04/26 05:15:41
そういや>>348でp1^のメモリを確保してないや。
最初にNew(p1);、最終的に完全にいらなくなったらDispose(p1);が必要だった。
354:デフォルトの名無しさん
09/04/26 08:38:57
>>349
シフトジスに変換した後にチェックすればいいじゃん。
ウンコードを呪え。
355:DEKO
09/04/26 10:53:28
>>349
MECSUtils の MecsIsFullWidth() を使うといいと思います。
URLリンク(homepage1.nifty.com)
356:デフォルトの名無しさん
09/04/26 11:26:42
みなさんありがとう。
一度Ansiに変換して判定することにしました。
function IsHankaku(c: char): boolean;
begin
result := ( ByteType(AnsiChar(c), 1) = mbSingleByte );
end;
Delphi2009で文字を扱うときって、サロゲートとかエレメントとかコードポイントとかバイトとか、ややこしいですね(>_<)
357:デフォルトの名無しさん
09/04/26 11:43:42
訂正:
function IsHankaku(c: char): boolean;
begin
result := ( ByteType(AnsiString(c), 1) = mbSingleByte );
end;
358:デフォルトの名無しさん
09/04/26 11:45:47
Cみたいな言語から移ってきたとみた
359:デフォルトの名無しさん
09/04/26 11:47:11
>>356
それがユニコード糞、っていわれるゆえんだよ
360:デフォルトの名無しさん
09/04/26 16:03:07
>elphi2009で文字を扱うときって、サロゲートとかエレメントとかコードポイントとかバイトとか、ややこしいですね(>_<)
煽っている人がいるだけで、大した問題はないよ。
361:デフォルトの名無しさん
09/04/26 16:31:00
言語レベルで隠蔽されてしかるべき情報を考慮してコーディングしないといけないのは問題ではないの?
362:デフォルトの名無しさん
09/04/26 20:03:45
ウンコードが半角全角の区別がメンドイという致命的な欠点を持っているのは確か
363:デフォルトの名無しさん
09/04/27 02:24:25
win2000で2009使ってる人います?
デバッグの停止ボタン押した後再開出来なくないですか?
364:デフォルトの名無しさん
09/04/27 15:19:23
>>361
.NET も UTF-16 で全言語で同じていたらくだけど何を使えばいいの?
365:デフォルトの名無しさん
09/04/27 18:38:55
.NETがどうかは別に関係なくね?
Delphiの設計方針から言えば、隠蔽されててもおかしくない気はする
最近の開発にそこまで求める方が酷なのかもしらんが
366:デフォルトの名無しさん
09/04/28 08:52:33
TEditのOnChangeイベントでTEdit.Textを取り出すとき
IMEを起動して日本語入力してると変換した最初の文字だけが
TEdit.Textに入ってきたりしない?
コーディングが悪いのかなあ…。
Turbo Delphi Explorerにて。
367:デフォルトの名無しさん
09/04/28 11:08:27
>>366
Caption:=Edit1.Text;
これで最初の文字しか取得できてないってこと?
368:デフォルトの名無しさん
09/04/28 13:05:57
そもそも、文字に幅があると思ってる考え方が間違ってるので、正すのはおまえらの思考。
幅をもってるのはあくまでグリフって誰かいってなかったっけ?
369:デフォルトの名無しさん
09/04/28 14:20:46
>>367
Captionじゃないけどそんなかんじです。
FirefoxやiTunesみたいなインクリメンタルな検索を実装してるのだけど
たとえば「饅頭」と打ったときTEdit.Onchange内では「饅」しか入っていないので
打った「頭」を検索クエリに入れられず困ってるという話。
(ここまで書くと丸投げっぽいな…)
370:デフォルトの名無しさん
09/04/28 14:28:08
>>369
頭が入力された時にもう一度OnChangeイベントが発生してるだろ。
371:デフォルトの名無しさん
09/04/28 14:33:20
>>369
自分のはTurboじゃなくてDEL7なんだけど、
単純なコード書いて試した?
OnChangeにCaption:=Edit1.Textて書いて実行すると、確定するたびに
「まんじゅう」と入れて「まん」だけ確定すると「饅」表示、次に「じゅう」を
確定すると「饅頭」がちゃんと表示されるけど。
372:デフォルトの名無しさん
09/04/28 14:34:23
>>371
X OnChangeにCaption:=Edit1.Textて書いて実行すると、確定するたびに
「まんじゅう」と入れて「まん」だけ確定すると「饅」表示、次に「じゅう」を
○ OnChangeにCaption:=Edit1.Textて書いて実行すると、「まんじゅう」と
入れて「まん」だけ確定すると「饅」表示、次に「じゅう」を
373:デフォルトの名無しさん
09/04/28 15:00:33
>>369
変換を伴うインクリメンタルサーチやるときは、IMEのメッセージ捕まえた方が色々とやりやすい
374:デフォルトの名無しさん
09/04/28 15:33:14
コンソールアプリで出力に色つけるのってどうやるの?
無理やりドライバ入れてエスケープシーケンスでじゃなく正式なやり方で。
375:デフォルトの名無しさん
09/04/28 15:58:47
>>374
コンソールAPIを使う。
これをラップしてTurbo Pascalを模したcrt32っていうユニットが
URLリンク(www.kobira.co.jp) にあるから
こういうのを使うと簡単。
376:デフォルトの名無しさん
09/04/28 21:14:17
>>368
学者の詭弁乙
377:369
09/04/28 23:52:39
いろいろレスどもです。
確かにCaption変えるだけだと問題ないっすね。
イイワケにならんけど入れてまだ一週間くらいなんで
ヘンな記述してる可能性も捨て切れません。
OnChangeのたびにSQLiteぶん回すのがキツイのか
単純な記述ミスがあるのか、もう一度じっくり眺めてみて
どうしようもなかったらIMEのメッセージ(ってのも初めて見る世界)
の線でぐぐってみます。
378:デフォルトの名無しさん
09/04/29 05:14:54
IEやFireFoxから画像をドラッグ&ドロップされたのを受け取るには、どうしたらいいもんでしょうか・・。
379:デフォルトの名無しさん
09/04/29 07:33:26
OLEを使う
どっかにそういうコンポがあったからそれ使うと簡単にできると思う
380:デフォルトの名無しさん
09/04/29 21:04:08
procedure ahya;
begin
ahya;
end;
381:デフォルトの名無しさん
09/04/29 22:06:42
stack overflow
382:デフォルトの名無しさん
09/04/30 08:39:33
>>377
> OnChangeのたびにSQLiteぶん回すのがキツイのか
383:デフォルトの名無しさん
09/04/30 13:01:08
Cのsystem()関数ってないの
384:デフォルトの名無しさん
09/04/30 16:04:09
つWinExec
385:デフォルトの名無しさん
09/05/01 10:30:37
VirtualListViewに256x256のサムネイル画像を並べているのですが、StretchBlt
で
縦横比を変えずに縮小するために
JpegをTPictureで読み込んでBMP.Assignするときに凄く時間がかかってしまいます
最初は中村氏のBitmapUtils.Stretchを使ってからStretchBltしていましたからもっと時間がかかっていました
TVirtualExplorerEasyListviewなどはエクスプローラ並みのスピードで表示されるので方法次第だと思うのですが
ソースがないので手法が分かりません
どの方向で考えたらいいでしょうか?御指南ください
386:デフォルトの名無しさん
09/05/01 13:43:04
>>385
TJpegImageのScale使うか、
写真ならExifのサムネイルを読み込むか。
387:デフォルトの名無しさん
09/05/01 14:21:28
ありがとうございまし、そんなのもあるのですね
D2009のJpeg,GIFImg,pngimageを使っているので型によって縮小方法を変えるんですね
ググったら
URLリンク(jane.s89.xrea.com)
がでました。サンプルソ-スも生きていて落とせましたので読んでみます
でも、usesするだけでTImageとかでpngとか読めるんだから(これが凄いけど)
TImageListとTListViewも対応してくれるのが一番嬉しいんですよね
388:デフォルトの名無しさん
09/05/01 14:23:12
ソースだと思ったらJane本体だったorz
これだけがヒントですね
188 :Jane使いの名無しさん:05/07/27 00:00:41 ID:6kBZoROZ
>>174
・TJpegImage.Scale //←基本的にこれ
・TbitmapはDIBにする
・Jpeg.pasとiijのライブラリ改造
TApiBitmapとTBitmapで検索して掛かったとこちょっと
変えてみただけ
389:デフォルトの名無しさん
09/05/01 18:24:11
つGDI+
390:デフォルトの名無しさん
09/05/02 14:22:24
>>385
ちなみにサムネイル生成処理はちゃんと別スレッドでやってる?
画像ファイルが1000超えるような場合のエクスプローラの挙動見れば分かるけど、
非同期でやらないとどれだけ高速化しても厳しいと思うよ
391:デフォルトの名無しさん
09/05/02 19:20:06
そうですね、10個表示されてたらいくつも平行してサムネイルが描画されていってますものね
私もスレッドはやってみようとしかけたのですが、結局ImageListに登録する所あたりで挫けてしまいました
スレッドCreateでFileName、サムネイルの大きさを渡してBitMapを返してもらうのか(どうやって?)
スレッドの中でImageListにAddするのか
ListView.OnDataHintとスレッドがどんなお付き合いにしたらいいのかが分からないのです
あ、ちなみに>>389さんのGDI+は試したらずいぶんと速くなりました
392:デフォルトの名無しさん
09/05/02 20:16:40
CなどのコードをDelphiへ移植する時、Delphiで使えない識別子があった場合はみなさんどうしてますか?
393:デフォルトの名無しさん
09/05/02 21:58:43
comboboxのitemを右クリックしたらポップアップメニューを出したいんだけど、
どうしたら良いですか?
ContextPopupにPopupmenu1.Popup(X,Y)ってやっても何も起こらないです。
394:393
09/05/02 22:27:06
事故レスです。
レジマネジャーって言うフリーのコンポの
バグみたいです。
新規でテストプログラムかいたら出来ました。
395:デフォルトの名無しさん
09/05/03 19:27:46
>>391
実際にスレッド内部からImageList.Add呼んだら問題が起きた?そこまでやったの?
とりあえずぐちゃぐちゃになってもいいからやってみないことには問題点も分からないじゃない
396:デフォルトの名無しさん
09/05/03 22:11:13
やってみました。
何度も暴走させながらも(スレッドってまともに動かしたことがないもので)出来ました
目に見えるItemが同時に読み込まれている感がないのでまだまともに出来ている
ワケではないのでしょうが取り敢えず正確に表示できて明らかに今までより
表示速度は速くなりました(4000Filesほど読み込ませても数秒でした)
ありがとうございました
397:デフォルトの名無しさん
09/05/03 23:11:33
マルチスレッド歴1ヶ月のおいらがわかる事はとりあえず、
ImageList.Addメソッドの呼び出しは最低限、クリティカルセクションなりを用いて排他制御
しなきゃいけなさそうと言う事だけ。
後はわかんない。ぷぎゃ。
CriticalSection.Accuire;
try
ImageList.Add
finally
CriticalSection.Release;
end;
398:デフォルトの名無しさん
09/05/04 00:36:07
いや、いらないからw
399:デフォルトの名無しさん
09/05/04 01:01:10
>>397だけど、今、具体的にImageListのAddメソッド追ってみたけど、
内部でHandleNeededが呼ばれて、そのHandleNeededでフィールドのFHandleを参照しているから、
下手すると、
procedure TCustomImageList.HandleNeeded;
begin
if FHandle = 0 then CreateImageList;
end;
で、CreateImageListに複数のスレッドが同時に突入すると、イメージリストのハンドル
が複数作成され、迷子になっちゃわない?
ハンドルリークだから、まぁ、そこまで被害拡大しないと思うけど。
400:デフォルトの名無しさん
09/05/04 01:12:08
ああ、というか、そもそも前提がお互い違うのかもね。
おいらの場合は、サムネイル作成するサブスレッドでImageListのAddメソッド
呼ぶ事を前提にしてた(それで出来るか分からないけど、ぷぎゃ)。
メインスレッドだけで、ImageList.Addメソッド呼ぶなら必要ないと思う。
401:デフォルトの名無しさん
09/05/04 01:42:09
勉強のため、勝手にちょっと作ってみたけど、今のおいらのレベルで作るとこんな感じかな。
TThumnailEvent = procedure (Sender: TObject; ABitmap: TBitmap) of object;
TThumnailer = class(TThread)
private
FFileName: string;
FSize: TSize;
FBitmap: TBitmap;
private
FOnThumnail: TThumnailEvent;
private
procedure CallOnThumnailEvent;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean; AFileName: string; ASize: TSize);
public
property OnThumnail: TThumnailEvent read FOnThumnail write FOnThumnail;
end;
402:デフォルトの名無しさん
09/05/04 01:43:02
で、実装は
{ TThumnailer }
constructor TThumnailer.Create(CreateSuspended: Boolean; AFileName: string; ASize: TSize);
begin
FFileName := AFileName;
FSize := ASize;
FBitmap := TBitmap.Create;
inherited Create(CreateSuspended);
end;
procedure TThumnailer.CallOnThumnailEvent;
begin
if Assigned(FOnThumnail) then
FOnThumnail(Self, FBitmap);
end;
procedure TThumnailer.Execute;
begin
// サムネイル作成処理
// ごにょごにょ
if Assigned(FOnThumnail) then
Synchronize(CallOnThumnailEvent); // VCLのメインスレッドど同期を取る
FBitmap.Free;
end;
403:デフォルトの名無しさん
09/05/04 01:46:47
メインのVCLスレッドでは、
procedure TMainForm.Button1Click(Sender: TObject);
var
Thumnailer: TThumnailer;
begin
Thumnailer := TThumnailer.Create(True, FileName, Size, Bitmap);
Thumnailer.FreeOnTerminate := True; // 自動破棄
Thumnailer.OnThumnail := OnThumnail;
Thumnailer.Resume;
end;
procedure TMainForm.OnThumnail(Sender: TObject; ABitmap: TBitmap);
begin
if ABitmap <> nil then
ImageList.Add(ABitmap);
end;
とか。ListView.OnDataHintとかは良くわかってないので省略。
404:デフォルトの名無しさん
09/05/04 01:47:39
Thumnailer := TThumnailer.Create(True, FileName, Size, Bitmap);
は
Thumnailer := TThumnailer.Create(True, FileName, Size);
だった。orz
405:デフォルトの名無しさん
09/05/04 01:51:34
「こんなクラス名は嫌だ」