■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50
monazilla
- 111 :turbo type D@monazilla :2001/02/14(水) 17:13
- 等幅フォントだと、こんなもんかな?
//
// ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
// (´∀`)< ボードの一覧をhttp://salad.2ch.net/bbstable.htmlより得る
// ( ) \________________________
// | | |
// (__)_)
//
しかし、このコメントがついてたら
まじで周りにビクビクしながらコード書かなきゃいけないから
すげー疲れる(w
- 112 :デフォルトの名無しさん :2001/02/14(水) 17:31
- 等幅でもずれとりまんがな。空白が寄せられただけ?
ところで、94さんは2chブラウザーの作者さんのような気がするけど、違うのかな?
- 113 :デフォルトの名無しさん :2001/02/14(水) 17:45
- >>112 違わないよ。
- 114 :98 :2001/02/14(水) 18:08
- かなり戻るけど、>>93のTBoardCategoryは必要ないと思う。
というのは、いずれ、貼りつけられたスレへのリンクからTBoardItemを
検索したくなるだろうから。
鯖移転にも対応するために、板名で検索できること
(さらに、mac板やbike板に対応すること)を考えると、
TBoardItemはどっかでまとめて持ち、
TreeNode->Dataに細工するのがいいと思う。
もしかしたら参考になるかもしれないので、
俺の使っている部分をそのまま載せます。
VCLも知らないので、批判もよろしく。
Board型はstaticメンバーで全体を保持。
Board::BoardCount()で全板数、
Board::At()で順アクセス、Board::Find()で検索、etc
Boardのインスタンスは、Name()がnilならカテゴリ名、
Name()の中身があればそれぞれの板。
stringとSTLを使っているのは、それらの勉強も目的だから。
TTreeNodes *tree = BoardTree->Items;
tree->Clear();
#if 0
TTreeNode *root = tree->Add(NULL, "2ちゃんねる");
//root->Data = NULL;
#else
TTreeNode *root = NULL;
#endif
int n = Board::BoardCount();
string catename;
vector<Board *> boards;
for (int i = 0; i < n; ++i) {
Board *bd = Board::At(i);
if (bd->Name().empty()) {
if (!boards.empty()) { //カテゴリ名の連続に対処するため
TTreeNode *cate = tree->AddChild(root, catename.c_str());
cate->Data = NULL;
vector<Board *>::iterator it;
for (it = boards.begin(); it != boards.end(); ++it) {
TTreeNode *tmp = tree->AddChild(cate, (*it)->Title().c_str());
tmp->Data = *it;
}
}
boards.clear();
catename = bd->Title();
} else {
boards.push_back(bd);
}
}
- 115 :turbo type D@monazilla :2001/02/14(水) 18:57
- >>114
>TBoardCategoryは必要ないと思う。
ほっほー、そうなん。
mac板、bike板ってなんだろけ?
でも、もう殆ど実装してまった(゚Д゚)・・・・・・・
ま、データを保持するクラス階層は変更して
TreeViewの生成だけに利用するよ。
かちゅしゃーでも一応右端の色でわかれてるからなあ。
Boardクラスにカテゴリプロパ付けるだけで十分か?
それともTreeViewのTreeNodesとTreeNodeみたいに
データ構造をツリーと一覧の二通りのアクセスかましておきます。
98さんはVCL知らないか。
今日中に一覧をTreeで表示させたかったが、無理だわ。
また先ですわ。
- 116 :turbo type D@monazilla :2001/02/14(水) 19:04
- かちゅしゃは右端じゃなくて左端でした
あせって左右もわからなくなってる。
98さんはVCLバリバリ使ってる気がするが,,,
- 117 :デフォルトの名無しさん :2001/02/14(水) 20:06
- macとbikeってのはこれっす。
Mac
http://piza.2ch.net/mac/
mac
新Mac
http://teri.2ch.net/mac/
mac
バイク
http://tako.2ch.net/bike/
bike
自転車
http://mentai.2ch.net/bike/
bike
http://teri.2ch.net/test/read.cgi?bbs=mac&key=999999999
なんてのから板を特定するときに、'teri'の文字も必要だってことっす。
- 118 :デフォルトの名無しさん :2001/02/14(水) 22:20
- >>103
ListViewは速くはないけど、Delphi4から導入されたVirtualModeを使えば、そんなに遅くないです。
でもこれだとオーナードローする必要があり面倒です。
ちなみに、どうせオーナードローするならStringGridよりDrawGridの方が多少速いです。
もっとも上にあげたものは全てTListからのオーナードローになると思うので、どれでも十分な
速さですけど。
実は、オレも作成中だったりして。
- 119 :28のクラス書いた人 :2001/02/14(水) 22:34
- しばらくこないうちにだいぶ進んだなぁ。
個人的にはhtml,datダウソ部分の構造が先に知りたいです。
>97 名前:turbo type D@monazilla投稿日:2001/02/14(水) 13:50
>>93を考えていて>>28のクラスを再度確認してみた
>T2chObjectっておかしくないか?
>特にT2chResponseがT2chObjectから継承する
>必要はないんじゃないか?
T2chResponseは(既にある)T2chThreadの各レスにアクセスするため窓口だから
確かにダウソ開始/終了はいらないね。
いらないけどダウンロード可能・不可能をクラスで分類すると
数が増えて嫌だったというだけ。
まあレスをクラス化してT2chThreadのプロパティにすること自体は必要でしょ。
>すべての基底クラスにダウソ開始/終了
>なんていらないと思うのだが、
T2chResponse以外はダウソ開始・終了が必要でしょ。
>// ダウンローダ
>T2chDownloader = class(T2chObject)
>private
> FQueue: TObjectQueue; // スタックのがいいかも??
>public
この部分はdequeにして、ユーザーのクリックを優先的に処理して(stack)、
巡回を後回しに(queue)するのがいいかも。
マルチスレッドによる複数同時処理は
全部このクラスの内部に隠蔽しちゃえばすっきりすると思う。
とりあえずシングルスレッドで実装しといてあとで増やすこともできるし。
あとT2ch(Downloadable)Object自身に
巡回スケジュール&履歴プロパティがあるとよいかも。
turbo type D@monazillaたんがむばってね。
- 120 :デフォルトの名無しさん :2001/02/14(水) 22:45
- >>118
OwnerData使うだけで速いよ、OwnerDrawする必要なんてない。
- 121 :turbo type D :2001/02/14(水) 23:48
- むずかしいなーー、絶対ムズイよ。>>119
ある程度の所まで実装してアプしたら、
みんなさん、頼みまっせ。
htmlダウソならコンポつかっちゃってるけどそれじゃだめ?
ダウソドーロは全部スレッド化しろってぇ。難しいなあ。
- 122 :turbo type D :2001/02/15(木) 00:01
- StringGridのスクロルバーは何とかできるが
マルチセレクトと非選択をやろうとするとだるい。
かちゅしゃと同様なUIだと
スレ表示されていてマルチセレか非選択状態ってのは
必要ないとも思える。
しかし、3000は厳しいな。
- 123 :ヒロユキ@ギコナビ :2001/02/15(木) 00:16
- >>122
120さんも言っているけど、ListViewのOwnerDataを使うと簡単便利で高速だよ。
件数もあんまり関係ないし。
ギコナビもOwnerData。
- 124 :デフォルトの名無しさん :2001/02/15(木) 00:19
- テクニシャンな方々はここだけでもコテハンきぼん。
特に 119 さん、なんかハンドル使ってください。
- 125 :turbo type D :2001/02/15(木) 00:24
- >>124
そういう貴方も、コテハンを(・w・
- 126 :書記さん :2001/02/15(木) 00:34
- >>125
すんづれぇーしました。書記さんです。
ジオのページ立ち上げた張本人です。
なお、ただいまぜんぜん役に立たないドキュソ、、、
じゃなくてドキュメントつくってます。
- 127 :書記さん :2001/02/15(木) 00:47
- とりあえず資料をアップしてみました。
つーか全部こぴぺなんだけど。
http://www.geocities.co.jp/SiliconValley-Oakland/9028/
- 128 :デフォルトの名無しさん :2001/02/15(木) 00:48
- http://www.geocities.co.jp/SiliconValley-Cupertino/1858/
とりあえず一連の流れだけのヤツを作ってみたぞ。オレ様はWininetでマターリと逝く。
ちなみに、クラス設計はボロボロ。
なんと言っても、クラス設計はコード書きながらやったからな(今後はちゃんと設計する)。
あまり期待はしないで頂戴な。
- 129 :書記さん :2001/02/15(木) 01:00
- >>128
opengiko.res が見つからないってエラー出た場合は炒ってよしですか?
(Delphi 5 Pro)
- 130 :デフォルトの名無しさん :2001/02/15(木) 01:02
- >>129
ありゃ、D5はリソースファイルがいるのか。
自動的に作られるんじゃないの?が〜ん。
- 131 :書記さん :2001/02/15(木) 01:06
- ボタンの絵とかがからぽでした、
にしてもなかなか動作の感じは良かったです。
- 132 :デフォルトの名無しさん :2001/02/15(木) 01:08
- ボタンの絵とかは募集中だ!
- 133 :書記さん :2001/02/15(木) 01:10
- あ、そういうことでしたか、>>募集中
・ホームページ管理人募集。
これは私が引き受けてもいいです。
- 134 :デフォルトの名無しさん :2001/02/15(木) 01:13
- んじゃ、決定だ。頼む。
掲示板にftp関係のは書いておく。しばし待たれよ!
- 135 :デフォルトの名無しさん :2001/02/15(木) 01:16
- 書いたぞ!ゴルァ!
- 136 :デフォルトの名無しさん :2001/02/15(木) 01:18
- 明日も仕事だ。もう寝る。
- 137 :turbo type D :2001/02/15(木) 01:29
- ボタンの絵などは、オプソっぽく自由に設定しろという方式はダメかナー
- 138 :turbo type D :2001/02/15(木) 01:31
- 各種コンポーネントのインストール方法(特にHTTPCLIやIndy)
の説明をキボぅ,(なるべく多くの人が参加しやすくなるから)
- 139 :turbo type D :2001/02/15(木) 01:33
- 関係ないけど
monazillaよりモナプロ〜ラ〜やギコプロ〜ラ〜の方が
いいというような思いも…センスナイっすか?
- 140 :デフォルトの名無しさん :2001/02/15(木) 01:49
- 面白そうなことやってますね〜。
一応Delphi,C++Builder使いだけど、スキルがないから参加は無理っぽそう(汗
- 141 :turbo type D :2001/02/15(木) 02:00
- とりあえず暫定Main.dfm/Mail.pas(3ペインの画面だけ)
をアプしたいけど、アプ板どこかないかな。
>>140
そういわずに、俺もスキルナイナイから安心せ。
- 142 :デフォルトの名無しさん :2001/02/15(木) 02:39
- とりあえず、HTTPCLIもIndyもいらんと思うのだがどうか。
- 143 :デフォルトの名無しさん :2001/02/15(木) 02:53
- 「>>」の扱いはどうするの?
- 144 :turbo type D@monazilla :2001/02/15(木) 10:01
- >>142
>>88を見てくださいな。置き換え可能を意識してコード書いておきましょう。
TWebBrowserだけで出来るって事かな?Wininet?
表示せずにHTMLソースをダウソするのはどうするの?
>>143
HintWindowとリンクをつけたいね。
- 145 :デフォルトの名無しさん :2001/02/15(木) 11:17
- >>141
アップロードする方法は
以下を切り取ってローカルファイルとして保存すれば簡単
なお、既に同名のファイルがあるかどうかは自分で注意する事
<HTML> <HEAD> <TITLE>monazillaアップローダ</TITLE></HEAD> <BODY>
<FORM action=http://tools.geocities.co.jp/cgi-bin/members/file_manager encType=multipart/form-data method=post>
<INPUT TYPE="hidden" NAME="member" VALUE="monazilla">
<INPUT TYPE="hidden" NAME="passwd" VALUE="8EYNK=LO;3QTkEyPaPg">
<INPUT TYPE="hidden" NAME="fulladdress" VALUE="SiliconValley-Oakland/9028">
<INPUT TYPE="hidden" NAME="subdirectory" VALUE="src">
<INPUT TYPE="hidden" NAME="email" VALUE="monazilla@usa.net">
<INPUT TYPE="hidden" NAME="geoextras" VALUE="YN4<">
<INPUT TYPE="hidden" NAME="timestamp" VALUE="982202865">
<INPUT name=extlist type=hidden value=-1>
<INPUT name=lowercase type=checkbox> ファイル名を自動的に小文字に変換<BR>
<INPUT name=addhtml type=checkbox> 拡張子".htm"を".html"に自動的に変換<BR><BR>
<INPUT name=userfile size=80 type=file><BR><BR>
<INPUT type=submit value=アップロード>
<INPUT type=reset value=クリア><BR></FORM>
</BODY></HTML>
- 146 :turbo type D@monazilla :2001/02/15(木) 11:35
- >>145
これでどこにアプされるの?
- 147 :145 :2001/02/15(木) 12:05
- >>146
http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/アプファイル名
- 148 :デフォルトの名無しさん :2001/02/15(木) 12:35
- >>144
WinInetはwebBrowserと関係なく単独で使える
WebBrowserが使えるなら普通 WinInetも使えるという意味
使い方は こっちのリンクから
http://piza.2ch.net/test/read.cgi?bbs=tech&key=970606624&st=306&to=308&nofirst=true
Cのサンプルだが使い方はこれ見れば簡単
http://tokyo.cool.ne.jp/masapico/api_sample_inet04_c.html
- 149 :デフォルトの名無しさん :2001/02/15(木) 12:37
- >>144
TWebBrowser使える環境ならURL Moniker使えるでしょうし。
- 150 :デフォルトの名無しさん :2001/02/15(木) 12:42
- >>149 それ教えて MSDN入ってるのに俺馬鹿だから 日本語資料が無いと全然理解出来なくてさ
- 151 :turbo type D@monazilla :2001/02/15(木) 12:51
- 俺もわからん。>>149>>148
なるべく標準コンポ以外は使わない方向の方がいいのか?
でもそれで生産性が落ちるのはちょっと。
ユニット化して
function GetHTMLPageSource(URL: String): String;
こんな仕様で作ってくれれば
誰でも知っているやつが好きなように内部実装できると思うのだが。
- 152 :デフォルトの名無しさん :2001/02/15(木) 13:42
- 正直なところ、コンポーネント入れてまでという気はするな。
ソース配布されてても気楽に試しにくいのだよね。
- 153 :デフォルトの名無しさん :2001/02/15(木) 13:55
- >>150
ここのサンプル見るってのでは駄目?
http://msdn.microsoft.com/downloads/samples/internet/browser/walkall/default.asp
- 154 :デフォルトの名無しさん :2001/02/15(木) 14:16
- >>152
同意。標準コンポで逝きましょうや。
- 155 :turbo type D@monazilla :2001/02/15(木) 14:36
- 俺も昔はそう(標準コンポ好き)だったけど、今は
コンポぐらいインストシロヤ(゚Д゚)ゴルァ
っていいたいぞ。厨房じゃあるまいし
例えばブラウザ作る際に
VCLでUIWebBrowser使わないウマシカもいないだろ。
HTTPダウソならNMHTTPでも簡単だし。
一段落したら標準コンポ版も作っていいけど
NMHTTPバグだらけだから嫌だ
- 156 :デフォルトの名無しさん :2001/02/15(木) 15:02
- >>155
既にWininetで動作してるのに、何故コンポーネントが
必要なのかわからなかっただけ。
まぁ、厨房でウマシカな俺には考え及ばない理由があるのだろうね。
- 157 :書記さん :2001/02/15(木) 15:07
- おそーなった。
とりあえずコテハンきぼん>デフォルトの名無しさん 156
- 158 :154 :2001/02/15(木) 15:08
- ライセンスがらみがうぜぇとか、マイナーすぎて入手し難いのはちょっとねぇ
とかいう理由で言ってみたただけ。
とはいえ、さすがにNMHTTPはつかわんでいいと思う(藁
- 159 :書記さん :2001/02/15(木) 15:14
- >>139
>monazillaよりモナプロ〜ラ〜やギコプロ〜ラ〜の方が
>いいというような思いも…センスナイっすか?
あ、モナプロ〜ラ〜いいですね。
monazillaはオープンソースのプロジェクト名で
プログラム名はおのおの好き勝手つけちゃってください。
ってのはどう?
- 160 :書記さん :2001/02/15(木) 15:15
- >>158
NMHTTPは確かにちょいといただけないねー。
フリーで入手可能なコンポならなんでもいいけどねー。
- 161 :見物人 :2001/02/15(木) 15:27
- >>159
それに賛成。
- 162 :書記さん :2001/02/15(木) 15:31
- >>161
では可決。
monazillaプロジェクトはいま、アクティブなのは以下の二つ?
1.オープンギコ (Delphi 4 + Wininet)
2.モナプロ〜ラ〜 (turbo type D : Delphi 5 + TWebBrowser + HTTPCLI?)
VC、BCB、VBもしなやかに参加してくれ!
- 163 :turbo type D@monazilla :2001/02/15(木) 15:31
- 聞いてアロエリーナ ちょっと言いにくいんだけど
聞いてアロエリーナ
>>156さんごめーんネ
聞いてくれてあーりがと アロエリーナ♪
\______ __________/
|/
∧_∧
Ψ (∀・ )
□ (∩∩ノ ) オレガWininetツカエナイダケダッタリシテ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
- 164 :書記さん :2001/02/15(木) 15:33
- 書記さんもなぜか Wininetが環境にひどく依存するような先入観を持ってた・・・
- 165 :turbo type D@monazilla :2001/02/15(木) 15:33
- >>159マンセー
>>162シナヤカ長野県
HTTPCLIはギコナビでオレIndyのIdHTTP
- 166 :書記さん :2001/02/15(木) 15:36
- >>165
あ、しつれーしました。
モナプロ〜ラ〜 = Delphi 5 + TWebBrowser + Indy
- 167 :デフォルトの名無しさん :2001/02/15(木) 15:44
- >>164 あながち間違いでもありません
IE4でメモリリーク
IE5で日付問題
とトラブルがあるようです。が、じゃ他の方法は無いのかというと
採用例が少なくて表面化してないだけの可能性大
- 168 :名無しさん :2001/02/15(木) 15:44
- 結局収拾つかなくなったのか。
- 169 :デフォルトの名無しさん :2001/02/15(木) 15:47
- >>167
メモリリークなんてIWebBrowser使う時点で諦めてる。
- 170 :書記さん :2001/02/15(木) 15:48
- >>167
なるほど。
とりあえず モナプロ〜ラ〜 は Indy で、
オープンギコ は Wininet でやるっつーことで決定しましょ。
同じコンポ使って別々に書くわけじゃないから問題無いでしょー。
- 171 :デフォルトの名無しさん :2001/02/15(木) 15:49
- >>169
いまどきの子はメモリリークぐらいじゃびっくりしません。
- 172 :書記さん :2001/02/15(木) 16:08
- >>138
とりゃーず HTTPCLI のインスト方法だけアップしました。
投げやりのやっつけですが。。
Indyはまだ書記さんもセットアップしてないので待ってー
- 173 :turbo type D@monazilla :2001/02/15(木) 16:35
- 原因不明のuser32.dll落ち連続...でトレース実行が不可能になって
しまった。(TДT)DelphiIDEショボっ!
とりあえずmonaplorerの標準コンポだけの画面周りだけアプしましたよ
D5だと誰でも開けると思う
http://tools.geocities.co.jp/cgi-bin/members/file_manager
これでアプアプできたのかな?
145>>サンクス
- 174 :turbo type D@monazilla :2001/02/15(木) 16:40
- こっちでした。
http://www.geocities.co.jp/SiliconValley-Oakland/9028/src/monaplorer.lzh
- 175 :書記さん :2001/02/15(木) 16:44
- http://www.geocities.co.jp/SiliconValley-Oakland/9028/
にもアップロード用のフォームつけておきました。
- 176 :デフォルトの名無しさん :2001/02/15(木) 16:49
- 「これをかっこよくクリック」は不覚にもワラタ
- 177 :デフォルトの名無しさん :2001/02/15(木) 16:53
- >175
ジオ以外のところからアップロードさせないと巧く行かないから
別の所にアップローダを作るか、
アップロードフォームの所に一旦保存してからローカルに動かせって
注意書きを書いた方がいいよ。
- 178 :書記さん :2001/02/15(木) 16:56
- >>177
げ!そうなん!?ちょーしっぱい。。
- 179 :書記さん :2001/02/15(木) 17:12
- ローカルに保存してアップしてもらうようにしました。
- 180 :デフォルトの名無しさん :2001/02/15(木) 18:50
- >179 ジオだったら アップロードした人がゲストブックに説明書くようにしたらどうだ?
- 181 :書記さん :2001/02/15(木) 19:20
- あいよ!その案採用!
ゲストブックつけました。
煽り禁止
http://www.geocities.co.jp/SiliconValley-Oakland/9028/
- 182 :デフォルトの名無しさん :2001/02/15(木) 20:19
- 書記さん 手数だが、ゲストブックにコメントで書かれる
&lt;!-- REMOTE ADDR: xxxxxxxx --&gt;
をタマには消す事にしておくれよ
別に残して困る事はないが、恥ずかしいからのう
- 183 :書記さん :2001/02/15(木) 20:22
- >>182
いま、それに気がついたのでゲストブックを停止ー、
だれかフリーでリモートホストが出ない BBS 見つけてーー
- 184 :デフォルトの名無しさん :2001/02/15(木) 21:04
- リモホが出ても、タマに消すよ程度でOKだよ。
どうしてもってんなら 日記を使ったらどう?
日記もファイルアップロードと同じ方法でいける筈
- 185 :デフォルトの名無しさん :2001/02/15(木) 21:43
- こんな感じだろうと思う
<FORM METHOD="POST" ACTION="http://tools.geocities.co.jp/cgi-bin/members/dbook_wr">
<INPUT type=hidden NAME="member" VALUE="monazilla">
<INPUT type=hidden NAME="passwd" VALUE="mona">
<INPUT type=hidden name="state" VALUE="0">
<INPUT type=hidden NAME="fulladdress" VALUE="SiliconValley-Oakland/8522">
<input type=hidden NAME="subfontsiz" VALUE="5">
<input type=hidden NAME="subbgcolor_select" VALUE="0000FF">
<input type=hidden NAME="subforecolor_select" VALUE="FFFF00">
<input type=hidden NAME="conbgcolor_select" VALUE="FFFFFF">
<input type=hidden NAME="conforecolor_select" VALUE="000000">
<INPUT TYPE=hidden NAME="style" VALUE="1">
<INPUT NAME="subject" VALUE="title" SIZE=40 MAXLENGTH=80><BR>
<TEXTAREA NAME="content" rows=15 cols=40>内容</TEXTAREA>
<INPUT TYPE="submit" VALUE=" 送 信 ">
<INPUT TYPE="submit" NAME="PREVIEW" VALUE="プレビュー">
<INPUT TYPE="reset" VALUE="リセット">
</FORM>
- 186 :デフォルトの名無しさん :2001/02/15(木) 21:46
- ×8522
○9028
- 187 :185 :2001/02/15(木) 21:50
- ミスしたおかげで、思わぬジオの穴を見つけてしまった。
member と fulladdressの管理は別らしい。やれやれ
- 188 :ヒロユキ@ギコナビ :2001/02/16(金) 00:21
- 今、ギコナビのBoard.iniをXML化する予定。(あくまで予定)
その部分をmonazillaと共有させてもらいたいです。
もちろん、XML読み込みの部分のソースは公開します。
まだ、構想段階なので、マターリとやっていますけど。
ボード関連で、manazillaは、どういうふうに考えていますか?
あと、ギコナビで苦労した部分は、ローカルに保存してあるデータ(タイトル情報)を
読み込む部分です。
起動時に全部読み込めば、時間が掛かるし、起動時に読み込まなければ、
巡回のデータが無いので、巡回出来ないし。
単に、ダウンロードしたsubject.txtを毎回読むとなると、時間が掛かります。
ギコナビはindex.datファイルを作り、高速化を図っています。
これも、普通のピュアテキストだと遅いし、固定長だと容量が食いすぎます。
(Recordだとタイトルなどは文字列のため、Delphiだと255文字固定の制限もついてしまいます)
ギコナビでは、数値データはRecord。文字列は文字列長&文字列でガリガリ書いています。
ただし、これもバージョンアップで項目が増えた場合に問題が出てきます。
(ふるいバージョンのデータを読み込む機能が必要)
ストリーム化での方法は、バージョンアップでの対応が出来なさそうだったので、却下でした。
結構重要な部分(実際ギコナビでは、かなり時間をかけた)なのですが、monazillaでは、
どうする予定でしょうか?
- 189 :turbo type D :2001/02/16(金) 00:26
- そういう難しいことは決まってないに
2億はらたいら。お願いしまsう。
- 190 :フッサール少佐 :2001/02/16(金) 00:31
- 高速化をするには、当然index化はするでしょう。
indexはバイナリファイルをTStreamでガリガリやるのが一番速いです。
さらにキチ○イのような速度を追求するなら、Streamのバッファリング
も行います。moveしまくりで、これがDelphiのソースなのか…という
状態になりますが。それにindexのバージョンアップに多少の問題は残りますー。
バイナリファイルにAnsiString型を格納するには、その文字列長の
情報が必要になります。まだ先の話ですけどね。まずは、基本機能
がまともに動かないといけません。
- 191 :デフォルトの名無しさん :2001/02/16(金) 00:48
- HP
がJazillaのパクってて笑った!
http://jazilla.sourceforge.net/
- 192 :ヒロユキ@ギコナビ :2001/02/16(金) 00:53
- ギコナビの(公開以前のバージョン)DatからHTML変換。
ソース書き込むところが分からなかったから、ここに書きます。
今、ギコナビソースのマシンじゃないから古いソースでごめん。眠いし。
もしかしたら、足らないメソッドとかあるかも。
厨房ソースでごめん。現在のソースはだいぶ変わっていたと思う。
function TGikoSys.DatToHtml(bbsid: string; filename: string;): string;
var
i: integer;
no: string;
mailto: string;
name: string;
datetime: string;
body: string;
readdat: TStringList;
textcolor: string;
backcolor: string;
html: string;
begin
result := '';
filename := GikoSys.GetThreadFileName(bbsid, filename);
readdat := TStringList.Create;
try
readdat.LoadFromFile(filename);
ParseDatLine(readdat[0], title, mailto, name, datetime, body);
title := StringReplace(title, ',', ',', [rfReplaceAll]);
saveList := TStringList.Create;
textcolor := Format('%.8x', [Setting.BrowserFontColor]);
backcolor := Format('%.8x', [Setting.BrowserBackColor]);
textcolor := '#' + Copy(textcolor, 7, 2) + Copy(textcolor, 5, 2) + Copy(textcolor, 3, 2);
backcolor := '#' + Copy(backcolor, 7, 2) + Copy(backcolor, 5, 2) + Copy(backcolor, 3, 2);
html = '<html><head>'
+ '<meta http-equiv="Content-Type" content="text/html; charset=x-sjis">'
+ '<title>' + title + '</title>'
+ '</head>'
+ '<BODY TEXT="' + TextColor + '" BGCOLOR="' + BackColor + '" link="#0000FF" alink="#FF0000" vlink="#660099">'
+ '<dl>'
+ '<font size=+1 color="#FF0000">' + title + '</font>';
for i := 0 to readdat.Count - 1 do begin
if (Trim(readdat[i]) <> '') then begin
no := IntToStr(i + 1);
DivideStrLine(readdat[i], title, mailto, name, datetime, body);
mailto := StringReplace(MailTo, ',', ',', [rfReplaceAll]);
name := StringReplace(Name, ',', ',', [rfReplaceAll]);
body := StringReplace(Body, ',', ',', [rfReplaceAll]);
body := StringReplace(Body, '&amphearts;', '&hearts;', [rfReplaceAll]);
body := StringReplace(Body, '&amp#', '&#', [rfReplaceAll]);
//Body := ConvHtmlLink(Body);
{&lt;&gt;&quot;&amp;}
if mailto = '' then begin
html = html + '<dt>' + No + ' 名前:<font color="forestgreen"><b> ' + Name + ' </b></font> 投稿日: ' + DateTime+ '<br><dd>' + body + '<br><br><br>';
end else begin
html = html + '<dt>' + No + ' 名前:<a href="mailto:' + MailTo + '"><b> ' + Name + ' </B></a> 投稿日: ' + DateTime+ '<br><dd>' + body + '<br><br><br>');
end;
end;
end;
Result = html + '</body></html>';
finally
readdat.Free;
end;
end;
- 193 :turbo type D :2001/02/16(金) 00:55
- 全く関係ないが、ギコナビのIEくりそつキャビネット部分ってなんなの?
不思議モナー
- 194 :ヒロユキ@ギコナビ :2001/02/16(金) 00:59
- >>190
indexファイルのバージョンアップですが、ギコナビでは、ファイルの先頭に
バージョンを入れています。
バージョンを比較して、古いなら、新バージョンのindexを作ろうかと思っています。
#まだ、indexのバージョンアップをしていないので、どうなるかわかりませんが。
- 195 :turbo type D :2001/02/16(金) 01:01
- 字下げてないと病気になりそうなので〜〜〜〜>>192
function TGikoSys.DatToHtml(bbsid: string; filename: string;): string;
var
i: integer;
no: string;
mailto: string;
name: string;
datetime: string;
body: string;
readdat: TStringList;
textcolor: string;
backcolor: string;
html: string;
begin
result := '';
filename := GikoSys.GetThreadFileName(bbsid, filename);
readdat := TStringList.Create;
try
readdat.LoadFromFile(filename);
ParseDatLine(readdat[0], title, mailto, name, datetime, body);
title := StringReplace(title, ',', ',', [rfReplaceAll]);
saveList := TStringList.Create;
textcolor := Format('%.8x', [Setting.BrowserFontColor]);
backcolor := Format('%.8x', [Setting.BrowserBackColor]);
textcolor := '#' + Copy(textcolor, 7, 2) + Copy(textcolor, 5, 2) + Copy(textcolor, 3, 2);
backcolor := '#' + Copy(backcolor, 7, 2) + Copy(backcolor, 5, 2) + Copy(backcolor, 3, 2);
html = '<html><head>'
+ '<meta http-equiv="Content-Type" content="text/html; charset=x-sjis">'
+ '<title>' + title + '</title>'
+ '</head>'
+ '<BODY TEXT="' + TextColor + '" BGCOLOR="' + BackColor + '" link="#0000FF" alink="#FF0000" vlink="#660099">'
+ '<dl>'
+ '<font size=+1 color="#FF0000">' + title + '</font>';
for i := 0 to readdat.Count - 1 do begin
if (Trim(readdat[i]) <> '') then begin
no := IntToStr(i + 1);
DivideStrLine(readdat[i], title, mailto, name, datetime, body);
mailto := StringReplace(MailTo, ',', ',', [rfReplaceAll]);
name := StringReplace(Name, ',', ',', [rfReplaceAll]);
body := StringReplace(Body, ',', ',', [rfReplaceAll]);
body := StringReplace(Body, '&hearts;', '?', [rfReplaceAll]);
body := StringReplace(Body, '&#', '&#', [rfReplaceAll]);
//Body := ConvHtmlLink(Body);
{<>"&}
if mailto = '' then begin
html = html + '<dt>' + No + ' 名前:<font color="forestgreen"><b> ' + Name + ' </b></font> 投稿日: ' + DateTime+ '<br><dd>' + body + '<br><br><br>';
end else begin
html = html + '<dt>' + No + ' 名前:<a href="mailto:' + MailTo + '"><b> ' + Name + ' </B></a> 投稿日: ' + DateTime+ '<br><dd>' + body + '<br><br><br>');
end;
end;
end;
Result = html + '</body></html>';
finally
readdat.Free;
end;
end;
- 196 :ヒロユキ@ギコナビ :2001/02/16(金) 01:05
- >>193
実際のIEは、レバー(TCoolBar)+ツールバー+ツリーのようです。
DelphiのTCoolBarはバグっているようで、実現できなかったので、
TPanel(藁)などを駆使しています。
アプできる場所ってどこ?
フォームだけアプするよ。
でも、今日は寝ます。
- 197 :turbo type D :2001/02/16(金) 01:09
- ねましょうねましょう。
オレは部屋が寒いので手がかじかんで
キーボード打てません、鬱だ0721しぃよ
- 198 :フッサール少佐 :2001/02/16(金) 01:09
- >>194
そうですな。私も他のソフトでその方法をやっとります。
ただ、それを本体のコードで持っちゃうと美しくないというか(別クラスでもいやん)。
単純にそれだけですけど。
自動的に新indexに変換というのはユーザーにやさしい仕様でありまするな。
- 199 :デフォルトの名無しさん :2001/02/16(金) 01:27
- そーいえば、ボタンやアイコンのデザイン部隊はいないのか?
「とりあえず参加して〜」って人がそっち方面を充実させてくれれば、
開発部隊も気楽になると思う。
俺はセンスないんで無理ですが。
- 200 :デフォルトの名無しさん :2001/02/16(金) 01:39
- 仕様は飲みながら決めよーぜー
- 201 :turbo type D :2001/02/16(金) 03:09
- >>200
そう"しーよーおーーーー"
んーマターリ
- 202 :デフォルトの名無しさん :2001/02/16(金) 08:51
- どうでもいいが、TFileStreamは無茶苦茶遅いぜー。
iostream使うべ。
あと、WTLならCPaneContainerってのがあるぜー。
これをコンポーネント化したのがあるから、気が向いたらアップするー。
以上、BCB使いの寝言。
- 203 :turbo type D@monazilla :2001/02/16(金) 09:51
- DelphianWorldMLで出てたURLクリッカブルRichEdit
動作しねーんでやんの。Win98/2000あたりだけ対応なのかな。
- 204 :turbo type D@monazilla :2001/02/16(金) 09:54
- DelphiにもBCBコンポを使えるようにC++コンパイラを入れて欲しいよな。
- 205 :デフォルトの名無しさん :2001/02/16(金) 09:57
- BCBは、Delphiのコードがコンパイルできるって言っても、
それをメインにして開発できるわけじゃないからなあ。
俺は、それが出来るもんだと思ってBCB買って失敗した…。
やった、DelphiでC++が使える!とか思ってたのに。
- 206 :turbo type D@monazilla :2001/02/16(金) 11:57
- 2chって本文何行何文字までなの
- 207 :turbo type D@monazilla :2001/02/16(金) 11:59
- ボード一覧をTReeViewに取得するソースで来た
動作確認した。
が、
http://salad.2ch.net/bbstable.html
のソースが不完全な場合のエラー処理に自信がない。
- 208 :turbo type D@monazilla :2001/02/16(金) 12:15
- monazilla_studioでアプしようとしてるモナカ(最中)ですが
同名ファイルでも問題ないかな?
- 209 :turbo type D@monazilla :2001/02/16(金) 12:39
- //////////////////
//2chのHTMLソース(http://salad.2ch.net/bbstable.html)
//からTreeViewのItemを設定するソース
procedure TMonaplorerForm.GetTreeViewItem(HtmlSource: String);
var
i: Integer;
CategoryDataStart, CategoryDataEnd: Integer;
CategoryTitleStart, CategoryTitleEnd: Integer;
BoardCount, BoardDataStart, BoardDataEnd: Integer;
BoardTitleStart, BoardTitleEnd: Integer;
BoardURLStart, BoardURLEnd: Integer;
S, CategoryData, CategoryTitle, BoardData, BoardTitle, BoardURL: String;
NiChanCategory: TNichCategory;
NiChanBoard: TNichBoard;
BaseTreeNode: TTreeNode;
CategoryTreeNode, BoardTreeNode: TTreeNode;
begin
//板一覧を表示させるベースとなるTTreeNodeを指定
BaseTreeNode := BoardListTree.Items.Item[1];
S := HtmlSource;
while true do
begin
if S = '' then break;
//CategoryDataを取得する
CategoryDataStart := AnsiPos('<B>', AnsiUpperCase(S));
if CategoryDataStart = 0 then break;
CategoryDataEnd := AnsiPos('<B>', Copy(S, CategoryDataStart+1, Length(S)));
CategoryDataEnd := CategoryDataStart + CategoryDataEnd;
if CategoryDataEnd = CategoryDataStart then
CategoryDataEnd := Length(S)
else
Dec(CategoryDataEnd);
CategoryData := Copy(S, CategoryDataStart, CategoryDataEnd - CategoryDataStart + 1);
if CategoryData = '' then Assert(false, '鰓');
Delete(S, CategoryDataStart, CategoryDataEnd - CategoryDataStart + 1);
//CategoryTitleを取得する
CategoryTitleStart := AnsiPos('<B>', CategoryData);
if CategoryDataStart = 0 then Assert(false, '鰓');
CategoryTitleEnd := AnsiPos('</B>', CategoryData);
if CategoryDataEnd = 0 then Assert(false, '鰓');
CategoryTitle := Copy(CategoryData, CategoryTitleStart,
CategoryTitleEnd+3 - CategoryTitleStart + 1);
//<B>...</B>からBタグを除去
CategoryTitle := Copy(CategoryTitle, 4, Length(CategoryTitle)-4 - 4 + 1);
if CategoryTitle = '' then Assert(false, '鰓');
- 210 :turbo type D@monazilla :2001/02/16(金) 12:40
- >>209続き
//カテゴリを生成
NiChanCategory := TNichCategory.Create;
NiChanCategory.Title := CategoryTitle;
NiChannel.AddCategory(NiChanCategory);
//TreeNodeを作成
CategoryTreeNode := TTreeView(BaseTreeNode.TreeView).
Items.AddChild(BaseTreeNode, CategoryTitle);
CategoryTreeNode.Data := NiChanCategory;
Delete(CategoryData, CategoryTitleStart, CategoryTitleEnd+3 - CategoryTitleStart +1);
//Boardを取得する
BoardCount := StrCount1('<A HREF=', AnsiUpperCase(CategoryData));
if BoardCount = 0 then Assert(false, '鰓');
if BoardCount <> StrCount1('</A>', AnsiUpperCase(CategoryData)) then
Assert(false, '鰓');
for i:=0 to BoardCount-1 do
begin
//<A HREF=http://www..>..</A>の文字列を得る
BoardDataStart := AnsiPos('<A HREF=', AnsiUpperCase(CategoryData));
BoardDataEnd := AnsiPos('</A>', AnsiUpperCase(CategoryData));
BoardData := Copy(CategoryData, BoardDataStart, BoardDataEnd+3 - BoardDataStart +1);
if BoardData= '' then continue;
Delete(CategoryData, BoardDataStart, BoardDataEnd+3 - BoardDataStart +1);
//<A HREF=http://www..>..</A>からAタグを除去
BoardTitleStart := AnsiPos('>', AnsiUpperCase(BoardData) ) + 1;
BoardTitleEnd := AnsiPos('</A>', AnsiUpperCase(BoardData) ) -1;
BoardTitle := Copy(BoardData, BoardTitleStart, BoardTitleEnd - BoardTitleStart +1);
if BoardTitle = '' then continue;
//mailtoリンクならボードではないので無視
if AnsiPos('<A HREF=MAILTO', AnsiUpperCase(BoardData) ) <> 0 then continue;
//<A HREF=http://www..>..</A>からURLを取得
BoardURLStart := AnsiPos('HTTP://', AnsiUpperCase(BoardData) );
BoardURLEnd := AnsiPos('>', BoardData) - 1;
BoardURL := Copy(BoardData, BoardURLStart, BoardURLEnd - BoardURLStart + 1);
if BoardURL = '' then continue;
//ボードを生成
NiChanBoard := TNichBoard.Create;
NiChanBoard.Title := BoardTitle;
NiChanBoard.URL := BoardURL;
NiChanBoard.Name := '';//米 とりあえず必要ではないのでまだ実装していない。
NiChannel.AddBoard(NiChanBoard);
NiChanCategory.AddBoard(NiChanBoard);
//TreeNodeを生成
BoardTreeNode := TTreeView(BaseTreeNode.TreeView).Items.
AddChild(CategoryTreeNode, BoardTitle);
BoardTreeNode.Data := NiChanBoard;
end;
end;
end;
317KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30