トップページ⇒tech
1001コメント431KB

monazilla

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
2ちゃんねる専用ログ巡回ソフト「モナヂラ(monazilla)」を
オープンソースでつくっちゃおーと言うプロジェクトです。
0002デフォルトのゲイツさんNGNG
>1
ソースは何処?
0003デフォルトの名無しさんNGNG
オープンソースなのに、ソースはまだ無い。
つーか誰も一行も記述してない!
0004デフォルトの名無しさんNGNG
企画倒れsage
つーかいまさらそんなもんが必要か?しかも2ちゃんねる専用?
0005デフォルトの名無しさんNGNG
>>4
つくることそのものが目的です。
0006デフォルトの名無しさんNGNG
作るんだったらふつーのGeckoブラウザきぼん
K-meleon対抗で
0007デフォルトの名無しさんNGNG
なんか予想通りの展開だな。
誰かがベースになるコードを一通り組んじゃわないと
先に進まないよ。
0008デフォルトの名無しさんNGNG
ベース。

int main(int argc,char* argv[]){
 return 0;
}
0009デフォルトの名無しさんNGNG
おれがメインを書いてやる

void main()
{
  while(1){
    sub() ;
  }
}
サブは誰か書いてくれ!

#誰かがmain()の型を突っ込んでくれますよーに・・・
00108NGNG
もろかぶったな。
00119NGNG
そうだね。。へへへ >8
じゃ定義文。

#define  MSG_MONA   "お前モナー"
0012デフォルトの名無しさんNGNG
import javax.swing.*;

class Monazilla{
 private JFrame frame;
 public Monazilla{
  frame = new JFrame("Monazilla");
 }
 public void itteyoshi(){
  //後は任せた
  frame.pack();
  frame.show();
 }
 public static void main(String args[]){
  Monazilla mona = new Monazilla();
  mona.itteyoshi();
 }
}
0013デフォルトの名無しさんNGNG
今更Javaかよ。
0014デフォルトの名無しさんNGNG
mozillaより重そう…
0015デフォルトの名無しさんNGNG
>>12
>>14
Java ブラウザーのJazillaって知ってます?
0016デフォルトの名無しさんNGNG
とりあえ、だれかmozillaのソース持ってきてよ。
それをちょこちょこ弄るだけで終わりしよ。
001714NGNG
>>15
知ってました(藁
0018デフォルトの名無しさんNGNG
import java.awt.*;
import java.io.IOException;
import javax.swing.*;
import javax.swing.event.*;

public class Monazilla extends JFrame {

private JFrame frame;
private Container pane;
private JEditorPane ePane;

public Monazilla() {
setTitle( "Monazilla" );
setSize( 600, 500 );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setVisible( true );
}

private void itteyoshi() {
pane = getContentPane();
try {
ePane = new JEditorPane( "http://salad.2ch.net/bbstable.html"; );
} catch ( IOException ex ) { /* mona */ }
ePane.setEditable( false );
ePane.addHyperlinkListener( new Hyperactive() );
}

private void omaemona() {
pane.add( ePane );
}

public static void main(String args[]){
Monazilla mona = new Monazilla();
mona.itteyoshi();
mona.omaemona();
}

}

class Hyperactive implements HyperlinkListener {

public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
JEditorPane pane = (JEditorPane) e.getSource();
try {
pane.setPage(e.getURL());
} catch (Throwable t) {
t.printStackTrace();
}
}
}

}
0019turbo type DNGNG
あいよ、Indyインストしてまっててな。
0020デフォルトの名無しさんNGNG
ギコナビが HTTPにどのコンポ使ったかおせーてほしーな。
ソケット直かな?NMは使ってないみたいだけど。
0021デフォルトの名無しさんNGNG
面倒だからWininetでもいいんじゃん?
0022デフォルトの名無しさんNGNG
http://msdn.microsoft.com/workshop/networking/wininet/wininet.asp
ここ参照ね。
0023デフォルトの名無しさんNGNG
板一覧の取得方法って
http://www.2ch.net/bbsmenu.html
を解析すればいいの?
0024デフォルトの名無しさんNGNG
・・・なんか、VC++の奴らが混ざってねえか?(w

VCLでオープンソースな。
Borland以外の奴は他すれでやってくれ。
0025デフォルトの名無しさんNGNG
単に、Delphiの人達やる気ないんじゃない?
0026デフォルトの名無しさんNGNG
言語はなんでもいいと思うんだけどね。。
0027デフォルトの名無しさんNGNG
>>20
ギコナビ@ヒロユキです。
ギコナビはHTTPCLIっていうのを使ってます。
なかなか高性能ですよ。

あと、このスレ面白そうだね。
オープンソースプロジェクトだと、様々な人たちの力で成り立つわけですが、
だれか、一人の人がまとめる役をしないといけないのではないでしょうか?
ここの1さんが、まとめる役とかしないのですか?

まずは、言語からはなれて、分析/設計をするのが先のような気がするよ。
言語を決めるのは、それが終わってからでも、遅くは無いと思うよ。
みんなで適当に進めても、アプリケーションは出来ないよ。

それじゃ、みなさん、がんばってください。
僕も仕事が暇になったら、参加させてもらいます。
0028デフォルトの名無しさんNGNG
とりあえずこれを実装してまえ

2chログ巡回ツール「ギコナビ」作ってみました。
123 名前:>122投稿日:2001/02/02(金) 01:15
エラー処理がないけど、とりあえずこんなんでいいのかな?
T2chDownloaderさえ誰かがまともに実装してくれれば
その他のコンポ、フロントエンド(UI部分)なんてすぐでっち上げられるよ。

type
// 基本クラス
T2chObject = class(TComponent)
protected
 FItems: TList;
// function GetItems(Index: Integer): T2chObject;
protected
 property Url: String;
 property Caption: String; // 見出し
 procedure Realod; // ダウンロード開始
 property Count: Integer;
// property Items[Index: Integer]: T2chObject read GetItems;
published
 property OnReload: TNotifyEvent; // ダウンロード開始
 property OnReloaded: TNotifyEvent; // ダウンロード終了
end;

// 2ch全体
T2chNet = class(T2chObject)
public
 property Items[Index: Integer]: T2chBoard read GetItems;
end;

// 板リスト
T2chBoard = class(T2chObject)
public
 property Items[Index: Integer]: T2chThread read GetItems;
 property Category:
end;

// スレリスト
T2chThread = class(T2chObject)
public
 property Items[Index: Integer]: T2chThread read GetItems;
end;

// レスリスト(たぶんflyweight)
T2chResponse = class(T2chObject)
public
 property No: Integer; // 番号
 property Email: String; // メアド
 property DateTime: TDateTime; // 書込日時
 property Lines: TStrings; // 本文
end;

// ダウンローダ
T2chDownloader = class(T2chObject)
private
 FQueue: TObjectQueue; // スタックのがいいかも??
public
 property Online: Boolean;
 property CacheDirectory: String; // ローカルキャッシュ
 procedure Request(Target: T2chObject);
 procedure Cancel(Target: T2chObject);
end;
0029幸運の国NGNG
開発言語はなんでしょうか。とりあえずCでいいなら>>23さんの
部分ならありますんで汚いソースですが、、
更に言うとめちゃくちゃへぼいです。訂正してくれたら私も嬉しい。。

void MasterMake(void)
{
FILE *fp,*fp2;
HANDLE hFile;
DWORD FileSizeLow,dwAccBytes;
OPENFILENAME ofn;
char *lpBuffer,stp[32][128],categsf[32];
int i,j,k,t,p,st,ls,servsuu,length[SERVERNMAX],categn = 0,flag = 0;

//bbstable.htmlはhttp://salad.2ch.net/bbstable.html
//ファイル開いてメモリに書き出してます。
hFile = CreateFile("offboard\\bbstable.html",0,FILE_SHARE_READ |
FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
FileSizeLow = GetFileSize(hFile,NULL);
CloseHandle(hFile);
lpBuffer=new char[FileSizeLow+1];
GetOpenFileName(&ofn);
hFile = CreateFile("offboard\\bbstable.html",GENERIC_READ,
0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
SetFilePointer(hFile,0,0,FILE_BEGIN);
ReadFile(hFile,lpBuffer,FileSizeLow,&dwAccBytes,NULL);
lpBuffer[dwAccBytes] = 0;
CloseHandle(hFile);
0030幸運の国NGNG
//ここら辺はオフボード落としてtextの中身確認して下さい
//全サーバの種類を配列に格納してます。後で比較する為
fp2 = fopen("offboard\\server.txt","r");
for(i=0;fscanf(fp2,"%s",stp[i]) != EOF;i++) length[i] = strlen(stp[i]);
servsuu=i;
fclose(fp2);

fp = fopen("offboard\\masterboard.dat","w");
//カテゴリ分けする為にカテゴリの名前を読み出してその位置を見つけます
fp2 = fopen("offboard\\category2.dat","r");
fscanf(fp2,"%s",categsf);
st = strstr(lpBuffer,categsf) - lpBuffer;
0031幸運の国NGNG
for(categn=0;fscanf(fp2,"%s",categsf) != EOF;categn++){
ls = strstr(lpBuffer,categsf) - lpBuffer;
for(i=st;i<ls;i++){
flag = 0;
if(lpBuffer[i] == '='){
for(j=0;j<servsuu;j++){
if(strncmp(stp[j],&lpBuffer[i+8],length[j]) == 0){
fprintf(fp,"%d\t%s\t",categn,stp[j]);
flag=1;
break;
}
}
if(flag == 1){
for(k=i+length[j]+9;lpBuffer[k] != '/';k++) fprintf(fp,"%c",lpBuffer[k]);
fprintf(fp,"\t");
for(t=k;t<k+64;t++){
if(lpBuffer[t] == '>'){
for(p=t+1;lpBuffer[p] != '<' && p <= t+14;p++)
fprintf(fp,"%c",lpBuffer[p]);
fprintf(fp,"\n");
break;
}
}
}
}
}
st = ls;
}
delete []lpBuffer;
fclose(fp2);
fclose(fp);
return;
}
0032幸運の国NGNG
タブが消えてしまいましたが、、わかねーぞボケって部分があったら説明します。
0033デフォルトの名無しさんNGNG
CreateFileでネットワーク越しのhtmのソース(やバイナリファイル)開けちゃうの?
0034デフォルトの名無しさんNGNG
開けます。>>33
0035デフォルトの名無しさんNGNG
2chのCGIの詳細な仕様が欲しいんですけど、
どっから手に入ります?
0036デフォルトの名無しさんNGNG
>>34
ダウンロードに関してはCreateFile, ReadFileだけで十分ってことかな?
そうするとDelphiのHTTP系コンポを使う意味あるの?
0037デフォルトの名無しさんNGNG
>>27ギコナビ@ヒロユキ、こんにちは

http://users.swing.be/francois.piette/indexuk.htm
これですか。がいしゅつか?

ギコナビ自体おおよそ基本部分が出来るまで
どのくらいかかっているんでしょう?
0038turbo type DNGNG
>>31-32
わかりにくいぞボケ..
いや、失敬。

エディタの置換使うかこれアプしたから使いナ。
http://zurubon.virtualave.net/source.cgi

program&nbsp;nbsp;

uses
&nbsp;&nbsp;SysUtils,
&nbsp;&nbsp;Clipbrd;

{$R&nbsp;*.RES}

var
&nbsp;&nbsp;S:&nbsp;String;
begin
&nbsp;&nbsp;S&nbsp;:=&nbsp;Clipboard.AsText;
&nbsp;&nbsp;S&nbsp;:=&nbsp;StringReplace(S,&nbsp;'&nbsp;',&nbsp;'&nbsp;',&nbsp;[rfReplaceAll]);
&nbsp;&nbsp;S&nbsp;:=&nbsp;StringReplace(S,&nbsp;#9,&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;',&nbsp;[rfReplaceAll]);
&nbsp;&nbsp;Clipboard.AsText&nbsp;:=&nbsp;S;
end.
0039幸運の国NGNG
>>38 そこははじかれたんで^^;
ドル猫様の使わせていただきました。
http://green.nttec.com/tech/read.cgi?KEY=981878874
今回のはローカルにファイルが置いてなくてもそのまま作れます。
でも腐ってるので改良お願いします。
ちなみにブラウザ最大化しないとずれるから見にくいっす。
0040幸運の国NGNG
http://green.nttec.com/tech/read.cgi?KEY=981880639
ゴミが混じってたんでデバッグしました。
0041デフォルトの名無しさんNGNG
http://salad.2ch.net/bbstable.html得られるでリンク先から.datを得るのは
どうやってやるの?
0042幸運の国NGNG
例えばこのスレッドならhttp://piza.2ch.net/tech/dat/981726544.dat
ここからDLすればいいです。実は私も以前にオフラインビューワ作ろうとしたんですが、
スキルの無さと、他の皆さんが次々に公開された事で断念しました。
あんまり力になれないかもしれませんが知ってる事があれば出来る限り協力します。
0043デフォルトの名無しさんNGNG
>>35 http://tako.2ch.net/test/read.cgi?bbs=perl&key=978059673
004435NGNG
>>43
う〜ん、直接2chの仕様ってわけではないのか。
でも、だいぶ分かってきたぞ。

ポイントはこれか?
http://piza.2ch.net/tech/index2.html
http://piza.2ch.net/tech/subject.txt
http://piza.2ch.net/tech/dat/981726544.dat
0045デフォルトの名無しさんNGNG
なーんだ、ギコBASICで開発じゃないのか・・・。
0046デフォルトの名無しさんNGNG
>>1
↑とかをマウスポインタをあてると、その部分がHintで表示されるけど、
それってどうやってやるのか、教えて下さい。キボンヌ。
0047デフォルトの名無しさんNGNG
>>129
「どうやって」って具体的に「何が」が分からないのですが、
ギコナビはTHintWindowを使っています。
ポイントされたら、
1、ポイントされたURLをパース。
2、ログを検索。
3、存在したら指定行を取り出す。存在しなかったら終了。
4、取り出したログの行をパース。
5、THintWindowのインスタンスを生成し、表示する文字列やらを設定。
6、表示
これだけ。
0048デフォルトの名無しさんNGNG
一番最初のポイントされたURLをパースってのがわからんです。
それ以外は、分かるんですが…。
0049デフォルトの名無しさんNGNG
>>131
Delphiでいいのかな?
TWebBrowserのOnStatusTextChangeでポイントされたURLがとれるでしょ?
・・・read.cgi?bbs=tech&key=nnnn&st=nn&to=nn
こんな感じで取得出来るよね。
んで、文字列がURLだったら、あとは、?と&でバラバラにして
bbsとkeyとstとtoの左側を取ればログの場所は判断できるでしょ。
本当は、ポイントされた場所の文字列(>>nn)を取得して判断したほうが
スマートだと思うけど、これやるには面倒そうな感じ。
フリーのTWebBrowser拡張版みたいなコンポなら簡単に出来るかも。
そっちのほうは、ギコナビでは使ってないので分かりません。
0050デフォルトの名無しさんNGNG
ごめん。ギコナビがバグっていて、レス番号が�dでもない数字になってた。
0051デフォルトの名無しさんNGNG
>TWebBrowserのOnStatusTextChangeでポイントされたURLがとれるでしょ?

これを知らなんだ。これで、全部わかったです。ありがとー。
オレもブラウザ作るかな。
0052デフォルトの名無しさんNGNG
どうせならIE使わずにってのは、無理?
.DATを直に拾ってくるなら問題ないよね。
0053デフォルトの名無しさんNGNG
>>52
表示が面倒だよ?
0054デフォルトの名無しさんNGNG
俺もそう思う
0055turbo type DNGNG
>>52
ハイパーリンクがあるからこそ
使いやすいな。

IE使わないならAirWebの2chプラグインというのもある。
0056デフォルトの名無しさんNGNG
アスキーアートが崩れると
誰にも評価されないソフトと化す
0057デフォルトの名無しさんNGNG
今日、帰りにDelphi買ってきた。
プログラミング言語って高いな。
0058デフォルトの名無しさんNGNG
いくらで買った?
0059デフォルトの名無しさんNGNG
>>58
一番安いヤツ。
一万六千円くらいの。
あーでももう挫折の予感。
0060デフォルトの名無しさんNGNG
本棚にでも飾っとけ>59
006159NGNG
こういうのに触れると、ソフトウェア作者の凄さが痛いほどわかるな。
HelloWorld!万歳!あああああ!
何か本買ってくれば良かった。
006259NGNG
こんなでかいの本棚はいんねえよ。>>60
なんだこの説明書の厚さ。バーカ!Delphiのバーカ!
みなさんこんなのどうやって勉強されたんですか
帰り道のあのワクワクが嘘みたいだ
0063turbo type DNGNG
説明書なんて誰もみない。バカかおまえ?
初心者用の書籍探してそれで勉強しろ。

あと、ネットで2chじゃない所を利用しまくって己を磨け。
http://www.valley.ne.jp/~masaiku/index1.htm
0064turbo type DNGNG
だいたい、モナジラスレで関係ない話題ふるな。
VB厨房と違ってDelphi使いならエレガントに学習しなさい。
0065デフォルトの名無しさんNGNG
>>63
あんがと。とりあえず本買うわ。
0066ヒロユキ@ギコナビNGNG
なんだよー。全然進まないね。キタイシテイルノニ。
turbo type Dタンが進める役したら?
すごくスキルありそうだし。
0067デフォルトの名無しさんNGNG
ギコナナビとかと違いを出すために誰かMindでやってみるってのは
0068turbo type DNGNG
スキルねーよ。>ヒロユキ(w

とりあえず、TUIWebは導入したばかりで
俺はIndyでやるよ。
D6も見据えながら。
0069デフォルトの名無しさんNGNG
ソース表示をすれば、タブ数はわかるるる
0070turbo type DNGNG
IndyでHTTPをダウンロードするのはどうするんですか?
0071turbo type DNGNG
Demo見たらわかった。。。。。
今後はボロカスに言われたらやだから
質問するときはコテハンヤメテおこ。
0072turbo type D@monazillaNGNG
>>23>>41
の質問をまとめます。

まずはじめに
http://salad.2ch.net/bbstable.html
を解析する事で板一覧情報は取得でき

それを解析してプログラム板のリンク先
http://piza.2ch.net/tech/index2.html
を取得して変換して
http://piza.2ch.net/tech/subject.txt
のデータを取得できる。

それにxxxx.datとかかれているので
http://piza.2ch.net/tech/dat/981726544.dat
これをDownLoadすれば発言内容が現れるという事だね。

これをローカルに保存してWebBrowserで開くとよい。
これで合ってますよね。

>>44でガイシュツだ。
0073デフォルトの名無しさんNGNG
>>72
dat ファイルは単なる CSV なので、
HTML のタグをつけてやらなきゃいけない。
0074デフォルトの名無しさんNGNG
とりあえずジオにディスク12MBとりました。
URL
http://www.geocities.co.jp/SiliconValley-Oakland/9028/
ID : monazilla
PW : mona
0075turbo type D@monazillaNGNG
トクトクの方がいいかもよ。
容量無制限だしー。CGI可だし。

とりあえず、IndyとUIWebBrowserはインストしておいてヨシって
ことでいいですか〜?
0076turbo type D@monazillaNGNG
で、IndyのIdHTTP使って任意のページをUIWebBrowserに表示させるコード。
//*********************************
object IdHTTP1: TIdHTTP
 RecvBufferSize = 1024
 HandleRedirects = True
 ProtocolVersion = pv1_0
 Request.Accept = 'text/html, */*'
 Request.ContentLength = 0
 Request.ContentRangeEnd = 0
 Request.ContentRangeStart = 0
 Request.ProxyPort = 0
 Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
 Left = 88
 Top = 112
end
//*********************************
procedure TForm1.NanashiAction1Execute(Sender: TObject);
var
 SL: TStringList;
 SaveFileName: String;
 Flag: OleVariant;
begin
 SaveFileName := ExtractFilePath(Application.ExeName)+'URLData.html';

 SL := TStringList.Create;
 try
  IdHTTP1.Request.Username := '';
  IdHTTP1.Request.Password := '';
  IdHTTP1.Request.ProxyServer := 'xxx.xx.xx.xxx';
  IdHTTP1.Request.ProxyPort := 80;
  IdHTTP1.Request.ContentType := '';
  IdHTTP1.Intercept := nil;

  SL.Text := IdHTTP1.Get(Edit1.Text);

  SL.SaveToFile(SaveFileName);

  Flag := 0;
  UIWebBrowser1.Navigate(SaveFileName, Flag, Flag, Flag, Flag);
 finally
  SL.Free;
 end;
end;
0077turbo type D@monazillaNGNG
TUIWebBrowser/TWebBrowserでHTMLファイルを作らなくても
ブラウザ表示させる方法はどうやるんだけ?

>>ご教授きぼーん。
0078デフォルトの名無しさんNGNG
>>74
ワラワカシテモラタ
0079デフォルトの名無しさんNGNG
Indyのコンポどこー?
0080turbo type D@monazillaNGNG
見てなかったから気が付かなかったけど、
>>74
>turbo type D's page
つのはやめてくれよ。

アヤシイページと俺とは何も関係ないんだから、
あそこ2ch嫌ってるし。

つか、一瞬、個人名バレたのかってヒヤっとしたから
心臓に悪い事はやめてくれ。まじ・(xДx


kylixにもDelphi6にも搭載される予定のネット関係コンポ
Indyのリンクきぼーんよ。
http://www.nevrona.com/Indy/
0081デフォルトの名無しさんNGNG
あ、やっぱまずかった?>>80
名前だけ消しときます。
008281NGNG
勘違いでちた!>>80
0083ヒロユキ@ギコナビNGNG
>>80
分かっていると思うけど、
・Indy は Server Edition 以上につく
だそうです。Kilixの話ね。
Kilix-MLからの情報です。
0084デフォルトの名無しさんNGNG
Server Editionだとホビープログラマはつらいですね。>>83
にしても話が進まないので分析/設計とプロトタイプ開発を
同時に進めるようなやり方で行きましょうか?
0085デフォルトの名無しさんNGNG
>>77
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
HtmlView: DispHTMLDocument;
begin
s := '<html><body><font color=red size="+3">て</font>すと</body></html>';
HtmlView := WebBrowser_V11.Document as DispHTMLDocument;
if HtmlView <> nil then HtmlView.body.innerHTML := s
end;

じゃダメ? ただし、いちどNavigateかGoHomeなどしておく必要アリ。理由不明。
0086デフォルトの名無しさんNGNG
プロトタイプってのは
技術的なプロトタイプね。
たとえばスレ一覧を取るだけのものとか。
0087ヒロユキ@ギコナビNGNG
>>85
var
v: OleVariant;
begin
v := 0;
WebBrowser1.Navigate('about:blank', v);
end;
これを最初にやるのはダメかな?

>>84 >>86
76でスレ一覧を取れたも同然じゃん。
とりあえず、骨組みとなるクラスを考えましょう。
>>28にあったように、あのクラスを元にして、決まったら一気に実装。
0088turbo type D@monazillaNGNG
>>レス、サンクス
今から調べる。

コード規約みたいなのを考えてほしい。
コメントの書き方や関数ヘッダのコメントなど。
自分のやり方だと、個人名が特定されそうでやだし〜。

あと、画面周りは
通常の貧弱なMainMenuとToolbarを使ってActionで実装するつもり。
そうするとオプソならではの
MenuBar/ControlBar/Coolbar/CuteBarに至る改造を
各々が楽しめるようになるだろう。
Formの位置保存コードなども誰でも実装できそうな部分は
含めない方針でとりあえずめざします。

とりあえずはIndyを使いますが
関数化しておくから、NMHTTPやHTMLCLIを使っての置き換えが
容易に可能なようにもしておきます。

かちゅーしゃのデザインが優れていると感じるので
似たようにします。
3ペインの左がTreeViewにして,2ch用お気に入りもこのTreeに入るようにしたい。
上を、ListView,vsReport/StringGrid→迷っている。
下をTWebBrowserのPageControlにします。
(俺はTUIWebBrowserを使うけど多分置き換え可能だろう)

他に代替案があったらご意見よろしく。
0089turbo type D@monazillaNGNG
関係無いけど
コードにはAAを嫌になるほどいれたい。(藁

Delphi自体のフォントをPゴシックに出来ないのは残念。
0090turbo type D@monazillaNGNG
追加。データ保存はIniファイルでやる。

本当はマルチユーザ対応などレジストリでやるのが楽でいいんだが
コアなユーザーはIni好きだから。
0091デフォルトの名無しさんNGNG
>>88
そこまで考えてくれるとありがてぇ
0092turbo type D@monazillaNGNG
>>83
Indyは付属してなくてもDowlLoadすればいい話じゃないか?
HELPファイルなんかはServer版しか日本語化されないだろうけど。
MLで聞いてみてよ。俺ROMってるから(藁
0093turbo type D@monazillaNGNG
Board一覧データの取得方法考えました。

クラスを作る
&nbsp;&nbsp;//インスタンスが一つだけのクラス
&nbsp;&nbsp;T2chBoardList&nbsp;class
&nbsp;&nbsp;&nbsp;&nbsp;BoardCategorys:&nbsp;TList;//カテゴリのリスト
&nbsp;&nbsp;end;

&nbsp;&nbsp;//カテゴリごとのクラス
&nbsp;&nbsp;TBoardCategory&nbsp;=&nbsp;class;
&nbsp;&nbsp;&nbsp;&nbsp;Title:&nbsp;String;//【おすすめ】などのカテゴリ名
&nbsp;&nbsp;&nbsp;&nbsp;BoardItems:&nbsp;TList;//カテゴリに属する板のTBordItemを保持
&nbsp;&nbsp;end;

&nbsp;&nbsp;//各板ごとのクラス
&nbsp;&nbsp;TBoardItem&nbsp;=&nbsp;class
&nbsp;&nbsp;&nbsp;&nbsp;Title:&nbsp;String;//板のタイトル
&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;String;//板の英語名
&nbsp;&nbsp;&nbsp;&nbsp;URL:&nbsp;String;//板のURL
&nbsp;&nbsp;end;

--http://salad.2ch.net/bbstable.htmlのソースから
2chBoardListを生成

S&nbsp;:=&nbsp;bbsSource;
CategoryDataStart&nbsp;:=&nbsp;Sから【&lt;B&gt;を探索
CategoryDataEnd&nbsp;:=&nbsp;Sから次の位置の【&lt;B&gt;を探索/見付からない場合は文末
CategoryData&nbsp;:=&nbsp;SのCategoryDataStartからCategoryDataEndまで
CategoryDataが取得できなかったらエラー
SからCategoryDataは削除

CategoryTitleStart&nbsp;:=&nbsp;CategoryDataから【&lt;B&gt;を探索
CategoryTitleEnd&nbsp;:=&nbsp;CategoryDateから&lt;/B&gt;】
CategoryTitle&nbsp;:=&nbsp;CategoryDataのCategoryTitleStartからCategoryTitleEndまで
CategoryTitleが取得できなかったらエラー
BoardCategoryを生成2chBoradListに登録、タイトルに代入
CategoryDataからCategoryTitleは削除

BoardItemCount&nbsp;:=&nbsp;CategoryDataの中ノ&lt;Aと&lt;/A&gt;の数を数える→一致しなければエラー
for&nbsp;i=0&nbsp;to&nbsp;BoardItemCount-1&nbsp;do
begin
&nbsp;&nbsp;BoardItemDataStart&nbsp;:=&nbsp;CategoryDataから&lt;A&nbsp;HREF=を検索
&nbsp;&nbsp;BoardItemDataEnd&nbsp;:=&nbsp;CategoryDataから&lt;/A&gt;を検索
&nbsp;&nbsp;BoardItemData&nbsp;:=&nbsp;CategoryDataのBoardItemDataStartからBoardItemDataEndまで
&nbsp;&nbsp;CategoryDataからBoarItemDataは削除
&nbsp;&nbsp;BoardItemDataは&lt;A...&gt;...&lt;/A&gt;という文字列になっているので解析して
&nbsp;&nbsp;&nbsp;&nbsp;リンク先とタイトルを取得する。
end;
0094デフォルトの名無しさんNGNG
>>85
IEコンポは作成直後はHTMLDocumentがnilになってるからね。
innerHTML、outerHTMLを設定するんじゃなくてHTMLDocumentに
writeすれば問題ない。けど、フォントが変になったような気がする。
かちゅーしゃはHTMLにフォント設定を埋め込むことでこれを回避してるようだ。
>>87
(少なくともVC++/MFCでは)Navigateが非同期動作になるので、一旦Navigate
して、NavigateComplateかDocumentCompleteのイベントをトリガにする
必要がある。
まぁ、about:blankに飛ぶぐらいはすぐだろうから、WebBrowserのステータス
でループさせて終了を待ってもいいけどね。

あと、データアクセス層をきちんとつくっとかないと、マルチスレッドになって
複数のスレッドから同時にアクセスがあったときの処理が複雑になる。
Mutexで排他処理する部分は最小にしたいからね。

このような、ネットワークアプリは非同期処理との戦いになると思う。
0095turbo type D@monazillaNGNG
>>85>>87
スマソ、追加で教えてキボーン
DispHTMLDocumentやWebBrowser_V11って何?
0096turbo type D@monazillaNGNG
>>94厳しいな(TДT
浮津堕コーディングしよう。
0097turbo type D@monazillaNGNG
>>93を考えていて>>28のクラスを再度確認してみた
T2chObjectっておかしくないか?
すべての基底クラスにダウソ開始/終了
なんていらないと思うのだが、
特にT2chResponseがT2chObjectから継承する
必要はないんじゃないか?

俺のクラス設計が甘いのか?わからない。

スレのダウンロードから
レス一つ一つのダウンロードメソッドを呼ぶ方がいいのか?
0098デフォルトの名無しさんNGNG
俺もBCB4で似たようなの作ってるんだけどさ、
(勉強目的だから、VCLはUI以外は極力使わないようにしてるけど)
WebBrowserでNavigate2したときの表示がどうなってるかイマイチわからん。

スレを表示するとき、HTMLファイルを作ってNavigate2したときって
すごく速いんだよね。表示開始が。
これに対して、IHTMLDocument2のinnerHTMLをいじると、
表示開始までが遅い。全部解析してから1行目を表示している感じ。

1000近くあるスレで、insertAdjacentHTMLしながら、
適度にApplication->ProcessMessages()を含めてみると、
開示までの時間は問題無いが、終了までに余計時間がかかる。
それよりも気になるのが、表示されている様子が目に見えること。
Navigate2だと一瞬で表示されるのに、上から一行ずつ表示されているのが
見えるよう。
ProcessMessages()を呼ぶタイミングを動的に変更しても同じ気がする。

パイプでも使ってるのか、それともparent(IHTMLWindow2)に何かあるのか。
つーか、手元に資料が全然無くて、すげー苦労なんだけど。
MSHTML_TLB.hは15MBもあるし・・・
0099turbo type D@monazillaNGNG
>>98
俺、まだNavigateとNavigate2の違いもわからん。
教えてくらさい。

98の話からすると、とりあえずファイルに書き出してから
読み込んだ方がいいって事か?
0100turbo type D@monazillaNGNG
違いはURLにPIDLが使えるか否かだね。
で、PIDLって何だ?(w
010194NGNG
>>96
似たようなアプリを書いた経験からだよ。

>>98
スレ100個分ぐらいのHTMLをつくって一気にinsertAdjacentHTMLすれば
いいんじゃない?それか、HTMLDocumentにwriteするとさらに速かったような
記憶がある(MFCでしかやったことないので適当に置き換えてね。COMの
インターフェイスだからそんなに違わないと思うけど)。
あと、OnNavigateCompleteとOnDocumentCompleteで発生するタイミングが
結構違ったような気がする。どっちが速かったかは覚えてない。

>>99、>>100
PIDLじゃないと「マイコンピュータ」にNavigateすることができないね。
■ このスレッドは過去ログ倉庫に格納されています