프로그램 창;
{
이것은 응용 프로그램을 만드는 예입니다
양식 단위를 사용하지 않고. 형식 .pas는입니다
당신의 프로그램을 너무 망할 델파이 부대
거대한! forms.pas에는 번역을위한 모든 코드가 있습니다
구성 요소가있는 Delphi로 만든 양식
창으로. 당신이 나에게 묻는다면, 추가하는 것은 무엇이든
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; // 메시지 구조
덴드 크립트,
ddecrypt : 포인터; // 기본 버튼 절차
(*------------------------------------------------- *)
// 이것은 모든 것을 끝내고 있습니다
절차 크기 조정;
var
RCT : Trect;
시작하다
getWindowRect (핸들, RCT);
Move-Window (HPW, 230,5, Rct.Right-Rct.Left-245,24, True);
Move-Window (Hedit, 5,34, Rct.right-Rct.left-20, Rct.bottom-rct.top-66, true);
끝;
(*------------------------------------------------- *)
// 이것은 프로그램을 정리하고 중지하는 것입니다
절차 종료;
시작하다
deleteobject (hfont);
UnregisterClass ( '샘플 클래스', Hinst);
ExitProcess (Hinst); // 엔드 프로그램
끝;
(*------------------------------------------------- *)
// HPW의 텍스트와 함께 Hedit의 텍스트를 해독합니다.
절차 해독;
var
x, i, // 카운트 변수
Stext, SPW : 정수; // 텍스트 크기, pw
텍스트, PW : PCHA; // 텍스트의 버퍼, pw
시작하다
Stext : = GetWindowTextLength (Hedit) +1;
SPW : = GetWindowTextLength (HPW) +1;
getMem (텍스트, Stext);
getmem (pw, spw);
getWindowText (Hedit, Text, Stext);
getWindowText (HPW, PW, SPW);
x : = 0; // count 초기화
i : = 0 to Stext-2 do의 경우
시작하다
텍스트 [i] : = chr (ord (text [i]) -Sr (pw [x]);
Inc (x);
x = (spw-1)이면 x : = 0;
끝;
setWindowText (Hedit, Text);
프리 메미 (텍스트);
프리미 (PW);
끝;
(*------------------------------------------------- *)
// HPW의 텍스트와 함께 Hedit의 텍스트를 암호화합니다.
절차 암호화;
var
x, i, // 카운트 변수
Stext, SPW : 정수; // 텍스트 크기, pw
텍스트, PW : PCHA; // 텍스트의 버퍼, pw
시작하다
Stext : = GetWindowTextLength (Hedit) +1;
SPW : = GetWindowTextLength (HPW) +1;
getMem (텍스트, Stext);
getmem (pw, spw);
getWindowText (Hedit, Text, Stext);
getWindowText (HPW, PW, SPW);
x : = 0; // count 초기화
i : = 0 to Stext-2 do의 경우
시작하다
텍스트 [i] : = chr (ord (text [i])+ord (pw [x]);
Inc (x);
x = (spw-1)이면 x : = 0;
끝;
setWindowText (Hedit, Text);
프리 메미 (텍스트);
프리미 (PW);
끝;
(*------------------------------------------------- *)
//이 함수는 암호화 버튼으로 전송 된 모든 메시지를 처리합니다.
함수 EncryptProc (HWND, MSG, WPARAM, LPARAM : LONGINT) : longint; stdcall;
var
I : 정수;
시작하다
// 항상 기본 절차에 메시지를 전달합니다
결과 : = CallWindowProc (Dencrypt, HWND, MSG, WPARAM, LPARAM);
사례 msg
// 사용자가 탭을 누르면 Gunna Switch
// 해독 버튼에 초점을 맞 춥니 다.
wm_keydown : wparam = 9 인 경우 setfocus (hdecrypt);
끝;
끝;
(*------------------------------------------------- *)
//이 함수는 해독 버튼으로 전송 된 모든 메시지를 처리합니다.
함수 DecryptProc (HWND, MSG, WPARAM, LPARAM : LONGINT) : longint; stdcall;
시작하다
// 항상 기본 절차에 메시지를 전달합니다
결과 : = CallWindowProc (Dencrypt, HWND, MSG, WPARAM, LPARAM);
사례 msg
// 사용자가 탭을 누르면 Gunna Switch를 누릅니다
// 암호화 버튼으로 다시 중점을 둡니다.
wm_keydown : wparam = 9 인 경우 setfocus (hencrypt);
끝;
끝;
(*------------------------------------------------- *)
//이 함수는 기본 창으로 전송 된 모든 메시지를 처리합니다.
기능 WindowProc (HWND, MSG, WPARAM, LPARAM : LONGINT) : Longint; stdcall;
시작하다
// 항상 기본 절차에 메시지를 전달합니다
결과 : = defwindowproc (hwnd, msg, wparam, lparam);
사례 msg
WM_SIZE : 크기 조정;
// 버튼을 클릭하면 메시지가 전달됩니다.
// 부모 창이 여기에서 처리합니다.
WM_COMMAND : LPARAM = HENCRYPT 인 경우 암호화
그렇지 않으면 lparam = hdecrypt이면 해독;
WM_DESTROY : 종료;
끝;
끝;
(*------------------------------------------------- *)
// 이것은 주요 프로그램 기능 (WinMain)입니다.
시작하다
Hinst : = GetModuleHandle (nil); // 응용 프로그램 인스턴스를 가져옵니다
// Hinstance는 zilch를 반환합니다
WCLASS와 함께
시작하다
스타일 : = CS_ParentDC;
히콘 : = 로디콘 (Hinst, 'Mainicon');
lpfnwndproc : = @windowproc;
Hinstance : = Hinst;
hbrackground : = color_btnface+1;
lpszclassName : = '샘플 클래스';
hcursor : = loadcursor (0, idc_arrow);
끝;
// 수업이 등록되면
// Windows를 시작할 수 있습니다
레지스터 클래스 (WCLASS);
// 메인 창을 만듭니다
핸들 : = CreateWindow (
'샘플 클래스', // 등록 클래스 이름
'Encrypter -by : Gordy', // 창 제목
ws_overlappedwindow 또는 // 기본 창 스타일
ws_visible, // 가시적입니다
10, // 왼쪽
10, // 상단
400, // 너비
300, // 높이
0, // 부모 창 핸들
0, // 메뉴 핸들
Hinst, // 응용 프로그램 인스턴스
무); // 생성 데이터 구조
// 암호화 버튼을 만듭니다
Hencrypt : = CreateWindow (
'단추',
'암호화',
ws_visible 또는 ws_child 또는 bs_pushlike 또는 bs_text,
5,5,65,24, 핸들, 0, Hinst, Nil);
// 해독 버튼을 만듭니다
hdecrypt : = CreateWindow (
'단추',
'해독',
ws_visible 또는 ws_child 또는 bs_pushlike 또는 bs_text,
75,5,65,24, 핸들, 0, Hinst, Nil);
// 기본 편집을 만듭니다
Hedit : = CreateWindowEx (
WS_EX_CLIENDEDGE, //이 전 스타일은 경사 가장자리를위한 것입니다.
'편집하다',
'',
ws_visible 또는 ws_child 또는 es_left 또는 es_multiline 또는 es_wantreturn 또는 es_autovscroll 또는 ws_vscroll,
5,34,380,234, 핸들, 0, Hinst, Nil);
// 비밀번호 편집을 만듭니다
HPW : = CreateWindowEx (
ws_ex_clientedge,
'편집하다',
'',
ws_visible 또는 ws_child 또는 es_left 또는 es_autohscroll 또는 es_password,
230,5,155,24, 핸들, 0, Hinst, Nil);
hlabel : = CreateWindow (
'공전',
'비밀번호:',
ws_visible 또는 ws_child 또는 ss_left,
160,10,70,20, 핸들, 0, Hinst, Nil);
// 창에 대한 사용자 정의 글꼴을 만듭니다
// 모든 것이 시스템 글꼴을 사용합니다 (Blech!)
hfont : = CreateFont (
-12, // 높이
0, // 너비
0, // 회전 각도
0, // 오리엔테이션
0, // 무게
0, // 이탈리아
0, // 밑줄
0, // 파업
default_charset, // char 세트
out_default_precis, // 정밀도
clip_default_precis, // 클리핑
default_quality, // 품질 렌더링
default_pitch 또는 ff_dontcare, // pitch & family
'MS Sans Serif'); // 글꼴 이름
// 모든 컨트롤에 대한 글꼴을 설정합니다
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 : = 포인터 (getwindowlong (hencrypt, gwl_wndproc));
setwindowlong (hencrypt, gwl_wndproc, longint (@encryptproc));
// 서브 클래스 데스 크립스 버튼
ddecrypt : = 포인터 (getwindowlong (hdecrypt, gwl_wndproc));
setwindowlong (hdecrypt, gwl_wndproc, longint (@decryptproc));
// 여기에서 편집 컨트롤을 서브 클래스하지 않는 이유
// 사용자 지정을하지 않기 때문입니다. 내가 원한다면
// "G"를 입력 할 때마다 경고음이나 무언가
// 나는 그들을 서브 클래스 할 것이다.
// 첫 번째 컨트롤에 중점
setfocus (Hencrypt);
// 이제 각 메시지를 처리하기 위해 getMessage를 루프합니다.
// 메인 창의 메시지 목록. 메인 할 때마다
// Window는 목록에 추가 된 메시지를받습니다.
// 여기서이 루프는 결국 처리합니다.
while (getMessage (msg, hands, 0,0))
시작하다
TransleMessage (MSG); // 키보드 메시지를 번역합니다
DispatchMessage (MSG); // WindowProc으로 보내십시오
끝; // 처리를 위해.
끝.