2ちゃんねるブラウザ「OpenJane」改造総合スレ 4
Doe専用なんですけど、スレの画面で
「1」キーを押すとレス1に画面がジャンプ。
すぐに「2」を押すとレス12にジャンプ。
さらにすぐ「3」を押すとレス123にジャンプ。
キータイプの間隔が0.3秒以内なら連続で入力と看做します。
emacsのインクリメンタルサーチみたいにジャンプしたいな、と
思って付けた機能です。
名づけてインクリメンタルジャンプ。
ちょっと長くなりますがソース挙げてみます。
一部、スマートじゃ無いところもありますんで添削求むw
Main.pas
700行目あたり------------------------------
private
UILock: Boolean;
+ {RTH インクリメンタルジャンプ}
+ {$IFNDEF IE}
+ resJumpTimer: TTimer;
+ afterLine: Integer;
+ {$ENDIF}
+ {/RTH インクリメンタルジャンプ}
requestingBoard: TBoard;
procGetCategoryList: TAsyncReq;
-------------------------------------------
850行目あたり------------------------------
function ProtocolCheck(const S: string):Boolean;
function CutImenu(const S: string):string;
+ {RTH インクリメンタルジャンプ}
+ {$IFNDEF IE}
+ procedure ResJumpTimerTimer(Sender: TObject);
+ {$ENDIF}
+ {/RTH インクリメンタルジャンプ}
public
{ Public 宣言 }
//ListFontColor: TColor; //※[457]
-------------------------------------------
1700行目あたり------------------------------
fav.name := 'リンク';
favorites.Insert(0, fav);
end;
+ {RTH インクリメンタルジャンプ}
+ {$IFNDEF IE}
+ procedure InitResJumpTimer;
+ begin
+ resJumpTimer := TTimer.Create(self);
+ resJumpTimer.Interval := 300; // キータイプ間隔は0.3秒
+ resJumpTimer.Enabled := False;
+ resJumpTimer.OnTimer := ResJumpTimerTimer;
+ end;
+ {$ENDIF}
+ {/RTH インクリメンタルジャンプ}
var
boardLoaded: boolean;
TimeZoneInfo: _TIME_ZONE_INFORMATION;
-------------------------------------------
1800行目あたり------------------------------
(* Window位置復元はOnShowでやる *)
//LoadWindowPos;
KeyConf; (* 9 Feb. 2002 by 816=817 *)
SetMouseGesture;
+ {RTH インクリメンタルジャンプ}
+ {$IFNDEF IE}
+ InitResJumpTimer;
+ {$ENDIF}
+ {/RTH インクリメンタルジャンプ}
{$IFDEF BENCH}
InitBench;
{$ENDIF}
(* スレ一覧 *)
subjectReadyEvent := THogeEvent.Create;
-------------------------------------------
2000行目あたり------------------------------
D2HTML.Free;
NEWD2HTML.Free;
POPUPD2HTML.Free;
+ {RTH インクリメンタルジャンプ}
+ {$IFNDEF IE}
+ resJumpTimer.Free;
+ {$ENDIF}
+ {/RTH インクリメンタルジャンプ}
NGWords.Free;
NGNames.Free;
-------------------------------------------
4000行目あたり------------------------------
procedure TMainWnd.UpdateCurrentView(index: integer);
var
i: integer;
begin
+ {RTH インクリメンタルジャンプ}
+ {$IFNDEF IE}
+ self.resJumpTimer.Enabled := False;
+ {$ENDIF}
+ {/RTH インクリメンタルジャンプ}
if (0 <= index) and (index < viewList.Count) then
begin
-------------------------------------------
8000行目あたり------------------------------
procedure TMainWnd.OnBrowserKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
view: THogeTextView;
item: THogeTVItem;
point: TPoint;
index: integer;
ref: string;
Cancel: WordBool;
+ viewItem: TViewItem; //RTH インクリメンタルジャンプ
begin
view := THogeTextView(Sender);
-------------------------------------------
8100行目あたり------------------------------
BrowserStatusTextChange(Sender, ref);
end;
Key := 0;
end;
+ {RTH インクリメンタルジャンプ}
+ Ord('0')..Ord('9'),
+ VK_NUMPAD0,VK_NUMPAD1,VK_NUMPAD2,VK_NUMPAD3,VK_NUMPAD4,
+ VK_NUMPAD5,VK_NUMPAD6,VK_NUMPAD7,VK_NUMPAD8,VK_NUMPAD9:
+ begin
+ viewItem := GetActiveView;
+ if viewItem = nil then
+ exit;
+ if viewItem.thread = nil then
+ exit;
+ begin
+ self.resJumpTimer.Enabled := False;
+ case Key of
+ Ord('0')..Ord('9'):
+ afterLine := afterLine * 10 + Ord(key)-Ord('0');
+ VK_NUMPAD0:
+ afterLine := afterLine * 10 + 0;
+ VK_NUMPAD1:
+ afterLine := afterLine * 10 + 1;
+ VK_NUMPAD2:
+ afterLine := afterLine * 10 + 2;
+ VK_NUMPAD3:
+ afterLine := afterLine * 10 + 3;
+ VK_NUMPAD4:
+ afterLine := afterLine * 10 + 4;
つづく…
続き
+ VK_NUMPAD5:
+ afterLine := afterLine * 10 + 5;
+ VK_NUMPAD6:
+ afterLine := afterLine * 10 + 6;
+ VK_NUMPAD7:
+ afterLine := afterLine * 10 + 7;
+ VK_NUMPAD8:
+ afterLine := afterLine * 10 + 8;
+ VK_NUMPAD9:
+ afterLine := afterLine * 10 + 9;
+ end;
+ if afterLine >= 1 then
+ viewItem.ScrollToAnchor(afterLine -1, true);
+ self.resJumpTimer.Enabled := True;
+ end;
+ end;
+ {/RTH インクリメンタルジャンプ}
end;
end;
{$ENDIF}
-------------------------------------------
最後あたり----------------------------------
if ProtocolCheck(s) then
DoOnFileDownlaod(s);
end;
{$ENDIF}
+ {RTH インクリメンタルジャンプ}
+ {$IFNDEF IE}
+ procedure TMainWnd.ResJumpTimerTimer(Sender: TObject);
+ begin
+ Self.resJumpTimer.Enabled := false;
+ afterLine := 0;
+ end;
+ {$ENDIF}
+ {/RTH インクリメンタルジャンプ}
//------------------------------------------------------------------------------
-------------------------------------------
以上。連続カキコスマソ(´・ω・`)