posted @ 2006-09-20 22:27 小螞蟻 閱讀(212) | 評(píng)論 (1) | 編輯 收藏
Info Power 是個(gè)很棒的VCL,特別是RecordViewDlg控件很有特點(diǎn),在添加和編輯數(shù)據(jù)時(shí)很有用,但在打開(kāi)EnterToTab參數(shù)時(shí)不能跳到確認(rèn)鍵上,必須用鼠標(biāo)操作。還好有它的源碼,稍微修改一下就可以了:
//--------------------
//? wwrcdvw.pas
//--------------------
......
????? RecordPanel:= TPanel.create(RecordViewForm);
????? with RecordPanel do begin
???????? parent:= RecordViewForm;
???????? Left := 0;
???????? Top := 41;
???????? Align := alClient;
???????? BevelInner := bvLowered;
???????? BorderWidth := 4;
???????? Caption := '';
???????? TabOrder := 0;?? //I hack
???????? Name:= 'RecordPanel';
???????? visible:= True;
????? end;
????? if (rvokShowOKCancel in OKCancelOptions) then begin
???????? ButtonPanel:= TPanel.create(RecordViewForm);
???????? with ButtonPanel do begin
??????????? parent:= RecordViewForm;
??????????? Left := 0;
??????????? Top := 0;
??????????? Align := alBottom;
??????????? Name:= 'UserPanel';
??????????? Caption := '';
??????????? TabOrder := 1;? //I?hack
??????????? visible:= True;
??????????? OkBtn:= TButton(wwCreateCommonButton(RecordViewForm, bkOK));
??????????? OKBtn.Default:= not (rvoEnterToTab in Options);
??????????? OkBtn.parent:= ButtonPanel;
??????????? OKBtn.visible:= True;
??????????? OKBtn.OnClick := OKBtnClick;
??????????? OKBtn.TabStop:= True;? //I hack
??????????? CancelBtn:= TButton(wwCreateCommonButton(RecordViewForm, bkCancel));
??????????? CancelBtn.Parent := ButtonPanel;
??????????? CancelBtn.visible:= True;
??????????? CancelBtn.OnClick := CancelBtnClick;
??????????? CancelBtn.TabStop:= True; //I hack
??????????? CancelBtn.Cancel:= False; { Allows Escape to be processed }
??????????? bottomPad := 1 + GetSystemMetrics(SM_CYDLGFRAME)*2 +8 +1;? {Win95 fix }
??????????? Height := OkBtn.Top + OkBtn.height + BottomPad;
??????????? OkBtn.Top := GetSystemMetrics(SM_CYDLGFRAME) + 5;
??????????? CancelBtn.Top := GetSystemMetrics(SM_CYDLGFRAME) +5;
???????? end;
????? end;
......
posted @ 2006-09-20 10:46 小螞蟻 閱讀(179) | 評(píng)論 (0) | 編輯 收藏
posted @ 2006-09-10 12:22 小螞蟻 閱讀(775) | 評(píng)論 (0) | 編輯 收藏
posted @ 2006-08-28 12:10 小螞蟻 閱讀(191) | 評(píng)論 (0) | 編輯 收藏
posted @ 2006-08-28 01:33 小螞蟻 閱讀(562) | 評(píng)論 (2) | 編輯 收藏
以前一直在win32匯編里打滾,對(duì)于修改一個(gè)exe文件是件很容易的事情,但到了java下發(fā)現(xiàn)想修改一個(gè)
沒(méi)源碼的.class文件還真是個(gè)問(wèn)題,上網(wǎng)看了一大堆資料,有ASM和Javassist可以做這事情,ASM看上去
很專業(yè),但看了文檔好象要在op code的級(jí)別下寫代碼,頭暈。Javassist簡(jiǎn)單些,看完幾個(gè)sample心里基本
有數(shù)了,隨手找來(lái)一個(gè)有日期限制的Taglib,關(guān)鍵的代碼猜都不用猜在License.class里,反編譯后:
??
public static LicDate d()
{??
? String s = Dec("^%$&^%&*%&");
? return new LicDate.newInstance(Dec("%&&(*(&$%%"), s);
}
s里放著用Dec解碼的日期,自己寫個(gè)小程序:
import javassist.*;
public class Crack {
?public static void main(String args[])
?{
??try
??{
??? ClassPool pool = ClassPool.getDefault();
??? pool.insertClassPath("./taglib");
??? CtClass License = pool.get("License");
???
??? CtMethod a = License.getDeclaredMethod("d");
??? a.insertBefore("{return LicDate.newInstance(\"MM-dd-yyyy HH:mm:ss\",\"21-30-2088 01:01:01\");}"
??? License.writeFile();
??}
??catch (Exception e)
??{
???e.printStackTrace();
??}
?}
}
反編譯新的License.class發(fā)現(xiàn)文件改好了。
posted @ 2006-08-13 16:22 小螞蟻 閱讀(299) | 評(píng)論 (0) | 編輯 收藏