■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50

monazilla

305 :turbo type D@monazilla :2001/02/19(月) 13:29
エクスプローラのListViewで
項目の並び替えなどがDrag&Dropで出来るが
あれを実装するのは簡単なのでしょうか?

306 :turbo type D@monazilla :2001/02/19(月) 13:41
いまさらだが>>28
のクラス実装はやっぱり正しいな。

>>97のオレの発言は撤回したい。

実装していったらなんとなくわかった。未熟者だ。欝だ氏脳。

基底クラスにListとダウソメソッドが欲しい。

が今更だしなんとかなりそうなので突き進む。

307 :>305 :2001/02/19(月) 14:04
HeaderControl+ListBoxのOwnerDrawでやれば簡単にできるけど
それだとListViewの利点を放棄しちゃうことになるか。

308 :turbo type D@monazilla :2001/02/19(月) 15:19
>>307
なんかあのエクスプローラの動作っていかにもAPIでデキマスデー
といわんばかりの動作だから実現させたいな。
・・しかしそんな枝葉にこだわっていたら完成しないから
いずれ誰かに実装してもらう事にしよっ。

あと、エクスプローラListView/vsReportの上下の三角マーク▽△
これもAPIだと思うのだがどうやるのだろう。

誰か教えてね。

309 :turbo type D@monazilla.org(藁 :2001/02/19(月) 17:55
なんか、オレばかり書き込んでんだけど....
槍田氏悩した方が逝ってヨシですか?

スレ一覧取得コードは出来ました。
ローカルにデータさえあればぽんぽんと
スレ閲覧が出来るようになった。

レスはまだなので
次はdatの解析する.


ヒロユキ@ギコナビさんやかちゅ〜しゃ
などで実装されているように
ローカルの部分とオンラインの部分の
兼ね合わせをどうやるといいのかが
よくわからない。

310 :gikozilla :2001/02/19(月) 17:59
全然進んでません。。。

>>309
>ローカルの部分とオンラインの部分の
>兼ね合わせをどうやるといいのかが
よくわからないけど、
o オンラインモードの場合
スレッドを読み込みに行く時.datが更新されているかチェックする。

o オフラインモードの場合
ローカルにデータがあればそれを表示する。
なければ、読み込みに行く。

ローカルのデータを優先するかどうかの設定??


311 :デフォルトの名無しさん :2001/02/19(月) 18:27
>>305 >>307
少なくともMFCではListViewにスタイルを設定するだけでできます。
コモンコントロールの機能のようなので、Delphiもおなじでしょう。

312 :デフォルトの名無しさん :2001/02/19(月) 18:29
当面問題無いと思うけど、とりあえずリンクしとく。
http://teri.2ch.net/test/read.cgi?bbs=accuse&key=968944428&nofirst=true&st=307

313 :turbo type D@monazilla.org(藁 :2001/02/19(月) 18:54
エクスプローラの詳細表示で
[名前|サイズ|種類|更新日時]
これを自由に入れ替える機能。

>>311
その割にベキ2にも実装されていないのだが、
作者の趣向と合わないだけかな?
それともOS依存か__

>>310サンクス。
高速化は先送りして、とりあえず
遅くてもナビゲートできるように
した方がいいんですかね。

ちょとコードが大きくなってくると
クラス設計の重要度がすごく増しますね。
ダウンロードクラスなんて実装しておいた方がいいのだろうか。
全くわからん。

314 :デフォルトの名無しさん :2001/02/19(月) 19:11
>その割にベキ2にも実装されていないのだが、
>作者の趣向と合わないだけかな?
>それともOS依存か__
確かに、コモンコントロールのバージョンには依存しますね。
MSDNにバージョンxxx以上とかかかれてましたし。
でも、多分IE4を入れてれば大丈夫だったし、IEコンポ使うってことは
IE4必須なので問題ないと思います。と思って俺はつけた>2chブラウザに
リストにボールドフォントとか使うときはオーナードローになると思うけど
そのときにはカラムの並び順も考慮した描画ルーチンにしないといけないのが
めんどうなところ。


315 :名も無き詩人さん :2001/02/19(月) 20:27
板一覧を取得して、
最初の板の、最初のスレッドの、最初のレスを
標準出力に書き出す最小限のPerlかRubyのサンプルが、
資料として欲しいなと思う今日この頃。

316 :gikozilla :2001/02/19(月) 20:40
>>315
作ってみましょうか?


317 :gikozilla :2001/02/19(月) 20:55
作りかけてるけどwgetとか外部のコマンド使いまくってるから
使い物にならないかも。。。

とりあえず板一覧は
http://www.2ch.net/board.txt
http://www2.ocn.ne.jp/~luckland/text/board.txt
にありますね。


318 :名も無き詩人さん :2001/02/19(月) 21:25
>作りかけてるけどwgetとか外部のコマンド使いまくってるから
>使い物にならないかも。。。
wget使うのはなお宜しいですねぇ。
Windowsには標準でついていないのがイタいけど。

>http://www2.ocn.ne.jp/~luckland/text/board.txt
これはオフィシャルなものですか?

319 :デフォルトの名無しさん :2001/02/19(月) 21:53
今更確認するまでもないと思いますが、
出来るだけread.cgiを呼ばないように努力したいですね。
http://teri.2ch.net/test/read.cgi?bbs=saku&key=979695762&st=436&nofirst=true
最も負荷がかかっているのはI/Oだという話もありますが、
read.cgiは行数を数えるため、ファイル全体を読んでいると思われます。
頑張って差分GETにしましょう。

320 :デフォルトの名無しさん :2001/02/19(月) 21:56
http://www.2ch.net/board.txt
↑これ、オフラウ用に公式アナウンスされているけど、
むちゃくちゃ古いですよ。全然更新されてないです。

321 :ドメイントレヤ :2001/02/19(月) 22:06
負荷をちょっとでも軽減するために
http://salad.2ch.net/bbstable.html を変換して、
http://monazilla.org/board.txt に置いとくとか。

322 :デフォルトの名無しさん :2001/02/19(月) 22:21
WinInetはnバイト目以降を取得とかってできるの?
CreateFile, ReadFileでも試してみようかな。

323 :デフォルトの名無しさん :2001/02/19(月) 22:37
>>314
2chブラウザの方でしたか!
ありがたや・・・

324 :デフォルトの名無しさん :2001/02/19(月) 22:41
ボード一覧は結局どれ?
http://salad.2ch.net/bbstable.html なくなった??
http://www.2ch.net/bbstable.html こっち?
http://www2.ocn.ne.jp/~luckland/text/board.txt オフィシャル?
http://www.2ch.net/board.txt 古い!
http://www.2ch.net/bbsmenu.html 取得面倒?


325 :ヒロユキ@ギコナビ :2001/02/19(月) 23:16
ちょっとヘコんだけど、書きに来ました。

>>313
>エクスプローラの詳細表示で
>[名前|サイズ|種類|更新日時]
>これを自由に入れ替える機能。

勘違いかもしれないですけど、
TListViewのFullDragをTrueじゃだめかな?

>>322
WinInetって自分で何処までイジれるのか分からないので、
はずしているかも知れませんが、ヘッダにRange: bytes=xxx
ってすると差分取れます。
HTTPの本を会社に置きっぱなしなので、間違ってるかも。
「HTTP詳解」っていう本だったかな?
あと、インターネットテクノロジ2001年1月号にも、HTTPのことが
ちらっと載っていたような気がします。(これも会社に置きっぱなし)


326 :フッサール少佐 :2001/02/19(月) 23:21
>>302
フム、なにやら板名だけじゃかぶっている所があるそうなんで、
そっちの方が安全カモ。

>>303
実はあのタブが好きなんだな。
あと過去ログようのタブが必要と見た。
別にお気に入りで過去ログフォルダを作ってもいいんだけど。

>>322
たしか出来たはず。

327 :デフォルトの名無しさん :2001/02/19(月) 23:27
>ヒロユキ
へこまんでい〜よ〜。
暇なときでいいから、またアドバイスに来てちょ。

ほんでもって、HTTP1.1日本語訳へのリンク
少し古いのと若干わかりにくい部分があるので、rfc2616の原文も見るべし
http://www.geocities.co.jp/SiliconValley-PaloAlto/5694/rfc/rfc2068-ja.html

328 :フッサール少佐 :2001/02/19(月) 23:31
>>322
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page14.html
で、どう?
ヒロユキ@ギコナビの方法でもOK

329 :フッサール少佐 :2001/02/19(月) 23:31
>>322
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page14.html
で、どう?
ヒロユキ@ギコナビの方法でもOK

330 :フッサール少佐 :2001/02/19(月) 23:32
ありゃ?2重火気粉スマソ

331 :デフォルトの名無しさん :2001/02/19(月) 23:36
ヒロユキさんや、幸運の国さん、2chブラウザの作者さんらの
積極的な参加がこのプロジェクトを活気付けていると私は思います。
しょーもないあおりは無視で行きましょう。

332 :フッサール少佐 :2001/02/19(月) 23:43
>>319
全く同感。
HEADメソッドでチェックして、更新済みのものは差分取得がベストかな。
あるいは、datディレクトリの一覧を取得して日付で更新をチェックするとか。
Perlは重いっす。

333 :フッサール少佐 :2001/02/19(月) 23:48
>>308
ListViewのヘッダーカラムのDCを取得してそのCanvasにオーナードローすれば、OK。

334 :ヒロユキ@ギコナビ :2001/02/20(火) 00:06
>>332
If-Modified-Since:すると、HEADとらなくても、直接GETでOKです。
更新されていなければ、更新されていないコード(304)が帰ってくるので、
未更新が検出できます。


335 :デフォルトの名無しさん :2001/02/20(火) 00:08
monazillaのページ見たけど、
どちらかと言うとmozillaよりGNU-2chといった感じだなァ…。

いや、なんとなくそー思っただけ。

336 :フッサール少佐 :2001/02/20(火) 00:29
>>334
おお、それはいい事を聞いた。マジメにRFC読んでみるかな。

337 :314 :2001/02/20(火) 00:44
>>334
更新検出なら、dat/ディレクトリ一覧の.datファイルのタイムスタンプを見ればわかるよ。
今、俺も実装してるところ。
subject.txtとdat/の2回アクセスしないといけないのが難点。

338 :デフォルトの名無しさん :2001/02/20(火) 00:55
でも、tako鯖はdat/を読めないので注意してね。

339 :デフォルトの名無しさん :2001/02/20(火) 01:02
>GET /tech/dat/?M=D HTTP/1.0
ね。

それと、
>GET /tech/dat/981726544.dat HTTP/1.0
>Host: piza.2ch.net
>Range: bytes=62298-
>If-Modified-Since: Thu, 15 Feb 2001 09:50:45 GMT
>Connection: Keep-Alive
>
↑これ(実際に送った例)をレスポンスを待たないで、
一括してリクエストするとメチャメチャ早いよ。
parseがかなり面倒だけどね。
以上、時々だけ名乗る98でした。

340 :デフォルトの名無しさん :2001/02/20(火) 03:37
>>339
Keep-Aliveにするといつ終ったか分かんなくない?
parseしつつ表示ってんだったらいいだろうけど、
それって結構面倒な気がする。
つか、Keep-Alive にしてリクエスト送りまくるって話なんかな。

341 :turbo type D@monazilla.org(藁 :2001/02/20(火) 09:52
>>ヒロユキ
うん、へこまなくてもいー。いー。

>>324
>>333少佐('w')ゞ
ありがとうゴザイマフ
しかしAPI直叩きで出来る(とオモワレ)のを
オナドローするのはちょぴ嫌でございます。

なんかめちゃくちゃ詳しい方々が集まってきてますね。

342 :turbo type D@monazilla.org(藁 :2001/02/20(火) 10:26
しつもーん。
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page2.html
をDelphiに書き直した。

uses WinInetを加えて

procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 lpBuffer: array[0..1024+1] of Char;
 dwBytesRead: DWORD;
begin
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
   while true do
   begin
    dwBytesRead := 1024;
    InternetReadFile( hService, @lpBuffer, 1024, dwBytesRead );
    if dwBytesRead = 0 then break;
    lpBuffer[dwBytesRead] := #0;
    Memo1.Lines.Add( lpBuffer );
   end; //while
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

しかし、普通に書き直した"INTERNET_OPEN_TYPE_DIRECT"では読み込まない
"INTERNET_OPEN_TYPE_PRECONFIG"にしたら読み込んだ。なぜ?

Indyやめて、WinInetにしようかしら?( w ;)
要望が多ければそうする。

343 :turbo type D@monazilla.org(藁 :2001/02/20(火) 17:07
>>342
よくわからないけど
プロキシの問題だろうか。
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page9.html

WinInetのHTTPページの
Page2-6,8はPascalに移植ったので
誰か必要なら逝ってくれ。

344 :デフォルトの名無しさん :2001/02/20(火) 17:31
もしかしてあぼーんすると.datのファイルサイズ変わっちゃう?
だとすると差分の取得がおかしくなりそう。

345 :turbo type D@monazilla.org(藁 :2001/02/20(火) 17:57
あぼーん、について教えて。

本当に全くわからない。(藁

かちゅーしゃ使ってるのにね。

346 :デフォルトの名無しさん :2001/02/20(火) 18:12
>>344
かわるよ。そこがこの手のツールが各自工夫するところ。
さらにあぼーんには、「ノーマルあぼーん」(全フィールドがあぼーんになる)
と、「サイレントあぼーん」(datの行ごと削除、痕跡が残らない)があります。
固定長あぼーん(余ったところを空白などで埋める)の要望もあるが、
マイノリティなツールのために2ch側に対応を求めるのは本末転倒だと思います。
現在、各ツールののあぼーんへの対処は、
1.あぼーんを検出したら、dat全部読み直し
2.あぼーんを検出したら、少し前から読み直して、テキスト比較で前回の
 バイトオフセットを探して読み込み
3.datの差分読み込みはしない
あたりになっております。あぼーん検出は保存位置から読み出して、そこが
行頭か否かで判断かな?
ちなみに、俺(2chブラウザ)は3。差分読み込みやる気なし。
dat読みは全読み込みのときのみ。


347 :デフォルトの名無しさん :2001/02/20(火) 18:39
WinInetで.datファイルを10分割して同時にダウソしたら
超高速ダウソできる???

348 :turbo type D@monazilla.org(藁 :2001/02/20(火) 19:48
アプしました。
モナプロ〜ラ〜もWinInetに変えてしまったので

多分コンポーネントのインストは一切必要なく
IE4以上、D4/D5環境にてコンパイルできるようになった。

http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/monaplorer.lzh

どの板でもボード一覧を取得できるようになった。

ネットに接続していない状態で動かしても動かないカモ。

でも、オレがタコなのでメモリリークしているみたいだ。
メモリクバグを発見する方法知っている人、教えて。

349 :turbo type D@monazilla.org(藁 :2001/02/20(火) 19:50
>>ボード一覧
スレ一覧の間違い。

腹減った。

350 :デフォルトの名無しさん :2001/02/20(火) 20:18
>でも、オレがタコなのでメモリリークしているみたいだ。
>メモリクバグを発見する方法知っている人、教えて。
アプリ終了時にメモリリークの個数を報告するユニット。
http://www.sakaki.keiaikai.or.jp/convroom/webconv.exe/read?No=9666&Response_Root=9632


351 :フッサール少佐 :2001/02/20(火) 22:05
>>348
オレは
http://www.yks.ne.jp/~hori/MemCheck.html
これを使ってるよん。かなり便利。

352 :デフォルトの名無しさん :2001/02/21(水) 00:34
更新チェック&差分ダウンロードできるなら巡回機能付けてね

353 :フッサール少佐 :2001/02/21(水) 00:46
>>302
ログはドメイン名を元にするようにした。
例えば、yahoo板はこんな感じ。
\logs\salad.2ch.net.yahoo\977080207.dat
これならかぶらんだろう。

354 :フッサール少佐 :2001/02/21(水) 00:48
>>352
無ければ、自分で作るのだ。それがオープンソースの醍醐味でもある。
つーわけで、自分で作れ。Delphi買ってコイ。

355 :デフォルトの名無しさん :2001/02/21(水) 01:05
同意。
&nbsp変換もそうだが、このスレに「○○きぼーん」は良くない。
プロトタイプのコードでも作って、導入を促すようにすべき。

356 :355 :2001/02/21(水) 01:07
最後の;つけなかったのに、nbspが変換されちった。

357 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:42
確かに、実装困難なものを
現時点で、きぼーん、されてもつらいものがある。
差分ダウソ&更新はまーだ先ね。マターリいこうぜ。

メニュー項目くらい
誰か案をだしてほしい。

>>356オレもおろろいた。

>>350&少佐、
メモリク情報サンクス。

リクしているかどうかも不確かながらデバッグにとりかかる。

自分で無理だったら
Tree型Dataの破棄と更新を報告させてもらうね。


358 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:45
さて、書記さんも更新ネタがなさそうなので
昨日まとめた、WinInetのDelphi仕様コード公開。
連続カキコすまそね。

全コードusesにWinInetを追加するだけで動作するはず。

INTERNET_OPEN_TYPE_DIRECT

INTERNET_OPEN_TYPE_PRECONFIG
は適当に置き換えてくれ。MemoとかButtonとかも適当に。




359 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:46
//HTML/テキストファイルをHTTPで読み取る
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page2.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 lpBuffer: array[0..1024+1] of Char;
 dwBytesRead: DWORD;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
   while true do
   begin
    dwBytesRead := 1024;
    InternetReadFile( hService, @lpBuffer, 1024, dwBytesRead );
    if dwBytesRead = 0 then break;
    lpBuffer[dwBytesRead] := #0;
    Memo1.Lines.Add( lpBuffer );
   end; //while
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

360 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:47
//HTML/テキストファイルをHTTPで読み取りファイルに書き出す
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page3.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 fp: TextFile;
 hSession: HINTERNET;
 hService: HINTERNET;
 lpBuffer: array[0..1024+1] of Char;
 dwBytesRead: DWORD;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
  begin
   AssignFile(fp, Edit2.Text);
   Rewrite(fp);
   while true do
   begin
    lpBuffer := '';
    {↑C++ではchar lpBuffer[1024+1]と
      変数確保されていると同時に初期化されているので
      Delphiでも初期化する}
    dwBytesRead := 1024;
    InternetReadFile( hService, @lpBuffer, 1024, dwBytesRead );
    if dwBytesRead = 0 then break;
    Write(fp, lpBuffer: dwBytesRead);
    {↑dwBytesRead=StrLen(@lpBuffer)になっている}
   end; //while
   CloseFile(fp);
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

361 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:47
//HTML/テキストファイルをHTTPで読み取りファイルに書き出す
//パフォーマンスがあがっているらしい
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page4.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 fp: TextFile;
 hSession: HINTERNET;
 hService: HINTERNET;
 lpBuffer: PChar;
 dwBytesAvailable, dwBytesRead: DWORD;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
  begin
   AssignFile(fp, Edit2.Text);
   Rewrite(fp);

   InternetQueryDataAvailable( hService, dwBytesAvailable, 0, 0 );
   GetMem(lpBuffer, dwBytesAvailable+1);
   InternetReadFile( hService, lpBuffer, dwBytesAvailable, dwBytesRead );
   Write(fp, lpBuffer: dwBytesRead);
   FreeMem(lpBuffer);

   CloseFile(fp);
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

362 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:48
//ネット上のファイル情報を得る
//サーバーに依存する
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page5.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 ReceiveBuffer: array[0..255] of Char;
 dwSize, Reserved: DWORD;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
  begin
   ReceiveBuffer := '';
   dwSize := sizeof(ReceiveBuffer);
   Reserved := 0;
   HttpQueryInfo(hService, HTTP_QUERY_RAW_HEADERS_CRLF, @ReceiveBuffer, dwSize, Reserved);
   Memo1.Lines.Add( String(ReceiveBuffer) );
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

363 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:48
//ファイルの作成日、サイズを得る
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page6.html
//より移植
procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 LastModified: SYSTEMTIME;
 FileSize: Longint;
 dwSize, Reserved: DWORD;
 ft1, ft2: FILETIME;
 t: SYSTEMTIME;
 buf: String;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
  begin
   dwSize := sizeof(LastModified);
   Reserved := 0;
   HttpQueryInfo(hService, HTTP_QUERY_LAST_MODIFIED or HTTP_QUERY_FLAG_SYSTEMTIME,
               @LastModified, dwSize, Reserved);
   dwSize := sizeof(FileSize);
   Reserved := 0;
   HttpQueryInfo(hService, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER,
               @FileSize, dwSize, Reserved);

   SystemTimeToFileTime( LastModified, ft2 );
   FileTimeToLocalFileTime( ft2, ft1 ); //かなり適当
   FileTimeToSystemTime( ft1, t );
   buf := Format('作成日:%4d/%02d/%02d %2d:%02d:%02d サイズ:%dバイト',
          [t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, FileSize]);
   Memo1.Lines.Add( buf );
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

364 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:49
//ヘッダ情報を追加する
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page7.html
//より移植したけど、何がどうなっているのか理解してません。
procedure TForm1.Button1Click(Sender: TObject);
var
hSession: HINTERNET;
hService: HINTERNET;
szHead: String;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
if Assigned( hSession ) then
begin
szHead := 'Accept:*/*'+#13#10#13#10;
SetLength( szHead, Length(szHead) );
hService := InternetOpenUrl( hSession, PChar(Edit1.Text), PChar(szHead), 0, 0, 0);

if Assigned( hService ) then
begin
//....
end;
InternetCloseHandle( hService );
end;
InternetCloseHandle( hSession );
end;

365 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:49
インデントミスったので、再掲

//ヘッダ情報を追加する
//http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/page7.html
//より移植したけど、何がどうなっているのか理解してません。
procedure TForm1.Button1Click(Sender: TObject);
var
 hSession: HINTERNET;
 hService: HINTERNET;
 szHead: String;
begin
// hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0 );
 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
 if Assigned( hSession ) then
 begin
  szHead := 'Accept:*/*'+#13#10#13#10;
  SetLength( szHead, Length(szHead) );
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), PChar(szHead), 0, 0, 0);

  if Assigned( hService ) then
  begin
   //....
  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

366 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:50
//インターネット接続が出来るかどうか調べる
//>0 then
 begin
  ShowMessage('インターネットに接続できていません');
 end;
end;

367 :turbo type D@monazilla.org(藁 :2001/02/21(水) 09:51
ヲワリ。

では本日も四露氏苦

368 :turbo type D@monazilla.org(藁 :2001/02/21(水) 10:56
>>350
>>351
これって同じ作者なのかな?
どちらも試したがメモリリーク起きてませんでした!

d( °w )
いー感じ♪

369 :turbo type D@monazilla.org(藁 :2001/02/21(水) 12:08
書記さん、monazilla.org(藁 のダウンロードの説明の所を
こんな風に修正してくれると、わかりやすいかな。

> アップロードしてあるファイルをダウンロードする方法
>
> Monazilla Studio をダウンロードする。
> 適当なフォルダで解凍する。
> index.html を開く。
> ダウンロードをクリック。
> 入ってよしボタンをクリック。
 すると シリコンバレーオークランド通り/9028 monazilla が開く
 アップされたソースは[src]フォルダに入っているので
 [src]ボタンを押す
> するとアップされたソースの一覧が出てくるのでダウソしたいファイル名の横のほ
> うにある 表示 ってとこをクリックする。
>
> 以上

370 :turbo type D@monazilla.org(藁 :2001/02/21(水) 19:24
全然ヵキコがない。!

ウツダシノウ

371 :turbo type D@monazilla.org(藁 :2001/02/21(水) 19:35
>/* 書記さんは会社から 2チャンへの書き込みがなぜかできないのでロムってます、すんませんー */

そうですか。
仕事していないのは俺くらいですか。(´∀`)

372 :デフォルトの名無しさん :2001/02/21(水) 19:47
>少佐
TWebBrowserで遅い問題は解決したでしょうか?
もしかしたら文字列連結の時間が原因かもしれません。
・・・外してたらごめんなさい。
BCBの場合、単純にAnsiStringを数百回以上連結すると、
その部分で異常に時間を食います。
std::stringでreserve()すると、(その部分は)嘘みたいに高速になります。
でも、実はAnsiStringでcapacityを増やす方法を知らないんですが。

373 :turbo type D@monazilla.org(藁 :2001/02/21(水) 20:27
モナーアイコンを作成してくれない?誰か。

374 :turbo type D@monazilla.org(藁 :2001/02/21(水) 20:33
あと、32x32のaviもキボーン。
monazilla.org公式っていうのがいいなあ。

いま、かちゅしゃのaviで試しているから、
なんか悲しくて切なくて生産性が下がっています(藁

アイコンデザイン探しにモナー板逝ったら
藁ってしまうので仕事中にはとても探せないや。

375 :Dax :2001/02/21(水) 22:29
またまた Delphiで申し訳ないんですが
板一覧をつくることに特化したクラス、
「ホットゾヌ」をアップしました。

インターネット接続は
「Wininet」「ICS(HttpCli)」「NMHTTP」「Indy(IdHTTP)」の
4種類に対応し別々のユニットで用意しました。
使い方などは HTMLを用意します。

http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/hotzonu_010.lzh

376 :書記さん :2001/02/21(水) 23:40
>2ch
うちだけかな?


377 :turbotypeD@モナぢら :2001/02/22(木) 00:03
>>375
おぉ。ぞくぞくと開発者が!
しかも別ユニットまで!
勢いでレス一覧までやってくださらぬか、(w
ってそれは贅沢かな。

別ユニット的アプローチはいずれ参考にさせていただきます。

モナプローラではすでにスレ一覧まではやってしまったしなあ。

次はWebBrowserを簡単に作れるクラス/ユニット実装予定(は未定)
かちゅ〜しゃの1タブごとに[戻る]ボタン機能がついた
イメージで作ってます。

378 :turbotypeD@モナぢら :2001/02/22(木) 00:09
>>375
おぉ。ぞくぞくと開発者が!
しかもコンポ別ユニットまで!
勢いでレス一覧までやってくださらぬか、(w
ってそれは贅沢かな。

別ユニット的アプローチはいずれ参考にさせていただきます。

モナプローラではすでにスレ一覧まではやってしまったしなあ。

次はWebBrowserを簡単に作れるクラス/ユニット実装予定(は未定)
かちゅ〜しゃの1タブごとに[戻る]ボタン機能がついた
イメージで作ってます。

>>書記さんいつもありがとう

379 :turbotypeD@モナぢら :2001/02/22(木) 00:09
2重火器子スマソ

380 :デフォルトの名無しさん :2001/02/22(木) 00:12
>>340
Content-Lengthを参照する以外に終端を知る方法は
なかったと思う。<Keep-Alive

381 :フッサール少佐 :2001/02/22(木) 00:35
>>372
>TWebBrowserで遅い問題は解決したでしょうか?

全く解決するめどは立っていないが、別の方法を使うことにより
逃げることにした。

>もしかしたら文字列連結の時間が原因かもしれません。

JavaもStringの文字の連結は注意だな。ちなみにStringBufferを使う。

>でも、実はAnsiStringでcapacityを増やす方法を知らないんですが。

Delphiの場合は、SetLengthかな。
遅い原因はそれもあるのだが、innerHTMLを使っているということであろう。
Writeで追加書き込みしていけばそこそこ速いのだが、画面クリアの仕方が
分からんのだ。つーか、TWebBrowserとかCOMとかは素人だったり…。


382 :turbo type D@monazilla.org(藁 :2001/02/22(木) 10:22
下げるわけにもいかんのでage

383 :デフォルトの名無しさん :2001/02/22(木) 10:30
上げるわけにもいかんのでsage

384 :turbo type D@monazilla.org(藁 :2001/02/22(木) 11:48
いわゆるタブブラウザやかちゅーしゃなどでは
WebBrowser部分はWebBrowserのインスタンスを沢山作って
いるのでしょうか?

385 :デフォルトの名無しさん :2001/02/22(木) 13:11
http://yasai.2ch.net/test/read.cgi?bbs=win&key=982224259
なんだか、かちゅーしゃの作者様の心がゆらいでらっしゃる。
協力してくれるかもage


386 :デフォルトの名無しさん :2001/02/22(木) 13:12
かちゅーしゃは複数のブラウザインスタンスをつくってるようです。


387 :turbo type D@monazilla.org(藁 :2001/02/22(木) 14:35
を、一応レス閲覧コードが書けた。(アプしてないけど)
初めて動作させるけどどきどきするなあ。



388 :turbo type D@monazilla.org(藁 :2001/02/22(木) 14:39
あ、まだメソッドを呼ぶActionが無かった。あせるな>ジブン

さて、今日もコード公開
誰でも作れるけど、誰かが作っていたら楽な関数
////////////////////////////////////////////////////////////
{  DataTimeToFmt2ch
  Fmt2chToDateTime
// 名前:turbo type D@monazilla.org(藁
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
聞いてアロエリーナ ちょっと言いにくいんだけど
聞いてアロエリーナ

ココカラノコードハ: 2ch形式の日付文字列"2001/02/09(金) 22:49"を
      TDateTimeと相互変換する
コウシン日ワ:  2001/02/22
ホカニ逝ットクコトハ:なにもなし

聞いてくれてありがと アロエリーナ♪
\________ _______/
         |/
         ∧_∧
   Ψ    (∀・ )
   □    (∩∩ノ)
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ }
const DayOfWeekJP: array[1..7] of String = ('日','月','火','水','木','金','土');

function DateTimeToFmt2ch(DateTime: TDateTime): String;
var
 Year, Month, Day: word;
 Hour, Min, Sec, MSec: word;
begin
 DecodeDate(DateTime, Year, Month, Day);
 DecodeTime(DateTime, Hour, Min, Sec, MSec);

 Result := IntToStr(Year) + '/' +
      Format('%.2d', [Month]) + '/' +
      Format('%.2d', [Day]) + '(' +
      DayOfWeekJP[DayOfWeek(DateTime)] + ') ' +
      Format('%.2d', [Hour]) + ':' +
      Format('%.2d', [Min]);
end;

function Fmt2chToDateTime(Fmt2ch: String): TDateTime;
var
 Year, Month, Day: word;
 Hour, Min, Sec, MSec: word;
begin

 try
  Year  := StrToInt(Copy(Fmt2ch, 1, 4));
  Month  := StrToInt(Copy(Fmt2ch, 6, 2));
  Day   := StrToInt(Copy(Fmt2ch, 9, 2));

  Hour  := StrToInt(Copy(Fmt2ch,16, 2));
  Min   := StrToInt(Copy(Fmt2ch,19, 2));
  Sec := 0;
  MSec:= 0;

  Result := EncodeDate(Year, Month, Day)
        + EncodeTime(Hour, Min, Sec, MSec);
 except
  raise ENichError.Create('日付変換が正しくねえぞ鰓(゚Д゚)ゴルァ');
 end;
end;
////////////////////////////////////////////////////////////

389 :turbo type D@monazilla.org(藁 :2001/02/22(木) 15:31
>>386ども。

よし。レス内容データ読み込みだけは確認出来た。

あとはどのようにしてWebBrowserに読ませようか
ファイルに落としてからNavigateするのはわかるが
直接Documentに落とす方法はさっぱりわからない。
(次からはTWebBrower組み込むからD5専用な。)
誰かオシエレ(態度デカ!)

現在はモナヂラスレの内容を読むために
単にhttp://piza.2ch.net/tech/dat/981726544.dat
を読んでいるのだがこれでいいのか?
read.cgiには迷惑かけずに最新情報を読むことになってる?


390 :turbo type D@monazilla.org(藁 :2001/02/22(木) 15:34
AVIファイルの作り方おしえてくれい。

391 :gikozilla :2001/02/22(木) 16:53
>>390
これはどう?使ったことないけど、、、
http://www.emurasoft.com/jp/emavi/index.htm

392 :turbo type D@monazilla.org(藁 :2001/02/22(木) 17:18
ふらりと見に行ったWin板で
"新2ちゃんねる用ブラウザ"
ってのが出てて、しかもめちゃ荒らされている...
http://yasai.2ch.net/test/read.cgi?bbs=win&key=982224259

ああ、哀れ

393 :turbo type D@monazilla.org(藁 :2001/02/22(木) 17:20
スレ先間違えた。
俺の方が憐れだ、宇津田ヒカル
>>391、どもアリガト

394 :turbo type D@monazilla.org(藁 :2001/02/22(木) 17:53
♪聞いてアロエリーナ ちょっと言いにくいんだけど
 聞いてアロエリーナ

   >>391
   すごく使い勝手わるいよ。 

  聞いてくれてあーりがと アロエリーナ♪
\______ ___________/
.          |/

  (○)      ∧_∧
  ヾ|〃     (∀・ ,,,)∩゛
   □.     (∩∩ , ⌒つ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄




395 :turbo type D@もなヂ :2001/02/22(木) 18:36
これがいいかも。
http://www.vector.co.jp/soft/win95/art/se169298.html

396 :Dax :2001/02/22(木) 22:21
>>388
ナイス!
汎用関数ライブラリつくりましょっか?

397 :119 :2001/02/22(木) 22:48
type
 TNichDownloadEvent = procedure(Sender: TObject; Index1, Index2: Integer)
  of object; // Sender.Lines[Index1..Index2]をダウンロードした
 TNichDownloadableObject = class
 public
  property Url: String;
  proeprty Lines: TStrings; // TStringsで扱ってくれると楽チンなんだが...
 
  proeprty OnStartDownload: TNotifyEvent;
  property OnProgressDownload: TNotifyEvent;
  property OnFinishDownload: TNotifyEvent;
 end;

 TNichDownloadType = (dtAll, dtDiff); // 全て取得・差分のみ取得

 // 抽象ダウンローダ
 TNichCustomDownloader = class
 protected
  FList: TObjectDeque; // TNichDownloadableObjectのインスタンスを保持
 public
 property UseProxy: Boolean;
  property Proxy: String; // '0.0.0.0:8080'という形式が楽チン

  procedure StartDownload(Nich: TNichDownloadableObject;
   Whole: Boolean = False; // 全て取得(FALSEなら更新チェック&差分取得)
   Deferred: Boolean = False // 順番を後回しにする
    ); virtual; abstract;
  procedure CancelDownload(Url: String);

  proeprty OnStartDownload: TNotifyEvent;
  property OnProgressDownload: TNotifyEvent;
  property OnFinishDownload: TNotifyEvent;
 end;

 // ローカルキャッシュダウンローダ
 TNichCachedDownloader = class
 public
  property Size: Integer; // カレントキャッシュサイズ
  property MaxSize: Integer; // 最大キャッシュサイズ
  property Directory: String;
   // キャッシュディレクトリ
   // こればっかりはレジストリで設定すべき
  procedure Clean(LeftSizeMB: Integer; option...); // キャッシュをクリア
  procedure Write(nich: TNichDownloadableObject);
 end;

 // HTTPダウンローダ
 TNichHttpDownloader = class
 public
 end;

 // FTPダウンローダはいらないか...

 // 2chダウンローダ
 // やることはcache&httpからLines:TStringsへダウンロードするだけ。
 // Linesの解析は委譲元(nich: TDownloadableObject)が行う。
 // 開発初期段階はシングルスレッド版(StartDownloadを呼び、ダウンロード完了後に制御を戻す。
 //   途中でApplication.ProcessMessagesを呼ぶかもしれない)
 // 差分取得は全て取得してしまう。
 // 完成したら、順次マルチスレッド・差分取得を実装していく
 TNichDownloader = class
 protected
  cache: TNichCacheDownloader;
  http: TNichHttpDownloader;
 public
  procedure StartDownload(Nich: TNichDownloadableObject;
   Whole: Boolean; Deferred: Boolean);
  begin
   // cacheとhttpを組み合わせてダウンロード
   cache.StartDownload(Lines, Url, Whole, Deferred); // こっちはその場で復帰するはず
   http.StartDownload(Lines, Url, Whole, Deferred); // こっちはスレッドでダウンロードを開始するだけ
   // nichのイベントの発生のさせ方は一考の余地あり
   // ダウンロードが終わったらキャッシュする。
   cache.Write(Nich);
  end;
 end;

398 :119 :2001/02/22(木) 22:53
例によって中身のないマルチスレッダブル(??)HTTP・キャッシュ
統合ダウンロードクラスを書いてみた。
HotZonuも良いがダウンロード・キャッシュ・プロクシ等の
コード・設定があちこちに散らばるのは面倒なので、
データをTStringsかstreamに統一して、
ダウンローダを板・スレリストクラスから分離すべきだと思う。
あとModel, Viewも意識的に切り分けないとね。
なんていってると遅くて使い物にならなくなるかもしれないが...

399 :フッサール少佐 :2001/02/22(木) 23:15
ちょっとだけ更新しました。
http://www.geocities.co.jp/SiliconValley-Cupertino/1026/lzh/giko0222.lzh

400 :ヒロユキ@ギコナビ :2001/02/22(木) 23:29
>>398
>あとModel, Viewも意識的に切り分けないとね。
>なんていってると遅くて使い物にならなくなるかもしれないが...
結構、重要ですよね。
でも、ウィンドウズのTreeViewだとどうしてもTreeView内にデータが入るので
ここをどうするかが問題になりそうです。
せっかくモデルを作成しても、タコTreeViewのお陰で複雑になります。
TreeViewとモデルの間に一つ挟めばいいのかな?
VirtualTreeViewなんてモードがあればいいんだけど。


401 :Dax :2001/02/22(木) 23:38
>>398
なるほど。
HotZonuもその形式に変更していきたいと思います。
なんか難しそだな。。。

402 :Dax :2001/02/22(木) 23:43
>>400
TreeViewのDataにオブジェクトを入れるのはまだいいと思います。
ノードと板スレオブジェクトを関連付けるクラスがあっても
いいかもしれませんがなんか複雑になりそう、、
逆に板やすれのオブジェクトがノードを持っているのはちょっと好きくないです。


403 :デフォルトの名無しさん :2001/02/22(木) 23:45
あんまりこってないのでテスト用の自家製のモナ AVIをアップしたよ。
http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/monaavi.lzh

↓こんな感じ
http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/mona.gif

404 :デフォルトの名無しさん :2001/02/23(金) 00:49
まえにこんなの作ったら、コードがかなり単純になった。
コードなくなっちゃったけど。
function SearchTreeNode(TreeView: TTreeView; Path: String): TTreeNode;

// あれば'\foo\bar\baz'を検索して返す
// なければ無理やり階層作って返す。
tn := GetTreeNode(TreeView1, '\foo\bar\baz');

316KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30