nyuuzyou/wikis huggingface dataset:
Установить размеры бумаги

var
 Device, Driver, Port: array[0..80] of Char;
 DevMode: THandle;
 pDevmode: PDeviceMode;
 begin
 // Get printer device name etc.
 Printer.GetPrinter(Device, Driver, Port, DevMode);
 // force reload of DEVMODE
 Printer.SetPrinter(Device, Driver, Port, 0) ;
 // get DEVMODE handle
 Printer.GetPrinter(Device, Driver, Port, DevMode);
 if Devmode <> 0 then
 begin
 // lock it to get pointer to DEVMODE record
 pDevMode := GlobalLock(Devmode);
 If pDevmode <> Nil Then
 try
 with pDevmode^ do
 begin
 // modify paper size
 dmPapersize := DMPAPER_B5;
 // tell printer driver that dmPapersize field contains
 // data it needs to inspect.
 dmFields := dmFields or DM_PAPERSIZE;
 end;
 finally
 // unlock devmode handle.
 GlobalUnlock(Devmode);
 end;
 end;
 end;
ID: 03257
Category:Принтер
Установка/снятие Debug привелегии у текущего процесса

=== Установка/снятие Debug привелегии у текущего процесса ===
{ **** UBPFD *********** by kladovka.net.ru ****
>> Установка/снятие Debug привелегии у текущего процесса
Функция устанавливает/снимает отладочные привелегии у
текущего процесса (можно выбрать и другой, изменив
GetCurrentProcess на нужный Handle ).
Актуально для совместного использования с ToolHelp - т.е. получения информации о процессах.
Зависимости: Windows
Copyright: 2000 Jeffrey Richter
Дата: 20 октября 2003 г.
********************************************** }
function EnableDebugPrivilege(const Value: Boolean): Boolean;
const
 SE_DEBUG_NAME = 'SeDebugPrivilege';
var
 hToken: THandle;
 tp: TOKEN_PRIVILEGES;
 d: DWORD;
begin
 Result := False;
 if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken) then
 begin
 tp.PrivilegeCount := 1;
 LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid);
 if Value then
 tp.Privileges[0].Attributes := $00000002
 else
 tp.Privileges[0].Attributes := $80000000;
 AdjustTokenPrivileges(hToken, False, tp, SizeOf(TOKEN_PRIVILEGES), nil, d);
 if GetLastError = ERROR_SUCCESS then
 begin
 Result := True;
 end;
 CloseHandle(hToken);
 end;
end;
Пример использования:
// После этого можно смотреть информация о таких системных модулях как:
// winlogon.exe и servises.exe и д.р.
EnableDebugPrivilege(True); // включить
EnableDebugPrivilege(False); // выключить
ID: 02141
Установка ODBC

=== Установка ODBC ===
...если вам нужно знать, что творится за сценой, нужно просто взглянуть на эти два файла, оба человеко-читаемых, оба расположенных в вашей директории Windows.
A) ODBCINST.INI - описание всех установленных драйверов ODBC
Секция [ODBC Drivers] в каждой строчке описывает один драйвер. Здесь прописано формальное имя драйвера, использующегося позже для идентификации драйвера.
Каждый драйвер, как вы увидите позже, имеет собственную секцию, к примеру, вот секция для Watcom :
 {1} [Watcom SQL 4.0]
 {2} Driver=D:\WIN31\SYSTEM\WOD40W.DLL
 {3} Setup=D:\WIN31\SYSTEM\WOD40W.DLL
* Строка 1 содержит имя секции драйвера из [ODBC Drivers].
* Строка 2 сообщает Windows о том, где следует искать DLL, содержащую методы, применяемые ODBC для доступа к базам данных Watcom.
* Строка 3 сообщает Windows о том, где следует искать DLL, содержащую методы, применяемые ODBC для административных целей.
Все, что имеется в файле ODBCINST.INI - теперь содержится в файле #2 (таком же легком для изучения):
B) ODBC.INI - описание всех ваших баз данных (источников данных, говоря языком ODBC)
Секция [ODBC Data Sources] в каждой строчке описывает одну базу данных; формат:
 {описание базы данных} = {описание драйвера из ODBCINST.INI}
Данный файл сообщает ODBC, к каким базам данных вы хотите иметь доступ и какой драйвер для каждой конкретной базы данных для этого необходим.
Каждая база данных, как вы увидите позже, имеет собственную секцию, к примеру, вот секция PB Demo:
 {1} [Powersoft Demo DB=Watcom SQL 4.0]
 {2} DatabaseFile=E:\PB4\EXAMPLES\PSDEMO.DB
 {3} DatabaseName=PSDEMODB
 {4} UID=dba
 {5} PWD=sql
 {6} Driver=D:\WIN31\SYSTEM\WOD40W.DLL
 {7} Start=D:\WSQL40\DBSTARTW -d -c512
* Строка 1 содержит ссылку на секцию [ODBC Data Sources].
* Строка 2 содержит физический путь к файлу базы данных.
* Строка 3 - описание, только для вашего чтения.
* Строка 4 - User ID, которое Watcom применяет для установления связи.
* Строка 5 - Пароль, используемый для установления соединения.
** Это не очень секретно; если вы оставите эту строку пустой, Watcom сам спросит пароль при получении доступа к базе данных.
* Строка 6 содержит имя драйвера (снова - сравните с OBDCINST.INI)
* Строка 7 содержит имя движка базы данных для ее запуска (это необходимо лишь для баз данных SQL, например, в версии Client / Server).
Все это может быть отредактировано как вручную (в любом текстовом редакторе), так и в ODBCADM (ODBC Administration). Что касается меня лично, то я более не использую ODBCADM; я ощущаю себя гораздо лучше, если имею больший контроль над INI-файлами, редактируя строки вручную.
Структура секций в файле ODBC.INI может отличаться для разных драйверов, поэтому вам необходимо научиться ориентироваться по ключевым словам, описанным выше.
Предупреждение: весь опубликованный мною материал получен путем моих собственных исследований, вследствие чего я не могу гарантировать его достоверность. По крайней мере я успешно использую его для получения доступа к ODBC уже более года.
Author: Johannes M. Becher (CODATA GmbH Krefeld, Germany) 
Source: Взято с http://delphiworld.narod.ru
ID: 02678
Установка SoftIce

1. Для того, чтобы заниматься взломом виндовских программ обязательно нужен отладчик - самый популярный сейчас SoftIce, он есть на www.numega.com, но там его придётся покупать, можно также качнуть его, но уже бесплатно, здесь, а вообще лучше взять, да купить что-нибудь на подобии диска "Штурман хакера" - там много чего ещё есть.
2. Установка SoftIce'а тоже дело серьёзное - когда дело дойдёт до выбора модели видеокарты - ничего не выбирайте, а установите флажок "Universal Video Driver", иначе выходить будете только по RESET. На вопрос о выборе порта мыши честно отметьте к какому порту она подключена - иначе придётся обходиться без мыши. При запросе на изменение AUTOEXEC.BAT разрешите это - добавляется строка каждый раз запускающая SoftIce до Windows'а (кстати не знаю насколько я прав, но по моему Windows ME вообще не запускает AUTOEXEC.BAT во время загрузки - возможно придётся установить Windows 98).
3. Если вы всё вышесказанное сделали правильно, то войдя в винды и нажав Ctrl-D - вы получете окно SoftIce'а в верхнем левом углу экрана (убирается окно также - Ctrl-D или F5), но это ещё не всё - для полноценного ломания программ, SoftIce нужно ещё и настроить. Все его настройки хранятся в файле Winice.dat в папке, куда установлена программа, откройте его в текстовом редакторе и сделайте следующее:
Во-первых, вместо
 INIT="X;"
наберите
 INIT="color 7 e 1a 5b a; code on; lines 60; wc 40; faults on; X;" ; - это управление интерфейсом.
Во-вторых, там существует множество строк типа:
 ;EXP=c:\windows\system\netlib32.dll
обратите внимание на ";" в начале строки - проверьте какие из перечисленных там файлов действительно существуют по соответствующему адресу и УБЕРИТЕ ";" перед теми строками.
4. Теперь, после перезагрузки компьютера, отладчик готов к работе - можно переходить к урокам крэкерства.
Author: Bad_guy
Source: http://delphiworld.narod.ru
ID: 04515
Category:Разработка приложений
Category:Защита и взлом
Установка бита в единицу

=== Установка бита в единицу ===
Установка бита в единицу
function BitOn(const val: LongInt; const TheBit: Byte): LongInt;
begin
 Result := val or (1 shl TheBit);
end;
procedure SetBit(SetWord, BitNum: Word);
begin
 SetWord := SetWord or BitNum; { Устанавливаем бит }
end;
Source: http://delphiworld.narod.ru
ID: 00815
----
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Установка определенного бита в слове
Возвращает AWord с установленным битом номер ABit (c 0 по 15) в значение 1,
если AState = TRUE или 0, если AState = FALSE.
Стоит заметить, что в функцию передается именно номер бита, а не маска.
Проверка на правильный номер не производится.
Зависимости: System
Автор: Григорий Ситнин, gregor@gregor.ru, Москва
Copyright: Григорий Ситнин, 2003
Дата: 8 июля 2003 г.
***************************************************** }
function SetBit(AWord: word; ABit: byte; AState: boolean = true): word;
begin
 if AState then
 Result := AWord or (1 shl ABit)
 else
 Result := AWord and (not (1 shl ABit));
end;
// Пример использования: 
{$APPTYPE CONSOLE}
program test;
uses Bits; // В модуле Bits описана функция SetBit
var
 z: word;
 i: integer;
 s: string;
begin
 z := 0;
 z := setbit(z, 0); // 0000000000000001
 z := setbit(z, 2); // 0000000000000101
 z := setbit(z, 9); // 0000001000000101
 z := setbit(z, 14); // 0100001000000101
 z := setbit(z, 15); // 1100001000000101
 s := ;
 for i := 15 downto 0 do
 s := s + inttostr(Ord(CheckBit(z, i)));
 writeln('value: ', z, ' dec = 1100001000000101');
 writeln('result: ', s);
 z := $FFFF;
 z := setbit(z, 0, false); // 1111111111111110
 z := setbit(z, 2, false); // 1111111111111010
 z := setbit(z, 9, false); // 1111110111111010
 z := setbit(z, 14, false); // 1011110111111010
 z := setbit(z, 15, false); // 0011110111111010
 s := ;
 for i := 15 downto 0 do
 s := s + inttostr(Ord(CheckBit(z, i)));
 writeln('value: ', z, ' dec = 0011110111111010');
 writeln('result: ', s);
end.
Source: http://delphibase.endimus.com
ID: 00834
Установка бита в ноль

=== Установка бита в ноль ===
Установка бита в ноль
function BitOff(const val: LongInt; const TheBit: Byte): LongInt;
begin
 Result := val and ((1 shl TheBit) xor $FFFFFFFF);
end;
Source: Взято из http://forum.sources.ru
ID: 00228
----
function BitOff(const val: LongInt; const TheBit: Byte): LongInt; 
begin
 Result := val and not (1 shl TheBit); 
end; 
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00229
----
procedure ClearBit(SetWord, BitNum: Word);
begin
 SetWord := SetWord or BitNum; { Устанавливаем бит }
 SetWord := SetWord xor BitNum; { Переключаем бит }
end;
Source: http://delphiworld.narod.ru
ID: 00816
Установка каретки в RichEdit

=== Установка каретки в RichEdit ===
Узнать положение курсора в RichEdit не составляет труда (richedit.GetCaret). А вот как установить каретку в нужное место?
procedure SetLine(WhichEdit: TRichedit; Linepos, charpos: Integer);
begin
 with WhichEdit do
 begin
 SelStart := Perform(EM_LineIndex, LineNum, 0) + charpos;
 Perform(EM_ScrollCaret, 0, 0);
 end;
end;
Комментарии:
Если Вам не нужно, чтобы происходил скроллинг к позиции каретки, то EM_ScrollCaret можно убрать. Эта процедура так же может быть использована для TMemo, только надо будет заменить объявление witchedit на TMemo:
 procedure CustomMemoSetline(WhichEdit: TCustomMemo; Linepos, charpos: Integer);
Так же эту процедуру можно использовать как ответ на вопрос "Как установить фокус на определённую строку в компоненте Memo ?". Для этого необходимо добавить следующий код после строки selstart:
 sellength := Length(Lines(line));
И установить charpos в 0.
RichEdit должен иметь фокус, иначе em_ScrollCaret не сработает.
Source: Взято из http://forum.sources.ru
ID: 00567
----
// You can move the caret in a TRichEdit component by using this code : 
procedure RichEdit_MoveTo(RichEdit: TRichEdit; LineNumber, CharNumber: Word);
begin
 RichEdit.SelStart := RichEdit.Perform(EM_LINEINDEX, LineNumber, 0) + CharNumber);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 RichEdit_MoveTo(RichEdit1, 2, 5);
 Application.ProcessMessages;
 RichEdit1.SetFocus;
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01016
Установка справки для сторонних компонент под d2005, d2006

=== Установка справки для сторонних компонент под d2005, d2006 ===
Новый формат справки, используемый в d2005, d2006 использует файлы с расширением HXI, HXS и ini. Хуже он или лучше предыдущих реализаций – судить не имеет смысла, он просто есть и им приходится пользоваться. Для установки справки для сторонних компонентов, например DevExpress нужно сделать следующее:
1. Воспользоваться утилитой H2Reg.exe, поставляемой вместе с BDS (../Help/Thirdparty) для каждого ini файла в поставке.
Команда для регистрации будет выглядеть так
 "c:\Program Files\Borland\BDS\4.0\Help\Thirdparty\H2Reg.exe" -r -m "CmdFile=<path>HelpFile.ini" "UserDir1=<path>
2. Перезапустить BDS. (Вещь, в общем-то не обязательная, но желательная)
 
Примечание для DevExpress: перед регистрацией необходимо во всех ini файлах заменить строки типа %IDE_Namespace_Postfix% на bds4 (для D2006).
 
по материалам sql.ru
Author: phanatos
Source: http://forum.vingrad.ru
ID: 00059
Установка уровня прозрачности изображения

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Установка уровня прозрачности изображения
Зависимости: Windows, Graphics, Math
Автор: Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright: Автор Федоровских Николай
Дата: 3 сентября 2002 г.
***************************************************** }
{ Процедура установления уровня прозрачности
 изображения Dest, расположенного над изображением Src.
 Amount - уровень прозрачности в промежутке [0..255].
 Left, Top - левый верхний угол Dest.
 BackColor - цвет, который не нужно изменять,
 если Transparent = True. }
procedure BlendBitmap(Src, Dest: TBitmap; Amount: Byte; Left, Top:
 Integer; BackColor: TColor; Transparent: Boolean);
 { Сравнение двух цветов }
 function CandC(C1, C2: TRGBTriple): Boolean;
 begin
 Result := (C1.rgbtBlue = C2.rgbtBlue) and
 (C1.rgbtGreen = C2.rgbtGreen) and
 (C1.rgbtRed = C2.rgbtRed);
 end;
 
var
 x, y, y1, y2, x1, x2: Integer;
 ps, pd: pRGBTriple;
 rgb: TRGBTriple;
 A1, A2: Double;
begin
 Src.PixelFormat := pf24Bit;
 Dest.PixelFormat := pf24Bit;
 A1 := Amount / 255;
 A2 := 1 - A1;
 { Изменяется только та часть изображения,
 которая расположена над исходным }
 y1 := Max(0, Top);
 x1 := Max(0, Left);
 x2 := Min(Src.Width - 1, Left + Dest.Width - 1);
 y2 := Min(Src.Height - 1, Top + Dest.Height - 1);
 rgb.rgbtRed := Lo(BackColor);
 rgb.rgbtGreen := Lo(BackColor shr 8);
 rgb.rgbtBlue := Lo((BackColor shr 8) shr 8);
 for y := y1 to y2 do
 begin
 ps := Src.ScanLine[y];
 pd := Dest.ScanLine[y - Top];
 Inc(ps, x1);
 if Left < 0 then
 Inc(pd, Abs(Left));
 for x := x1 to x2 do
 begin
 if not (Transparent and CandC(pd^, rgb)) then
 with pd^ do
 begin
 rgbtBlue := Round(A1 * ps^.rgbtBlue + A2 * rgbtBlue);
 rgbtGreen := Round(A1 * ps^.rgbtGreen + A2 * rgbtGreen);
 rgbtRed := Round(A1 * ps^.rgbtRed + A2 * rgbtRed);
 end;
 Inc(pd);
 Inc(ps);
 end;
 end;
end;
Пример использования:
var
 Bmp: TBitmap;
begin
 if not FileExists('C:\Blend.bmp') then
 Exit;
 Bmp := TBitmap.Create;
 try
 Bmp.LoadFromFile('C:\Blend.bmp');
 BlendBitmap(FBitmap, Bmp, 127, 10, 10, clWhite, True);
 Bmp.TransparentColor := clWhite;
 Bmp.Transparent := True;
 FBitmap.Canvas.Draw(10, 10, Bmp);
 finally
 Bmp.Free;
 end;
 Paint;
end;
Author: Fenik
Source: http://delphibase.endimus.com
ID: 03882
Category:Графика
Category:Bitmap
Category:Цвета и палитры
Утечка памяти при поиске файлов

=== Утечка памяти при поиске файлов ===
Не забывайте вызывать SysUtils.FindClose(SearchRec) после каждого вызова FindFirst, так как вызов FindFirst создаёт динамическую структуру SearchRec, которую после поиска надо освобождать.
Author: Vit
ID: 03135
Category:Файловая система
Учимся работать с POP3 по telnetу

Как люди получают почту, другими словами, вы никогда не задумывались, что делает ваш почтовый клиент в интернете, чтобы получить ее? Я попытаюсь удовлетворить ваше любопытство...
Возможно будет несколько незнакомых терминов, но для их понимания советую почитать учебник по семейству протоколов TCP/IP.
Итак, в настройках почтового клиента вы вводите
* smtp_server - сервер для передачи писем, написанных вами
* pop3_server - вот с ним-то мы и поэкспериментируем
* pop3_login - требуются для регистрации на pop3_server'e
* pop3_pass
При отправлении вашей почты клиент создает TCP-соединение с адресом smtp_server порт 25 и грубо говоря пихает в этот порт вашу почту plain-текстом.
Если вы хотите получить свою почту, то почтовый клиент
:a) соединяется с pop3_server на порт 110
:b) выполняет процедуру регистрации и
:c) скачивает письма и последовательно их удаляет.
Все это можно проделать и в ручную, чтобы :
:1) удовлетворить свое любопытство на практике
:2) посмотреть, в чем проблема, если почта не скачивается
:3) читать чужую почту (если знаем pop3-login & pass)
:4) попробовать подобрать пароли на почту
Итак, сидя из Windows95, мы запускаем
 telnet.exe с параметрами: pop3_server 110
Таким образом, мы выполнили функцию a) клиента
Далее, получив приглашение
 +OK sendmail POP3 Server (Version F.U.C.K) ready at <01.01.80>
мы можем вводить команды:
Команда 	(в качестве ответа на них сервер выдает +OK comments)
USER pop3_login	Логин пользователя
PASS pop3_pass 	Пароль пользователя
LIST 	Посмотреть состояние ящика
STAT 	Сколько писем и какой объем
RETR X 	Скачать письмо номер X
TOP X Y 	Посмотреть Y строчек (начиная с тела) X письма. Удобно, если ваш ящик забомбили большими файлами, и вы можете удалить нужное письмо, не скачивая его. В принципе это может делать The Bat! mailer (dispatch mail on server)
DELE X 	Удалить письмо с номером X
QUIT 	Выход
Теперь мы удовлетворили любопытство и переходим к серьезным вещам.
2) если существует проблема с регистрацией, то полные комментарии можно получить в отрицательном ответе сервера ("-ERR"), например
 USER lalal
 -ERR invalid usercode or password
3) Читать чужую почту, по возможности не оставляя следов. Используем ТОЛЬКО команды RETR/TOP после регистрации. Естественно, не надо удалять письма командой DELE!
Останутся ли следы ? В принципе при скачивании почты в письмо добавляется флаг
 Status: RO
Он по умолчанию не виден в почтовом клиенте, но если включить что-то типа show raw message, то пользователь-параноик может понять, в чем дело.
 => Если вы получаете почту с таким флагом, значит кто-то ее уже прочитал.
4) Подбор паролей по POP3
В некоторых ( в большинстве?) демонах возможно неограниченное число попыток регистрации на Pop3 сервере. Само собой, это можно использовать для подбора паролей. Исходники под Unix pop3hack.c можно найти на www.rootshell.com
 Edited on 05/07/1999 23:52:26
 QWERTY.NANKO.RU
ID: 03384
Category:Связь
Физическое удаление записей в локальных таблицах (BDE)

=== Физическое удаление записей в локальных таблицах (BDE) ===
При удалении записей из таблицы dBase с помощью компонента TTable они просто приобретают признак удаления, и я никак не могу добиться их физического удаления. Как быть?
Ваша проблема решается просто - для физического удаления записей нужно использовать функцию DbiPackTable (ее описание есть в справочном файле BDE).
Примечание Vit: точно так же удаляются записи и у таблиц других локальных баз данных
Author: Наталия Елманова
Source: Взято из http://forum.sources.ru
ID: 02595
----
В BDE есть функция DbiPackTable.
Упаковать таблицу DBF можно открыв ее компонентом TTable и вызвав функцию BDE DbiPackTable. Для этого нужно добавить к модулю, где вызывается функция, имена DBITypes, DBIProcs, DBIErrs в оператор uses.
Затем вызвать в нужном месте функцию:
 Result := DbiPackTable(Table1.DbHandle, Table1.Handle, nil, szDBase, True);
Copyright © 1996 Epsylon Technologies
Source: Взято из FAQ Epsylon Technologies (095)-913-5608; (095)-913-2934; (095)-535-5349
ID: 02596
Фильтр посредством логического поля

=== Фильтр посредством логического поля ===
В таблице имеется поле Customer:Boolean. Я хочу чтобы таблица показывала только Customer или только не-customer.
Установите ключ (вы должны иметь индекс для этого поля) одним из указанных способов:
TableX.SetRange([False], [False]) // для всех не-customer...
TableX.SetRange([True], [True]]) // для всех customer...
TableX.SetRange([False], [True]) // для всех записей...
Source: Взято с http://delphiworld.narod.ru
ID: 02558
Фильтрованный поиск в строке

=== Фильтрованный поиск в строке ===
Есть множество задач, где необходимо использование так называемой "дикой карты", то есть поиск в строке по фильтру, когда в качестве поиска используется подстрока с символом "*" (звездочка). Например, если необходимо выяснить наличие подстроки 'St' с какими-либо символами перед ней, то в качестве параметра для поиска задается подстрока вида '*St'. Звездочка может присутствовать как в начале/конце подстроки, так и по обеим ее сторонам. Также при составлении фильтра вместо любого одиночного символа возможна подстановка знака вопроса. 
Пока функция может только сообщать о наличии необходимых вложений, но было бы интересно получить ваши примеры, которые могли бы и возвращать искомую подстроку.
{
Данная функция осуществляет сравнение двух строк. Первая строка
может быть любой, но она не должна содержать символов соответствия (* и ?).
Строка поиска (искомый образ) может содержать абсолютно любые символы.
Для примера: MatchStrings('David Stidolph','*St*') возвратит True.
Автор оригинального C-кода Sean Stanley
Автор портации на Delphi David Stidolph
}
function MatchStrings(source, pattern: string): Boolean;
var
 pSource: array[0..255] of Char;
 pPattern: array[0..255] of Char;
 function MatchPattern(element, pattern: PChar): Boolean;
 function IsPatternWild(pattern: PChar): Boolean;
 var
 t: Integer;
 begin
 Result := StrScan(pattern, '*') <> nil;
 if not Result then
 Result := StrScan(pattern, '?') <> nil;
 end;
 begin
 if 0 = StrComp(pattern, '*') then
 Result := True
 else if (element^ = Chr(0)) and (pattern^ <> Chr(0)) then
 Result := False
 else if element^ = Chr(0) then
 Result := True
 else
 begin
 case pattern^ of
 '*': if MatchPattern(element, @pattern[1]) then
 Result := True
 else
 Result := MatchPattern(@element[1], pattern);
 '?': Result := MatchPattern(@element[1], @pattern[1]);
 else
 if element^ = pattern^ then
 Result := MatchPattern(@element[1], @pattern[1])
 else
 Result := False;
 end;
 end;
 end;
begin
 StrPCopy(pSource, source);
 StrPCopy(pPattern, pattern);
 Result := MatchPattern(pSource, pPattern);
end;
Source: http://delphiworld.narod.ru
ID: 00908
Фокус ячейки TStringGrid

=== Фокус ячейки TStringGrid ===
procedure SetGridFocus(SGrid: TStringGrid; r, c: integer);
var
 SRect: TGridRect;
begin
 with SGrid do
 begin
 SetFocus; { Передаем фокус сетке }
 Row := r; { Устанавливаем Row/Col }
 Col := c;
 SRect.Top := r; { Определяем выбранную область }
 SRect.Left := c;
 SRect.Bottom := r;
 SRect.Right := c;
 Selection := SRect; { Устанавливаем выбор }
 end;
end;
// Для вызова процедуры:
SetGridFocus(StringGrid1, 10, 2);
Это всегда срабатывает в случае, если никакая ячейка не выбрана или фокус имеет другой элемент управления. 
Source: http://delphiworld.narod.ru/
ID: 01108
Форма изменяющая размеры без заголовка

=== Форма изменяющая размеры без заголовка ===
Форма изменяющая размеры без заголовка.
Нужно выставить свойство формы BorderStyle := bsNone;
type
 TForm1 = class(TForm)
 ...
 protected
 procedure CreateParams(var Params: TCreateParams); override;
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
 inherited;
 Params.Style := (Params.Style or WS_THICKFRAME);
end;
Author: feriman
Source: Взято из http://forum.sources.ru
ID: 00442