プログラムウィンドウ。
{
これはアプリケーションを作成する例です
フォームユニットを使用せずに。 forms.pasはです
あなたのプログラムをとても気にするデルファイユニット
巨大な! forms.pasには、翻訳するためのすべてのコードがあります
コンポーネント付きDelphiで作成するフォーム
Windowsに。あなたが私に尋ねるなら、追加するものは何でも
あなたのアプリへの200k(@%#$!)はいくつかの気にしなければなりません
非効率的なコード。
Gordy <[email protected]>
www.jps.net/gfody
}
Windows、メッセージを使用します。
{$ r *.res}
var
wclass:twndclass; //メインウィンドウのクラス構造
hfont、//フォントのハンドル
Hinst、//プログラムのハンドル(Hinstance)
ハンドル、//メインウィンドウのハンドル
Hencrypt、//暗号化ボタンのハンドル
hdecrypt、//復号化ボタンのハンドル
hedit、//メイン編集のハンドル
hlabel、//パスワードラベルのハンドル
HPW:HWND; //パスワード編集のハンドル
MSG:TMSG; //メッセージstruct
dencrypt、
ddecrypt:ポインター; //デフォルトのボタン手順
(*------------------------------------------------------------- *)
//これはすべてを並べます
手順のサイズ変更。
var
RCT:Trect;
始める
getWindowRect(ハンドル、RCT);
MoveWindow(HPW、230,5、RCT.RIGHT-RCT.LEFT-245,24、TRUE);
MoveWindow(Hedit、5,34、rct.right-rct.Left-20、rct.bottom-rct.top-66、true);
終わり;
(*------------------------------------------------------------- *)
//これは、プログラムをクリーンアップして停止することです
手順シャットダウン。
始める
deleteObject(hfont);
UnregisterClass( 'Sample Class'、Hinst);
ExitProcess(Hinst); //プログラムを終了します
終わり;
(*------------------------------------------------------------- *)
// hpwのテキストでヘディットのテキストを復号化する
手順復号化。
var
x、i、//カウント変数
stext、spw:整数; //テキストのサイズ、pw
テキスト、PW:PCHAR; //テキスト用バッファー、PW
始める
stext:= getWindowTextLength(hedit)+1;
SPW:= getWindowTextLength(HPW)+1;
getMem(Text、Stext);
GetMem(PW、SPW);
getWindowText(hedit、text、stext);
getWindowText(HPW、PW、SPW);
x:= 0; // countを初期化します
i:= 0からstext-2の場合
始める
テキスト[i]:= chr(ord(text [i]) - ord(pw [x]));
inc(x);
x =(spw-1)の場合、x:= 0;
終わり;
setWindowText(hedit、text);
Freemem(テキスト);
Freemem(PW);
終わり;
(*------------------------------------------------------------- *)
// hpwのテキストでヘディットのテキストを暗号化します
手順暗号化。
var
x、i、//カウント変数
stext、spw:整数; //テキストのサイズ、pw
テキスト、PW:PCHAR; //テキスト用バッファー、PW
始める
stext:= getWindowTextLength(hedit)+1;
SPW:= getWindowTextLength(HPW)+1;
getMem(Text、Stext);
GetMem(PW、SPW);
getWindowText(hedit、text、stext);
getWindowText(HPW、PW、SPW);
x:= 0; // countを初期化します
i:= 0からstext-2の場合
始める
テキスト[i]:= chr(ord(text [i])+ord(pw [x]));
inc(x);
x =(spw-1)の場合、x:= 0;
終わり;
setWindowText(hedit、text);
Freemem(テキスト);
Freemem(PW);
終わり;
(*------------------------------------------------------------- *)
//この関数は、[暗号]ボタンに送信されるすべてのメッセージを処理します
関数encryptProc(hwnd、msg、wparam、lparam:longint):longint; stdcall;
var
I:整数;
始める
//必ずメッセージをデフォルトの手順に渡します
結果:= callwindowproc(dencrypt、hwnd、msg、wparam、lparam);
のケースMSG
//ユーザーがタブを押すと、ガンナが切り替わります
// decryptボタンに焦点を合わせます。
wm_keydown:wparam = 9の場合、setfocus(hdecrypt);
終わり;
終わり;
(*------------------------------------------------------------- *)
//この関数は、decryptボタンに送信されるすべてのメッセージを処理します
関数decryptproc(hwnd、msg、wparam、lparam:longint):longint; stdcall;
始める
//必ずメッセージをデフォルトの手順に渡します
結果:= callwindowproc(dencrypt、hwnd、msg、wparam、lparam);
のケースMSG
//ユーザーがタブを押した場合、Gunna Switchになります
// [暗号]ボタンにフォーカスを戻します。
wm_keydown:wparam = 9の場合、setfocus(hencrypt);
終わり;
終わり;
(*------------------------------------------------------------- *)
//この関数は、メインウィンドウに送信されるすべてのメッセージを処理します
function windowproc(hwnd、msg、wparam、lparam:longint):longint; stdcall;
始める
//必ずメッセージをデフォルトの手順に渡します
結果:= defwindowproc(hwnd、msg、wparam、lparam);
のケースMSG
wm_size:sezize;
//ボタンがクリックされると、メッセージが渡されます
//親のウィンドウをしているので、ここでそれを処理します。
wm_command:lparam = hencryptの場合、暗号化します
それ以外の場合、lparam = hdecryptの場合は復号化します。
wm_destroy:シャットダウン;
終わり;
終わり;
(*------------------------------------------------------------- *)
//これはメインプログラム関数(Winmain)です
始める
Hinst:= getModuleHandle(nil); //アプリケーションインスタンスを取得します
// hinstanceはZilchを返します
WCLASSでは
始める
スタイル:= cs_parentdc;
ヒコン:= loadicon(hinst、 'mainicon');
lpfnwndproc:= @windowproc;
Hinstance:= Hinst;
hbrbackground:= color_btnface+1;
lpszClassName:= 'サンプルクラス';
hcursor:= loadcursor(0、idc_arrow);
終わり;
//クラスが登録されたら、私たち
// Windowsの作成を開始できます
RegisterClass(wclass);
//メインウィンドウを作成します
ハンドル:= createwindow(
「サンプルクラス」、//登録クラス名
'暗号化 - by:Gordy'、//ウィンドウのタイトル
ws_overlappwindowまたは//基本的なウィンドウスタイル
ws_visible、//それを見えるようにします
10、//左
10、//トップ
400、//幅
300、//高さ
0、//親のウィンドウハンドル
0、//メニューのハンドル
Hinst、//アプリケーションインスタンス
nil); //作成データの構造
// [暗号]ボタンを作成します
hencrypt:= createwindow(
'ボタン'、
「暗号化」、
ws_visibleまたはws_childまたはbs_pushlikeまたはbs_text、
5,5,65,24、ハンドル、0、ヒンスト、nil);
// decryptボタンを作成します
hdecrypt:= createwindow(
'ボタン'、
'Decrypt'、
ws_visibleまたはws_childまたはbs_pushlikeまたはbs_text、
75,5,65,24、ハンドル、0、ヒンスト、nil);
//メイン編集を作成します
hedit:= createwindowex(
ws_ex_clientedge、//このexスタイルはbeveled edgeのためです
'編集'、
''、
ws_visibleまたはws_childまたはes_leftまたはes_multilineまたはes_wantreturnまたはes_autovscrollまたはws_vscroll、
5,34,380,234、ハンドル、0、ヒンスト、nil);
//パスワード編集を作成します
hpw:= createwindowex(
WS_EX_CLIENTEDGE、
'編集'、
''、
ws_visibleまたはws_childまたはes_leftまたはes_autohscrollまたはes_password
230,5,155,24、ハンドル、0、ヒンスト、nil);
hlabel:= createwindow(
'静的'、
'パスワード:'、
ws_visibleまたはws_childまたはss_left、
160,10,70,20、ハンドル、0、ヒンスト、nil);
//ウィンドウのカスタムフォントを作成します
//すべてがシステムフォントを使用します(Blech!)
hfont:= createfont(
-12、//高さ
0、//幅
0、//回転角
0、//方向
0、//重量
0、//イタリック
0、//下線
0、//ストライクアウト
default_charset、// char set
out_default_precis、// precision
clip_default_precis、//クリッピング
default_quality、//品質をレンダリングします
default_pitchまたはff_dontcare、// pitch&family
'Sans serif ms'); //フォント名
//すべてのコントロールにフォントを設定します
sendMessage(Hencrypt、wm_setfont、hfont、0);
sendMessage(hdecrypt、wm_setfont、hfont、0);
sendMessage(hedit、wm_setfont、hfont、0);
SendMessage(HPW、WM_SETFONT、HFONT、0);
sendMessage(hlabel、wm_setfont、hfont、0);
//サブクラス暗号化ボタン(カスタムウィンドウプロックを割り当てます)
dencrypt:= pointer(getwindowlong(hencrypt、gwl_wndproc));
SetWindowlong(Hencrypt、gwl_wndproc、longint(@encryptproc));
//サブクラス復号化ボタン
ddecrypt:= pointer(getWindowlong(hdecrypt、gwl_wndproc));
SetWindowlong(HDECRYPT、GWL_WNDPROC、LONGINT(@decryptProc));
//ここで編集コントロールをサブクラス化しない理由
//彼らは何もしないからです。欲しかったら
//「g」を入力したときはいつでもビープ音など
//私はそれらをサブクラス化します。
//最初のコントロールに焦点を当てる(そうでなければマウスのない人がねじ込まれている)
setfocus(hencrypt);
//ここで、getMessageをループして各メッセージを処理します
//メインウィンドウのメッセージリスト。メインが毎回
//ウィンドウはリストに追加されたメッセージを受け取りますので、
//ここのこのループは最終的にそれを処理します。
while(getmessage(msg、handle、0,0))
始める
TransMessage(MSG); //キーボードMSGを翻訳します
DispatchMessage(MSG); // WindowProcに送信します
終わり; //処理用。
終わり。