Убрать команду "закрыть" из
системного меню
Сделать серой кнопку "закрыть" в
заголовке формы
Подавить реакцию Windows на CTRL+ALT+DEL, ALT-TAB,
CTRL-ESC
Копирование файлов
Переключение языков из программы
Как отловить нажатия клавиш в системе.
Как установить картинку рабочего стола
из программы.
Как скрыть ТаскБар.
Получение списка запущеных приложений.
Как избавиться от "торможения".
Динамические массивы
Как перезагрузить компьютер.
Как создать Ini-файл в директории
программы.
Как получить дату последнего изменения
файла.
Изменение функций кнопок мышки
Изменение заголовка "чужого" окна
Изменение положения курсора мыши
-
-
- Следующий текст убирает команду
закрыть из системного меню и одновременно
- делает серой кнопку закрыть в заголовке
формы:
procedure TForm1.FormCreate(Sender: TObject);
var hMenuHandle:HMENU;
begin
hMenuHandle := GetSystemMenu(Handle, FALSE);
IF (hMenuHandle <> 0) THEN
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
end;
Вверх
Как подавить реакцию Windows
на CTRL+ALT+DEL, ALT-TAB, CTRL-ESC
В некоторых случаях (например, при
работе в полноэкранном режиме, показе своей
презентации или экранной заставки ...) бывает
полезно заблокировать перечисленные комбинации
клавиш. Они блокируются при работе системы в
режиме "экранная заставка" , который в свою
очередь несложно включить и выключить:
// Включение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
// Выключение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);
Кстати, SystemParametersInfo имеет еще кучу полезных
ключей SPI_****, подробности см. в win32.hlp
Вверх
Копирование файлов
Copyfile('C:\1.txt','C:\files\2.txt',0);
где первый параметр - путь и имя нужного
файла, а второй путь и имя нового(скопированого)
файла
Если же необходимо задавать имена
файлов через Edit, то:
Copyfile(PChar(edit1.text),PChar(edit2.text),0);
Вверх
Переключение языков из
программы
Для переключения языка применяется
вызов LoadKeyboardLayout:
var russian, latin: HKL;
russian:=LoadKeyboardLayout('00000419', 0);
latin:=LoadKeyboardLayout('00000409', 0);
-- -- -- -- -- где то в программе --- --- ---
SetActiveKeyboardLayout(russian);
Вверх
Как отловить нажатия клавиш в системе
- Для этого используется функция GetAsyncKeyState(KeyCode)
- в качестве параметра используются коды клавиш
(например
- A - 65). GetAsyncKeyState возвращает не нулевое значение
- если, во время ее вызова нажата указаная
клавиша.
//----Этот пример отлавливает нажатие клавиши "A"
//Этот код необходимо поместить в процедуру обработки
//таймера с интервалом "1"
if getasynckeystate(65)<>0 then showmessage('A - pressed');
//----------
Решение задачи "как отловить все клавиши" я предоставляю
Вам. Если возникли какие-нибудь вопросы - пишите.
Вверх
Как установить картинку рабочего
стола из программы?
program wallpapr;
uses Registry, WinProcs;
procedure SetWallpaper(sWallpaperBMPPath:String;bTile:boolean);
var
reg : TRegIniFile;
begin
// Изменяем ключи реестра
// HKEY_CURRENT_USER
// Control Panel\Desktop
// TileWallpaper (REG_SZ)
// Wallpaper (REG_SZ)
reg := TRegIniFile.Create('Control Panel\Desktop' );
with reg do begin
WriteString( '', 'Wallpaper',
sWallpaperBMPPath );
if( bTile )then
begin
WriteString('', 'TileWallpaper', '1' );
end else begin
WriteString('', 'TileWallpaper', '0' );
end;
end;
reg.Free;
// Оповещаем всех о том, что мы
// изменили системные настройки
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Nil,
{Эта строка - продолжение предыдущей}SPIF_SENDWININICHANGE );
end;
// пример установки WallPaper по центру рабочего стола
SetWallpaper('c:\winnt\winnt.bmp', False );
//Эту строчку надо написать где-то в программе.
Вверх
Как скрыть ТаскБар?
//Спрятать
procedure TForm1.Button1Click(Sender: TObject);
var
hTaskBar : THandle;
begin
hTaskbar := FindWindow('Shell_TrayWnd', Nil);
ShowWindow(hTaskBar, SW_HIDE);
end;
//Показать
procedure TForm1.Button2Click(Sender: TObject);
var
hTaskBar : THandle;
begin
hTaskbar := FindWindow('Shell_TrayWnd', Nil);
ShowWindow(hTaskBar, SW_SHOWNORMAL);
end;
Для получения более детальной информации пишите.
Вверх
Получение списка запущеных приложений.
procedure TForm1.Button1Click(Sender: TObject);
VAR
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN {Не показываем:}
IF (Wnd <> Application.Handle) AND {-Собственное окно}
IsWindowVisible(Wnd) AND {-Невидимые окна}
(GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
ListBox1.Items.Add(StrPas(buff));
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
ListBox1.ItemIndex := 0;
end;
Вверх
Как избавиться от торможения?
Немодальные диалоговые окна, находящиеся на
экране во время выполнения длительных операций,
могут реагировать на действия пользователя
очень медленно. Это ограничение Windows, и обойти его
можно так:
- while Flag do
- begin
- PerformOperation;
- Application.ProcessMessages;
- Flag:=ContinueOperation;
- end;
Вверх
Динамические массивы
Иногда разработчик, работая с массивами, не
знает какого размера массив ему нужен. Тогда Вам
пригодится использование динамических массивов.
- var
- intArray : array of integer;
При таком объявлении размер массива не
указывается. Что бы использовать его дальше
необходимо определить его размер (обратите
внимание, что размер динамического массива можно
устанавливать в программе)
- begin
- intArray:=(New(IntArray,100); //Размер массива 100
- end;
Вверх
Как перезагрузить компьютер?
Используйте соответствующий
компонент.
Вверх
Как создать Ini-файл в
директории программы?
По умолчанию ini-файл создается в
Windows-директории (например: TIniFile.Create('MFile.ini' )), что
приводит к "захламлению" оной. Более
(эко-)логично (за исключением случаев, когда
программа делается для CD-ROM) если ini-файл
создается в той же директории что и главная
программа. Вот пример чтения и записи ini файла из
директории программы.
function ReadIni(ASection, AString : String) : String;
var
sIniFile: TIniFile;
sPath : String[60];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath + '\Name.INI');
Result := sIniFile.ReadString(ASection, AString, S); sIniFile.Free;
end;
procedure WriteIni(ASection, AString, AValue : String);
var
sIniFile: TIniFile;
sPath : String[60];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath + '\Name.INI');
sIniFile.WriteString(ASection, AString, AValue);
sIniFile.Free;
end;
(Прислал Стас)
Вверх
Как получить дату последнего
изменения файла?
- function GetFileDate(FileName: string): string;
var
FHandle: Integer;
begin
FHandle := FileOpen(FileName, 0);
try
Result :=
DateTimeToStr(FileDateToDateTime(FileGetDate(FHandle)));
finally
FileClose(FHandle);
end;
end;
Вверх
-
- Begin
- //---------
- SwapMouseButton(true); // Поменять обратно -
SwapMouseButton(false);
- //---------
- end;
Вверх
Изменение заголовка
"чужого" окна
SetWindowText('Текущий заголовок', 'Желаемый');
Например:
- Заменить заголовк окна "Блокнот" на "Мой
НЕ Блокнот"
- SetWindowText('Блокнот','Мой НЕ Блокнот');
Вверх
Изменение положения курсора мыши
Установка курсора мыши в определенное
место
|
Чтобы установить курсор мыши в
какое-либо место экрана необходимо
воспользоваться функцией SetCursorPos(x,y); Например:
Чтобы установить курсор в верхний левый угол
монитора нужно написать следующий код: SetCursorPos(0,0); |
Получение координат курсора
Для начала необходимо определить
переменную pos типа TPoint. Сначала:
- //Вне процедуры!
- Type Tpoint = record
x:integer;
y:integer;
end;
Потом объявляете саму переменную :
- Var
- Pos: TPoint;
И собчтвенно получение координат:
- begin;
- GetCursorPos(pos);
- x:=pos.x;
- y:=pos.y;
- end;
-
|
Вверх
|