Пятница, 19.10.2018, 22:19
Приветствую Вас Гость

LabSoft

Меню сайта
Категории каталога
Статьи по кодингу [24]
Материалы по кодингу
КреатиFF [144]
Рассказы, истории, анекдоты...
Разное [8]
Советы, трюки, полезные рекомендации, статьи о новом и забытом старом...
Наш опрос
Чего не хватает на сайте?
Всего ответов: 8
Главная » Статьи » Статьи по кодингу

APIDemoApp #2
program WinAPIDemo;

uses Windows, Messages;

{$R *.RES}

var
wClass: TWndClass; // Класс структуры главного окна
hFont, // хэндл of Шрифта
hInst,
Handle, // хэндл главного окна
hEncrypt, // хэндл кнопки Зашифровать
hDecrypt, // хэндл кнопки Расшифровать
hEdit, // хэндл главного поля
hLabel, // хэндл надписи
hPW: HWND; // хэндл Поля пароля
Msg: TMSG; // Структура сообщения
dEncrypt,
dDecrypt: Pointer;

procedure Resize;
var
RCT:TRect;
begin
GetWindowRect(Handle,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);
end;

//отчищаем и закрываем прогу
procedure ShutDown;
begin
DeleteObject(hFont);
UnRegisterClass('Sample Class',hInst);
Halt; //конец программы
end;

//Расшифровка
procedure Decrypt;
var
x,i,
sText,sPW: Integer;
Text,PW: PChar;
begin
sText:=GetWindowTextLength(hEdit)+1;
sPW:=GetWindowTextLength(hPW)+1;
GetMem(Text,sText);
GetMem(PW,sPW);
GetWindowText(hEdit,Text,sText);
GetWindowText(hPW,PW,sPW);
x:=0;
for i:=0 to sText-2 do
begin
Text[i]:=Chr(Ord(Text[i])-Ord(PW[x]));
Inc(x);
if x=(sPW-1)then x:=0;
end;
SetWindowText(hEdit,Text);
FreeMem(Text);
FreeMem(PW);
end;

//Зашифровка
procedure Encrypt;
var
x,i,
sText,sPW: Integer;
Text,PW: PChar;
begin
sText:=GetWindowTextLength(hEdit)+1;
sPW:=GetWindowTextLength(hPW)+1;
GetMem(Text,sText);
GetMem(PW,sPW);
GetWindowText(hEdit,Text,sText);
GetWindowText(hPW,PW,sPW);
x:=0;
for i:=0 to sText-2 do
begin
Text[i]:=Chr(Ord(Text[i])+Ord(PW[x]));
Inc(x);
if x=(sPW-1)then x:=0;
end;
SetWindowText(hEdit,Text);
FreeMem(Text); //память надо отчищать...
FreeMem(PW); //память надо отчищать...
end;

//процесс
function EncryptProc(hWnd,Msg,wParam,lParam:Longint):Longint; stdcall;
var
i: Integer;
begin
Result:=CallWindowProc(dEncrypt,hWnd,Msg,wParam,lParam);
case Msg of
//Tab меняет фокус объекта
WM_KEYDOWN: if wParam=9 then SetFocus(hDecrypt);
end;

end;

function DecryptProc(hWnd,Msg,wParam,lParam:Longint):Longint; stdcall;
begin
Result:=CallWindowProc(dEncrypt,hWnd,Msg,wParam,lParam);
case Msg of
//Tab меняет фокус объекта
WM_KEYDOWN: if wParam=9 then SetFocus(hEncrypt);
end;

end;

//обработка команд
function WindowProc(hWnd,Msg,wParam,lParam:Longint):Longint; stdcall;
begin
Result:=DefWindowProc(hWnd,Msg,wParam,lParam);

case Msg of
WM_SIZE: Resize;
WM_COMMAND: if lParam=hEncrypt then Encrypt
else if lParam=hDecrypt then Decrypt;
WM_DESTROY: ShutDown;
end;

end;

//основная программа
begin

hInst:=GetModuleHandle(nil);

with wClass do
begin
Style:= CS_PARENTDC;
hIcon:= LoadIcon(hInst,'MAINICON');
lpfnWndProc:= @WindowProc;
hInstance:= hInst;
hbrBackground:= COLOR_BTNFACE+1;
lpszClassName:= 'Sample Class';
hCursor:= LoadCursor(0,IDC_ARROW);
end;

RegisterClass(wClass);

//Основное окно
Handle:=CreateWindow(
'Sample Class', //Регистрация окна
'Шифровщик WinAPIDemo', //Заголовок окна
WS_OVERLAPPEDWINDOW or //Стиль окна
WS_VISIBLE, //
10, // Левая сторона
10, // Вверх
400, // Длина
300, // Высота
0,
0,
hInst,
nil);

//Кнопка Зашифровать
hEncrypt:=CreateWindow(
'Button',
'Зашифровать',
WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
5,5,78,24,Handle,0,hInst,nil);

//Кнопка расшифровки
hDecrypt:=CreateWindow(
'Button',
'Расшифровать',
WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
85,5,85,24,Handle,0,hInst,nil);

//
hEdit:=CreateWindowEx(
WS_EX_CLIENTEDGE,
'Edit',
'',
WS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or ES_WANTRETURN or ES_AUTOVSCROLL or WS_VSCROLL,
5,34,380,234,Handle,0,hInst,nil);

//Поле Edit
hPW:=CreateWindowEx(
WS_EX_CLIENTEDGE,
'Edit',
'',
WS_VISIBLE or WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or ES_PASSWORD,
230,5,155,24,Handle,0,hInst,nil);

hLabel:=CreateWindow(
'Static',
'Пароль:',
WS_VISIBLE or WS_CHILD or SS_LEFT,
180,10,40,20,Handle,0,hInst,nil);

//создаем шрифт и размер
hFont:=CreateFont(
-12, //размер
0,
0,
0,
0,
0, //наклон
0, //зачеркнут
0,
DEFAULT_CHARSET, //Тип кодировки
OUT_DEFAULT_PRECIS, //Точность
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE,
'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:=Pointer(GetWindowLong(hEncrypt,GWL_WNDPROC));
SetWindowLong(hEncrypt,GWL_WNDPROC,Longint(@EncryptProc));

//Подкласс кнопки Зашифровать
dDecrypt:=Pointer(GetWindowLong(hDecrypt,GWL_WNDPROC));
SetWindowLong(hDecrypt,GWL_WNDPROC,Longint(@DecryptProc));

//Фокус на объект
SetFocus(hEncrypt);

while(GetMessage(Msg,Handle,0,0))do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.

Категория: Статьи по кодингу | Добавил: Jimmy (02.02.2008) | Автор: Jimmy Jonezz
Просмотров: 496 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0