Программное окно;
{
Это пример подачи приложения
без использования блока форм. Формы
Delphi Unit, который делает ваши программы так чертовски
огромный! Forms.pas имеет весь код для перевода
формы, которые вы создаете с Delphi с компонентами
в окна. Если вы спросите меня, все, что добавляет
200 тысяч (@%#$!) В ваше приложение должно быть чертовски
неэффективный код.
Горди <[email protected]>
www.jps.net/gfody
}
использует Windows, сообщения;
{$ R *.res}
вар
Wclass: Twndclass; // класс структура для главного окна
HFONT, // Ручка шрифта
Hinst, // Ручка программы (hinstance)
Ручка, // ручка главного окна
hencrypt, // ручка кнопки шифрования
Hdecrypt, // Ручка кнопки расшифровки
Хедит, // Ручка главного редактирования
Hlabel, // Обработка метки пароля
HPW: HWND; // Редакция пароля редактирует
MSG: TMSG; // Структура сообщения
Денкрипт,
Ddecrypt: указатель; // Процедуры кнопки по умолчанию
(*------------------------------------------------ *)
// это все строит
процедура изменять размер;
вар
RCT: TRECT;
начинать
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);
конец;
(*------------------------------------------------ *)
// это для очистки и остановки программы
выключение процедуры;
начинать
DeleteObject (HFONT);
Unregisterclass ('выборка класса', hinst);
ExitProcess (Hinst); // конец программы
конец;
(*------------------------------------------------ *)
// расшифровывает текст в хедите с текстом в HPW
процедура дешифтирует;
вар
x, i, // count переменные
stext, spw: целое число; // размер текста, pw
Текст, pw: pchar; // буфер для текста, pw
начинать
stext: = getWindowTextLength (hedit) +1;
spw: = getWindowTextLength (HPW) +1;
GetMem (текст, Stext);
GetMem (pw, spw);
GetWindowText (Hedit, Text, Stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // Инициализировать счет
для i: = 0 для stext-2 do
начинать
Текст [i]: = chr (ord (text [i])-ord (pw [x]));
Inc (x);
Если x = (spw-1), то x: = 0;
конец;
SetWindowText (Hedit, Text);
Freemem (текст);
Freemem (PW);
конец;
(*------------------------------------------------ *)
// шифруют текст в хедите с текстом в HPW
процедура шифрована;
вар
x, i, // count переменные
stext, spw: целое число; // размер текста, pw
Текст, pw: pchar; // буфер для текста, pw
начинать
stext: = getWindowTextLength (hedit) +1;
spw: = getWindowTextLength (HPW) +1;
GetMem (текст, Stext);
GetMem (pw, spw);
GetWindowText (Hedit, Text, Stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // Инициализировать счет
для i: = 0 для stext-2 do
начинать
Текст [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;
вар
я: целое число;
начинать
// всегда передавать сообщение процедуре по умолчанию
Результат: = callwindowproc (dencrypt, hwnd, msg, wparam, lparam);
случай MSG OF
// Если пользователь нажимает вкладку, мы переключим Gunna
// Сфокусируйтесь на кнопке расшифровки.
Wm_keydown: если wparam = 9, то SetFocus (hDecrypt);
конец;
конец;
(*------------------------------------------------ *)
// Эта функция обрабатывает каждое сообщение, отправляемое на кнопку расшифровки
Функция DecryptProc (Hwnd, MSG, WPARAM, LPARAM: Longint): Longint; stdcall;
начинать
// всегда передавать сообщение процедуре по умолчанию
Результат: = callwindowproc (dencrypt, hwnd, msg, wparam, lparam);
случай MSG OF
// Если пользователь нажимает вкладку, мы переключаем Gunna Switch
// Фокус обратно на кнопку шифрования.
Wm_keydown: если wparam = 9, то Setfocus (henrypt);
конец;
конец;
(*------------------------------------------------ *)
// Эта функция обрабатывает каждое сообщение, отправляемое в наше главное окно
Функция WindowProc (HWND, MSG, WPARAM, LPARAM: Longint): Longint; stdcall;
начинать
// всегда передавать сообщение процедуре по умолчанию
Результат: = defWindowProc (Hwnd, MSG, WPARAM, LPARAM);
случай MSG OF
Wm_size: resize;
// Когда кнопки нажимаются, сообщение передается в
// родительское окно, поэтому мы обрабатываем его здесь.
Wm_command: if lparam = henrypt, тогда шифрует
иначе, если lparam = hdecrypt, тогда расшифровывает;
Wm_destroy: wepdown;
конец;
конец;
(*------------------------------------------------ *)
// Это основная программа функция (Winmain)
начинать
hinst: = getModuleHandle (nil); // Получить экземпляр приложения
// hinstance возвращает Zilch
с Wclass Do
начинать
Стиль: = CS_PARENTDC;
hicon: = loadicon (hinst, 'mainicon');
lpfnwndproc: = @windowproc;
hinstance: = hinst;
Hbrbackground: = color_btnface+1;
lpszclassname: = 'Пример класса';
Hcursor: = LoadCursor (0, idc_arrow);
конец;
// Как только наш класс будет зарегистрирован
// может начать создавать окна с ним
Registerclass (Wclass);
// Создать наше главное окно
Ручка: = createWindow (
«Пример класса», // зарегистрированное имя класса
'Encrypter - By: Gordy', // заголовок окна
Ws_overlappedwindow или // базовый стиль окна
Ws_visible, // сделать его видимым
10, // осталось
10, // Верх
400, // ширина
300, // высота
0, // Ручка родительского оконного окна
0, // Ручка меню
Hinst, // экземпляр приложения
ноль); // Структура для данных создания
// Создать кнопку шифрования
hencrypt: = createwindow (
'Кнопка',
'Encrypt',
Ws_visible или ws_child или bs_pushlike или bs_text,
5,5,65,24, ручка, 0, Хинст, ноль);
// Создать кнопку расшифровки
hdecrypt: = createwindow (
'Кнопка',
'Расшифровывает',
Ws_visible или ws_child или bs_pushlike или bs_text,
75,5,65,24, ручка, 0, Хинст, ноль);
// Создать основное редактирование
hedit: = createWindowex (
WS_EX_CLIENTEDGE, // Этот ex -стиль предназначен для скошенного края
'Редактировать',
'',
Ws_visible или ws_child или es_left или es_multiline или es_wantreturn или es_autovscroll или ws_vscroll,
5,34,380,234, ручка, 0, Хинст, ноль);
// Создать редактирование пароля
HPW: = CreateWindowEx (
Ws_ex_clientedge,
'Редактировать',
'',
Ws_visible или ws_child или es_left или es_autohscroll или es_password,
230,5,155,24, ручка, 0, Хинст, ноль);
hlabel: = createwindow (
«Статический»,
'Пароль:',
Ws_visible или ws_child или ss_left,
160,10,70,20, ручка, 0, Хинст, ноль);
// Создать пользовательский шрифт для нашего окна в противном случае
// Все будет использовать шрифт системы (Blech!)
hfont: = createFont (
-12, // высота
0, // ширина
0, // угол вращения
0, // Ориентация
0, // Вес
0, // курсив
0, // подчеркивается
0, // ударить
Default_charset, // char set
Out_default_precis, // precision
Clip_default_precis, // Criping
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);
// Кнопка шифрования подкласса (назначьте его на пользовательскую Windowproc)
dencrypt: = pointer (getWindowlong (hencrypt, gwl_wndproc));
SetWindowlong (henrypt, gwl_wndproc, longint (@encryptproc));
// кнопка Decrypt Subclass
ddecrypt: = pointer (getWindowlong (hdecrypt, gwl_wndproc));
SetWindowlong (hdecrypt, gwl_wndproc, longint (@decryptproc));
// причина, по которой я не подкладываю элементы управления редактированием здесь
// это потому, что они не делают ничего обычного. Если бы я хотел
// они, чтобы звучать или что -то в этом роде, когда вы напечатали «G», тогда
// я бы подкласс их.
// сосредоточиться на первом контроле (в противном случае люди без мыши) облажались)
SetFocus (Hencrypt);
// Теперь мы зацикливаем GetMessage для обработки каждого сообщения в
// Список сообщений нашего главного окна. Каждый раз, когда основной
// окно получает сообщение, добавленное в список, поэтому
// Эта цикл здесь в конечном итоге будет обработать его.
В то время как (getMessage (MSG, ручка, 0,0))
начинать
TranslateMessage (MSG); // Перевод любого клавиатуры MSG
DispatchMessage (MSG); // Отправить его на нашу Windowproc
конец; // для обработки.
конец.