nyuuzyou/wikis huggingface dataset:
Как убрать HSCROLL у DBGRID?

=== Как убрать HSCROLL у DBGRID? ===
Нужные нам свойства существуют, но вынесены в секцию protected предка DBGrid: TCustomGrid. Наиболее правильным способом было бы создание класса наследника от TDBGrid с выводом ScrollBars в секцию public, но можно обойтись и без этого следующим способом:
type
 TFakeGrid = class(TCustomGrid);
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
 TFakeGrid(DBGrid1).ScrollBars := ssVertical;
end;
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01225
Как убрать всплывающие подсказки в TreeView

=== Как убрать всплывающие подсказки в TreeView ===
{ 
 If you have installed the Internet Explorer 4.0 or high, in TTreeView component 
 always displaying a hint for cutted items. It's useful but sometimes prevents and 
 irritates (at least, me). But there is a simple way to switch off this feature: 
}
procedure TForm1.FormShow(Sender: TObject);
const
 TVS_NOTOOLTIPS = $0080;
begin
 SetWindowLong(Treeview1.Handle, GWL_STYLE,
 GetWindowLong(TreeView1.Handle, GWL_STYLE) xor TVS_NOTOOLTIPS);
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01117
----
TCustomTreeView.WMNotify. О том, что такое тип notify'а TTM_NEEDTEXT прочтешь в хелпе. Убрать хинты можно, перекрыв обработчик для этого уведомительного сообщения. 
Source: http://delphiworld.narod.ru/
ID: 01114
Как убрать заголовок в дочерней форме MDI?

=== Как убрать заголовок в дочерней форме MDI? ===
Если в дочерней форме MDI установить BorderStyle в bsNone, то заголовок формы не исчезнет. (Об этом сказано в хелпе). А вот следующий пример решает эту проблему:
type
 ... = class(TForm)
{ other stuff above }
 procedure CreateParams(var Params: TCreateParams); override;
{ other stuff below }
 end;
 ...
procedure tMdiChildForm.CreateParams(var Params: tCreateParams);
begin
 inherited CreateParams(Params);
 Params.Style := Params.Style and (not WS_CAPTION);
end;
Source: Взято из http://forum.sources.ru
ID: 00483
----
type
 TForm2 = class(TForm)
 { другой код выше }
 procedure CreateParams(var Params: TCreateParams); override;
 { другой код ниже }
 end;
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.Style := Params.Style and not WS_OVERLAPPEDWINDOW or WS_BORDER
end;
Source: Взято с http://delphiworld.narod.ru
ID: 00484
Как убрать публичное свойство компонента

=== Как убрать публичное свойство компонента ===
Из TForm property не убирал, но из TWinControl было дело. А дело было так:
interface
type
 TMyComp = class(TWinControl)
 ...
 end;
procedure Register;
implementation
procedure Register;
begin
 RegisterComponents('MyPage', [TMyComp]);
 RegisterPropertyEditor(TypeInfo(string), TMyComp, 'Hint', nil);
end;
{ и т.д. }
Теперь property 'Hint' в Object Inspector не видно. Рад, если чем-то помог. Если будут глюки, умоляю сообщить. Такой подход у меня сплошь и pядом.
Author: Nomadic
Source: Взято с http://delphiworld.narod.ru
ID: 00352
Как уведомить все приложения, что реестр был изменён?

=== Как уведомить все приложения, что реестр был изменён? ===
Для этого можно послать в систему широковещательное сообщение WM_WININICHANGE, указав в нём, что изменения касаются реестра. Большинство приложений, работа которых связана с реестром, должны реагировать на сообщение WM_WININICHANGE.
Пример:
procedure TForm1.Button1Click(Sender: TObject);
begin
 SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(PChar('RegistrySection')));
end;
Source: Взято из http://forum.sources.ru
ID: 02270
Как удалить/восстановить файлы из корзины?

=== Как удалить/восстановить файлы из корзины? ===
program del;
uses
 ShellApi;
//function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;
var
 T: TSHFileOpStruct;
 P: string;
begin
 P := 'C:\Windows\System\EL_CONTROL.CPL';
 with T do
 begin
 Wnd := 0;
 wFunc := FO_DELETE;
 pFrom := Pchar(P);
 fFlags := FOF_ALLOWUNDO
 end;
 SHFileOperation(T);
end.
Восстановление 
Есть некоторые причуды, и Вы должны помнить о следующем: 
Дайте полный путь для каждого файла. Не доверяйте текущей директории, даже если Вы ее изменили непосредственно перед вызовом функции. Функция WinAPI SHFileOperation не достаточно "умная" для использования текущей директории при отсутствии информации о предыдущей директории (для осуществления функции восстановления). Так, даже если используете флаг FOF_ALLOWUNDO, это не восстановит удаленные файлы из корзины, поскольку функция ничего не знает о предыдущем месторасположении файлов, и, таким образом, не сможет их восстановить файлы из корзины в их оригинальное месторасположение. Она просто удалит файлы из текущей директории. 
Microsoft скорректировала документацию о члене pFrom. Новая редакция сообщает о подробностях работы в пакетном режиме: необходимо разделить имя каждого файла символом NULL (#0) и добавить к концу списка двойной символ NULL. Терминатор из двух символов NULL необходим в любом случае: работаете вы с одним файлом, или же используете пакетный режим. Иногда это работает и без терминатора, но чаще нет. Это связано с тем, что функции при работе с памятью считывает данные из памяти, располагающейся до терминатора, а поскольку длина строки может не совпадать с распределенной памятью, то данные, находящиеся после терминатора, просто не обрабатываются. 
Пример правильного кодирования:
var
 FileList: string;
 FOS: TShFileOpStruct;
begin
 FileList := 'c:\delete.me'#0'c:\windows\temp.$$$'#0#0;
 { если Вы используете имена файлов в строковых переменных: }
 FileList := Filename1 + #0 + Filename2 + #0#0;
 FOS.pFrom := PChar(FileList);
 // бла бла бла
end;
Source: Взято с http://delphiworld.narod.ru
ID: 01747
Как удалить вертикальную полосу прокрутки (скроллбар) из DBGrid?

=== Как удалить вертикальную полосу прокрутки (скроллбар) из DBGrid? ===
Для этого необходимо переопределить метод Paint. Внутри метода Paint Вы должны вызвать API процедуру SetScrollRange для установки минимального и максимального значений скроллирования в ноль (тем самым запретив скроллбар), а затем вызвать inherited. Следующий код, это unit содержащий новый компонент под названием TNoScrollBarDBGrid, который делает это.
type
 TNoScrollBarDBGrid = class(TDBGrid)
 private
 protected
 procedure Paint; override;
 public
 published
 end;
procedure Register;
implementation
procedure Register;
begin
 RegisterComponents('Samples', [TNoScrollBarDBGrid]);
end;
{ TNoScrollBarDBGrid }
procedure TNoScrollBarDBGrid.Paint;
begin
 SetScrollRange(Handle, SB_VERT, 0, 0, false);
 inherited;
end;
Source: Взято из http://forum.sources.ru
ID: 03025
Category:Базы данных
Category:DBGrid
Как удалить все файлы из Recent Documents List?

=== Как удалить все файлы из Recent Documents List? ===
Для этого можно воспользоваться API функцией SHAddToRecentDocs:
procedure TForm1.Button1Click(Sender: TObject);
begin
 SHAddToRecentDocs(SHARD_PATH, 0);
end;
Не забудьте включить ShlObj в Unit
Source: Взято из http://forum.sources.ru
ID: 01661
Как удалить данные из BLOB-поля?

=== Как удалить данные из BLOB-поля? ===
Только с использованием SQL
UPDATE MyTable
SET MyBlobField = Null
WHERE SomeField = 'Somevalue'
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02462
Как удалить иконку с Tray?

=== Как удалить иконку с Tray? ===
Для удаления иконки вы должны знать ее ID и дескриптор окна-обработчика сообщений. Для удаления иконки с Tray надо вызвать функцию Shell_NotifyIcon() с параметром NIM_DELETE и указателем на экземпляр структуры NOTIFYICONDATA, у которого должны быть заполнены следующие поля: cbSize, hWnd, uID.
Source: Взято из FAQ: http://blackman.km.ru/myfaq/cont4.phtml]http://blackman.km.ru/myfaq/cont4.phtml
ID: 01758
Как удалить переносы из строки

=== Как удалить переносы из строки ===
function DeleteLineBreaks(const S: string): string;
var
 Source, SourceEnd: PChar;
begin
 Source := Pointer(S);
 SourceEnd := Source + Length(S);
 while Source < SourceEnd do
 begin
 case Source^ of
 #10: Source^ := #32;
 #13: Source^ := #32;
 end;
 Inc(Source);
 end;
 Result := S;
end;
Source: http://delphiworld.narod.ru/
ID: 00850
----
Можно значительно проще:
function DeleteLineBreaks(const S: string): string;
begin
 Result := StringReplace(S, #10#13, , [rfReplaceAll]);
end;
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
ID: 00851
Как удалить сегодняшнюю дату из TDateTimePicker?

=== Как удалить сегодняшнюю дату из TDateTimePicker? ===
uses
 CommCtrl;
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
var
 wnd: HWND;
 Style: Integer;
begin
 wnd := DateTime_GetMonthCal(DateTimePicker1.Handle);
 if wnd <> 0 then
 begin
 Style := GetWindowLong(wnd, GWL_STYLE);
 SetWindowLong(wnd, GWL_STYLE, Style or MCS_NOTODAY or MCS_NOTODAYCIRCLE);
 end;
end;
{
 The calendar will still highlite the current day but the circle and the
 today display at the bottom are gone.
}
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 01322
Как удалить строку в StringGrid в run-time?

=== Как удалить строку в StringGrid в run-time? ===
Можно сделать наследника от TCustomGrid. А у последнего есть метод - DeleteRow.
Author: Song
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00591
----
Например удаление текущей строки:
type TFakeGrid = class(TCustomGrid);
procedure TForm1.MyDelete(Sender: TObject);
begin
 TFakeGrid(Grid).DeleteRow(Grid.Row);
end;
Примечание от bur80 (Sources.ru):
Предлагаю в разделе VCL -> StringGrid внести корректировочку в статью "Как удалить строку в StringGrid в run-time", что данный метод(!) будет работать только в случае если форма создаётся вот так:
Form1.ShowModal;
а не так:
var
 fr1: TForm1;
begin
 fr1 := Tform1.Create(Application);
 fr1.Show;
end;
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00593
----
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Удаление строки из StringGrid
Удаляет из StringGrid указанную строку, сдвигая остальные.
Зависимости: Grids
Copyright: MBo
Дата: 27 апреля 2002 г.
***************************************************** }
procedure SGDeleteRow(SG: TStringGrid; RowToDelete: Integer);
var
 i: Integer;
begin
 with SG do
 begin
 if (RowToDelete >= 0) and (RowToDelete < RowCount) then
 begin
 for i := RowToDelete to RowCount - 2 do
 Rows[i].Assign(Rows[i + 1]);
 RowCount := RowCount - 1;
 end;
 end;
end;
Source: http://delphibase.endimus.com
ID: 01049
----
procedure GridDeleteRow(RowNumber: Integer; Grid: TstringGrid);
var
 i: Integer;
begin
 Grid.Row := RowNumber;
 if (Grid.Row = Grid.RowCount - 1) then
 { On the last row}
 Grid.RowCount := Grid.RowCount - 1
 else
 begin
 { Not the last row}
 for i := RowNumber to Grid.RowCount - 1 do
 Grid.Rows[i] := Grid.Rows[i + 1];
 Grid.RowCount := Grid.RowCount - 1;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 GridDeleteRow(3, stringGrid1);
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01050
Как удалить файл из самого себя?

=== Как удалить файл из самого себя? ===
Очевидно что под Win32 удаление работающего кода невозможно. На время выполнения он просто добавляется к swap файлу - т.е. винды при нехватки памяти данные программы (массив переменных) сбрасывают в Swap (Page) файл, а сам код программы просто уничтожается из памяти, при возобновлении процесса, недостающие куски кода опять считываются из исходного файла. Понятно, что изменение файла пока его код выполняется будет иметь катастрофичные последствия, поэтому винды при запуске программы считают DLL или EXE файл по сути куском файла подкачки и запрещают любые манипуляции над ним. Кстати именно по этой причине все инсталляторы начинают свою работу с операции "Preparing to install", которая делает очень простую вещь - сам инсталлятор копируется во временную папку и перезапускает себя уже с винта, чтоб предотвратить крах системы при смене дискетты или CD. По этой же причине программы упакованные любыми EXE упаковщиками требуют больше памяти для запуска - так как загружается в память и исходный компрессированный код и декомпрессированный поток...
Но несмотря на все сказанное можно удалить файл из "самого себя" при помощи маленькой хитрости: мы создаем и запускаем BAT файл - который и удалит программу, а саму программу закрываем, как только система "отпустит" файл - файл будет удален и затем BAT файл удалит самого себя. Пользователь всего этого не заметит - он увидит, что после завершении работы файла программы уже нет.
uses ShellApi;
procedure TForm1.FormDestroy(Sender: TObject);
var
 f: TextFile;
 FileName: string;
begin
 FileName := ChangeFileExt(ParamStr(0), '.bat');
 AssignFile(f, FileName);
 Rewrite(f);
 WriteLn(f, ':1');
 WriteLn(f, Format('Erase "%s"', [ParamStr(0)]));
 WriteLn(f, Format('If exist "%s" Goto 1', [ParamStr(0)]));
 WriteLn(f, Format('Erase "%s"', [FileName]));
 CloseFile(f);
 ShellExecute(Handle, 'Open', PChar(FileName), nil, nil, sw_hide);
end;
Author: Vit
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 03172
Category:Файловая система
Как удалить файл после перезагрузки Windows?

=== Как удалить файл после перезагрузки Windows? ===
Я использую функцию, которая заносит в ключ реестра RunOnce командную строку:
 command.com /c del C:\Путь\Имя_файла
В wininit добавляешь строку
 NUL={ПУТЬ УДАЛЯЕМОГО ФАЙЛА}
Author: inko
Author: VoL
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 03170
----
Еще есть способ через реестр:
uses Registry;
procedure DeleteFileOnRestart(const FileName: String);
var
 Reg: TRegistry;
begin
 Reg := TRegistry.Create;
 Reg.RootKey := HKEY_LOCAL_MACHINE;
 Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunOnce', False);
 Reg.WriteString('Selfdel9x', 'command.com /C del "' + FileName + '"');
 Reg.WriteString('SelfdelNT', 'cmd /C del "' + FileName + '"');
 Reg.CloseKey;
 Reg.Free;
end;
Тут две команды добавляются, т.к. на XP с command.com не рабоает...
Одна из них сработает, а другая пройдет в холостую...
Author: p0s0l
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 03171
Category:Файловая система
Как удобнее работать с буфером обмена как последовательностью байт?

=== Как удобнее работать с буфером обмена как последовательностью байт? ===
unit ClipStrm;
{
 This unit is Copyright (c) Alexey Mahotkin 1997-1998
 and may be used freely for any purpose. Please mail
 your comments to
 E-Mail: alexm@hsys.msk.ru
 FidoNet: Alexey Mahotkin, 2:5020/433
 This unit was developed during incorporating of TP Lex/Yacc
 into my project. Please visit ftp://ftp.nf.ru/pub/alexm
 or FREQ FILES from 2:5020/433 or mail me to get hacked
 version of TP Lex/Yacc which works under Delphi 2.0+.
}
interface
uses Classes, Windows;
type
 TClipboardStream = class(TStream)
 private
 FMemory: Pointer;
 FSize: LongInt;
 FPosition: LongInt;
 FFormat: Word;
 public
 constructor Create(fmt: Word);
 destructor Destroy; override;
 function Read(var Buffer; Count: LongInt): LongInt; override;
 function Write(const Buffer; Count: LongInt): LongInt; override;
 function Seek(Offset: LongInt; Origin: Word): LongInt; override;
 end;
implementation
uses SysUtils;
constructor TClipboardStream.Create(fmt: Word);
var
 tmp: Pointer;
 FHandle: THandle;
begin
 FFormat := fmt;
 OpenClipboard(0);
 FHandle := GetClipboardData(FFormat);
 FSize := GlobalSize(FHandle);
 FMemory := AllocMem(FSize);
 tmp := GlobalLock(FHandle);
 MoveMemory(FMemory, tmp, FSize);
 GlobalUnlock(FHandle);
 FPosition := 0;
 CloseClipboard;
end;
destructor TClipboardStream.Destroy;
begin
 FreeMem(FMemory);
end;
function TClipboardStream.Read(var Buffer; Count: LongInt): LongInt;
begin
 if FPosition + Count > FSize then
 Result := FSize - FPosition
 else
 Result := Count;
 MoveMemory(@Buffer, PChar(FMemory) + FPosition, Result);
 Inc(FPosition, Result);
end;
function TClipboardStream.Write(const Buffer; Count: LongInt): LongInt;
var
 FHandle: HGlobal;
 tmp: Pointer;
begin
 ReallocMem(FMemory, FPosition + Count);
 MoveMemory(PChar(FMemory) + FPosition, @Buffer, Count);
 FPosition := FPosition + Count;
 FSize := FPosition;
 FHandle := GlobalAlloc(GMEM_MOVEABLE or GMEM_SHARE or GMEM_ZEROINIT, FSize);
 try
 tmp := GlobalLock(FHandle);
 try
 MoveMemory(tmp, FMemory, FSize);
 OpenClipboard(0);
 SetClipboardData(FFormat, FHandle);
 finally
 GlobalUnlock(FHandle);
 end;
 CloseClipboard;
 except
 GlobalFree(FHandle);
 end;
 Result := Count;
end;
function TClipboardStream.Seek(Offset: LongInt; Origin: Word): LongInt;
begin
 case Origin of
 0: FPosition := Offset;
 1: Inc(FPosition, Offset);
 2: FPosition := FSize + Offset;
 end;
 Result := FPosition;
end;
end.
 Alexey Mahotkin alexm@hsys.msk.ru (2:5020/433)
 olmal@mail.ru
 http://www.chat.ru/~olmal
Source: Взято из FAQ: Delphi and Windows API Tips'n'Tricks
ID: 01874
Как узнать, была ли перемещена форма?

=== Как узнать, была ли перемещена форма? ===
type
 TfrmMain = class(TForm)
 private
 procedure OnMove(var Msg: TWMMove); message WM_MOVE;
 end;
implementation
procedure TfrmMain.OnMove(var Msg: TWMMove);
begin
 inherited;
 (...)
end;
Source: Взято из http://forum.sources.ru
ID: 00506
Как узнать, доступен ли в сети сервер MS SQL?

=== Как узнать, доступен ли в сети сервер MS SQL? ===
Здесь представлена функция, выполняющая проверку доступности MS SQL сервера.
function CheckMSSQLServer(AServerName, AUserName, APsw: string): Bool;
var
 wDb: TDatabase;
begin // Check if MS SQL Server is reachable
 // Важно! BDE Должна быть установлена
 Result := False;
 wDb := TDatabase.Create(nil);
 with wDb do
 begin
 DatabaseName := 'wDbDatabaseName'; // arbitrary name, must be unique
 // in current Session
 Params.Values['SERVER Name'] := AServerName;
 Params.Values['USER Name'] := AUserName;
 Params.Values['PASSWORD'] := APsw;
 LoginPrompt := False;
 end;
 try
 wDb.DriverName := 'MSSQL';
 try
 wDb.Connected := True;
 wDb.Connected := False;
 except
 ShowMessage('Server is not reachable');
 end;
 Result := True;
 finally
 wDb.Free;
 end;
end;
Source: Взято из http://forum.sources.ru
ID: 02777
Category:Базы данных
Category:MS SQL Server
Как узнать, есть ли в приёмном буфере RS232 данные?

=== Как узнать, есть ли в приёмном буфере RS232 данные? ===
При помощи функции ClearCommError можно узнать, сколько байт данных находится в буфере приёма (и буфере передачи) последовательного интерфейса.
procedure DataInBuffer(Handle: THandle; var InQueue, OutQueue: integer); 
var
 ComStat: TComStat; 
 e: integer; 
begin 
 if ClearCommError(Handle, e, @ComStat) then 
 begin 
 InQueue := ComStat.cbInQue; 
 OutQueue := ComStat.cbOutQue; 
 end 
 else 
 begin 
 InQueue := 0; 
 OutQueue := 0; 
 end; 
end; 
Source: Взято из http://forum.sources.ru
ID: 01344
Как узнать, находится ли дискета в дисководе?

=== Как узнать, находится ли дискета в дисководе? ===
type
 TDriveState(DS_NO_DISK, DS_UNFORMATTED_DISK, DS_EMPTY_DISK,
 DS_DISK_WITH_FILES);
function DriveState(driveletter: Char): TDriveState;
var
 mask: string[6];
 sRec: TSearchRec;
 oldMode: Cardinal;
 retcode: Integer;
begin
 oldMode: = SetErrorMode(SEM_FAILCRITICALERRORS);
 mask := '?:\*.*';
 mask[1] := driveletter;
{$I-} { не возбуждаем исключение при неудаче }
 retcode := FindFirst(mask, faAnyfile, SRec);
 FindClose(SRec);
{$I+}
 case retcode of
 0: Result := DS_DISK_WITH_FILES; { обнаружен по крайней мере один файл }
 -18: Result := DS_EMPTY_DISK; { никаких файлов не обнаружено, но ok }
 -21: Result := DS_NO_DISK; { DOS ERROR_NOT_READY }
 else
 Result := DS_UNFORMATTED_DISK; { в моей системе значение равно -1785!}
 end;
 SetErrorMode(oldMode);
end; { DriveState }
Я тестировал код под Win NT 3.5, так что проверьте его на ошибки в ситуациях, когда дискета отсутствует или неотформатирована под Win 3.1 и WfW 3.11, если, конечно, это необходимо. 
Ревизия для Win95:
case RetCode of
 0: Result := DS_DISK_WITH_FILES;
 -18: Result := DS_EMPTY_DISK;
 else
 Result := DS_NO_DISK;
end;
Source: Взято с http://delphiworld.narod.ru
ID: 01376
----
function DiskInDrive(const Drive: char): Boolean;
var
 DrvNum: byte;
 EMode: Word;
begin
 result := false;
 DrvNum := ord(Drive);
 if DrvNum >= ord('a') then
 dec(DrvNum, $20);
 EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
 try
 if DiskSize(DrvNum - $40) <> -1 then
 result := true
 else
 messagebeep(0);
 finally
 SetErrorMode(EMode);
 end;
end;
...можно для пущей функциональности добавить ряд строк:
function DiskInDrive(const Drive: char): Boolean;
var
 DrvNum: byte;
 EMode: Word;
begin
 result := true; // было false
 DrvNum := ord(Drive);
 if DrvNum >= ord('a') then
 dec(DrvNum, $20);
 EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
 try
 while DiskSize(DrvNum - $40) = -1 do
 begin // при неудаче выводим диалог
 if (Application.MessageBox('Диск не готов...' + chr(13) + chr(10) +
 'Повторить?', PChar('Диск ' + UpperCase(Drive)), mb_OKCANCEL +
 mb_iconexclamation {IconQuestion}) = idcancel) then
 begin
 Result := false;
 Break;
 end;
 end;
 finally
 SetErrorMode(EMode);
 end;
end;
Author: Галимарзанов Фанис 
Source: Взято с http://delphiworld.narod.ru
ID: 01377
Как узнать, находится ли мышка на форме?

=== Как узнать, находится ли мышка на форме? ===
Для этого можно воспользоваться API функцией GetCapture().
procedure TForm1.FormDeactivate(Sender: TObject);
begin
 ReleaseCapture;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if GetCapture = 0 then
 SetCapture(Form1.Handle);
 if PtInRect(Rect(Form1.Left,
 Form1.Top,
 Form1.Left + Form1.Width,
 Form1.Top + Form1.Height),
 ClientToScreen(Point(x, y))) then
 Form1.Caption := 'Мышка на форме'
 else
 Form1.Caption := 'Мышка за пределами формы';
end;
Source: Взято из http://forum.sources.ru
ID: 00415
ID: 01573