nyuuzyou/wikis huggingface dataset:
Определить взаиморасположение точки и прямой

{ Расчет нормали от точки до линии и расстояния от начала и до конца линии
 key = 0: расстояние от точки до прямой; <0 - точка слева; >0 - точка справа
 key = 1: расстояние от точки до начала линии
 key = 2: проекция точки на направление прямой попадает на нее если Result=0
 key = 3: расстояние от точки до конца линии
}
// Distance From Point To Line
function Dfptl(key: Byte; x, y, xn, yn, xk, yk: Real): Real;
const
 r0 = 2 * pi;
 r1 = pi;
 r2 = pi / 2;
 r3 = 3 * pi / 4;
 r4 = 1e-4;
var
 a, dx, dy: Double;
begin
 dx := xk - xn;
 dy := yk - yn;
 if abs(dx) < r4 then
 begin
 if dy > 0 then
 a := r2
 else
 a := -r2;
 end
 else
 a := arctan2(dy, dx);
 case key of
 0: // расстояние от точки до прямой; <0 - точка слева; >0 - точка справа
 Result := (xn-x) * Sin(a) - (yn-y) * Cos(a);
 1: // расстояние от точки до начала линии
 Result := (x-xn) * Cos(a) + (y-yn) * Sin(a);
 2: // проекция точки на направление прямой попадает на нее если Result=0
 Result := (sqrt(sqr(dx)+sqr(dy)) - Abs((xn-x) * Cos(a) + (yn-y) * Sin(a)) - Abs((xk-x) * Cos(a) + (yk-y) * Sin(a)));
 3: // расстояние от точки до конца линии
 Result := (x-xk) * Cos(a) + (y-yk) * Sin(a);
 else
 Result := 1e30;
 end;
 if isZero(Result, r4) then
 Result := 0;
end;
Author: Digar 
Source: http://forum.sources.ru
ID: 04122
Category:Алгоритмы
Category:Графика
Category:Геометрия
Определить количество кнопок мышки

=== Определить количество кнопок мышки ===
// if the result is 0, no mouse is present 
function GetNumberOfMouseButtons: Integer;
begin
 Result := GetSysTemMetrics(SM_CMOUSEBUTTONS);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage('Your mouse has ' + IntToStr(GetNumberOfMouseButtons) + ' buttons.');
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01564
Определить нажатие на CheckBoxe TListView

=== Определить нажатие на CheckBoxe TListView ===
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
 Item: TListItem;
 HitTest: THitTests;
begin
 // Welchem Item gehцrt die CheckBox 
 // Which item belongs to the checkbox 
 Item := ListView1.GetItemAt(x, y);
 // Was wurde vom Item genau angeklickt 
 // What kind of thing was hit on the item 
 HitTest := ListView1.GetHitTestInfoAt(x, y);
 // Falls ein Item angeklickt wurde und davon die Checkbox 
 // If an Item was hit and exactly his checkbox 
 if (Item <> nil) and (HitTest = [htOnStateIcon]) then
 begin
 //////////////////////////////// 
 // Hier das OnCheck behandeln // 
 // Handle OnCheck here // 
 //////////////////////////////// 
 // Beispiel 
 // Example 
 // 
 // if Item.Checked = False then 
 // begin 
 // if (Item.Index = 0) or (ListView1.Items.Item[Item.Index - 1].Checked = True) then 
 // Item.Checked := True else Item.Checked := False; 
 // end else 
 // begin 
 // if (Item.Index = ListView1.Items.Count - 1) or (ListView1.Items.Item[Item.Index + 1].Checked = False) then Item.Checked := False else 
 // Item.Checked := True; 
 // end; 
 end;
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01135
Определить размера рабочей области Desktop'а

=== Определить размера рабочей области Desktop'а ===
Иногда важно знать, какую часть экрана можно занимать, не перекрывая тем самым такие окна, как TaskBar. Эта программа разворачивает окно на всю рабочую область Desktop'а. 
procedure TForm1.Button1Click(Sender: TObject);
var
 r: TRect;
begin
 SystemParametersInfo(SPI_GETWORKAREA, 0, Addr(r), 0);
 Form1.Left := r.Left;
 Form1.Top := r.Top;
 Form1.Width := r.Right - r.Left;
 Form1.Height := r.Bottom - r.Top;
end;
 e-mail: delphi4all@narod.ru
 e-mail: aleksey@sch103.krasnoyarsk.su
Author: Алексей Денисов
ID: 01829
----
Воспользуйтесь функцией SystemParametersInfo(), переслав ей в качестве параметров - SPI_GETWORKAREA и адрес структуры типа TRect, куда будут передан полученный результат: 
procedure TForm1.Button1Click(Sender: TObject);
var
 r: TRect;
begin
 SystemParametersInfo(SPI_GETWORKAREA, 0, @r, 0);
 Memo1.Lines.Add(IntToStr(r.Top));
 Memo1.Lines.Add(IntToStr(r.Left));
 Memo1.Lines.Add(IntToStr(r.Bottom));
 Memo1.Lines.Add(IntToStr(r.Right));
end; 
Source: http://delphiworld.narod.ru/
ID: 01830
----
=== Получение координат области Рабочего стола, не скрытой Панелью задач ===
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение координат области Рабочего стола, не скрытой Панелью задач
Зависимости: Windows
Copyright: Dimka Maslov
Дата: 4 ноября 2002 г.
***************************************************** }
function GetDesktopRect: TRect;
var
 RgnDesktop, RgnTrayWnd: HRGN;
 function CreateWindowRgn(Handle: HWND): HRGN;
 var
 R: TRect;
 begin
 GetWindowRect(Handle, R);
 with R do
 Result := CreateRectRgn(Left, Top, Right, Bottom);
 end;
begin
 RgnDesktop := CreateWindowRgn(GetDesktopWindow);
 try
 RgnTrayWnd := CreateWindowRgn(FindWindow('Shell_TrayWnd', ));
 try
 CombineRgn(RgnDesktop, RgnDesktop, RgnTrayWnd, RGN_DIFF);
 GetRgnBox(RgnDesktop, Result);
 finally
 DeleteObject(RgnTrayWnd);
 end;
 finally
 DeleteObject(RgnDesktop);
 end;
end;
Source: http://delphibase.endimus.com
ID: 01831
Определить сейчас до или после полудня

=== Определить сейчас до или после полудня ===
procedure AM_or_PM;
begin
 if Frac(Time) = 0 then
 ShowMessage('AM')
 else
 ShowMessage('PM');
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01648
Определить формат изображения, загруженного в TMemoryStream

type
 TImageType = (NoImage, Bmp, Gif, Gif89, Png, Jpg);
function KindOfImage(Start: Pointer): TImageType;
type
 ByteArray = array[0..10] of Byte;
var
 PB: ^ByteArray absolute Start;
 PW: ^Word absolute Start;
 PL: ^DWord absolute Start;
begin
if PL^ = $38464947 then
 begin
 if PB^[4] = Ord('9') then
 Result := TImageType.Gif89
 else
 Result := TImageType.Gif;
 end
 else if PW^ = $4D42 then
 Result := TImageType.Bmp
 else if PL^ = $474E5089 then
 Result := TImageType.Png
 else if PW^ = $D8FF then
 Result := TImageType.Jpg
 else
 Result := TImageType.NoImage;
end;
Пользоваться можно так:
 case KindOfImage(MemoryStream.Memory) of
 ...
Для тех, кого смущает absolute:
type
 TImageType = (NoImage, Bmp, Gif, Gif89, Png, Jpg);
function KindOfImage(Start: Pointer): TImageType;
begin
 if LongWord(Start^) = $38464947 then
 begin
 if (PChar(Start) + 4)^ = '9' then
 Result := TImageType.Gif89
 else
 Result := TImageType.Gif;
 end
 else if Word(Start^) = $4D42 then
 Result := TImageType.Bmp
 else if LongWord(Start^) = $474E5089 then
 Result := TImageType.Png
 else if Word(Start^) = $D8FF then
 Result := TImageType.Jpg
 else
 Result := TImageType.NoImage;
end;
Author: s-mike 
Source: http://forum.sources.ru
ID: 03631
ID: 03633
Category:Графика
Оптимизация программы для работы в фоновом режиме

Я пишу программу в Delphi, которая каждый час должна проверять размер файла. Это также предполагает, что в случае неактивности приложения оно должно работать сторожевым псом в фоновом режиме Win 95 и NT. Как мне сделать это...??
Вот некоторый исходный код, который должен делать то, что вы хотите. Я его только что создал и еще не успел проверить, но что-то подобное я уже делал, так что это должно работать. Код допускает одно предположение, о котором вы должны отдавать себе отчет. Оно заключается в том, что приложение должно запускаться одновременно с Windows (может быть из группы автозапуска), так как код использует GetTickCount(), возвращающий в миллисекундах время с момента старта системы, это необходимо для ежечасной инициализации кода выполнения задачи. По-моему это то, что вам нужно. Величина, возвращаемая GetTickCount() имеет тип DWORD, но Delphi ее хранит как LongInt, поэтому большие значения могут иметь отрицательную величину (после примерно 25 дней). Данный эффект в алгоритм е проверки наступления часа неопределен (я действительно не считал это). Аналогично, значение будет повторяться в цикле каждые 49.7 дней и может появиться другой эффект, когда раз в 49.7 дней в одном реальном часе алгоритм сработает дважды. Надеюсь это ни как не скажется на вашей задаче. Во всяком случае разве это не то, что вы хотели? Успехов!
program Project1;
uses Messages, Windows;
{$R *.RES}
function KeepRunning: Boolean;
var
 Msg: TMsg;
begin
 Result := True;
 while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
 begin
 if (Msg.Message = WM_QUIT) then
 Result := False;
 DispatchMessage(Msg);
 end;
end;
function OnTheHour: Boolean;
begin
 { Это действительно проверяется в течение одной секунды }
 { (или меньше) для проверки наступления нового часа, }
 { когда нам необходимо запустить нашу задачу на выполнение }
 Result := (GetTickCount mod
 (1 {hr} * 60 {min} * 60 {sec} * 1000 {msec}) < 1000);
end;
const
 FILE_TO_CHECK = 'c:\somedir\somefile.ext';
 MAGIC_SIZE = 1000000;
var
 f: file;
 size: longint;
begin
 { проверка наступления нового часа с момента запуска системы }
 while KeepRunning do
 begin
 { проверяем наступление часа }
 if OnTheHour then
 begin
 { открываем файл с размером записи 1 байт }
 { и проверяем его размер }
 AssignFile(f, FILE_TO_CHECK);
 Reset(f, 1);
 size := FileSize(f);
 CloseFile(f);
 { теперь проверяем изменение размера файла }
 if (size >= MAGIC_SIZE) then
 begin
 { Предпринимаем какие-то действия }
 end;
 { Теперь "сидим" в этом участке кода }
 { и ожидаем очередного часа, здесь можно }
 { предусмотреть выход из программы или иное действие }
 while (KeepRunning and OnTheHour) do
 { ничего };
 end;
 end;
end.
Source: http://delphiworld.narod.ru
ID: 04530
Category:Разработка приложений
Category:Оптимизация и отладка
Основное отличие EXE-файлов созданных Delphi и Visual Basic

=== Основное отличие EXE-файлов созданных Delphi и Visual Basic ===
Существует два важных различия между файлами EXE, созданными в Delphi, и файлами EXE, созданными VB. Delphi создает чисто машинный код, непосредственно исполняемый компьютером, в то время как VB транслирует исходный код в промежуточную форму (р-код). Файл EXE, сгенерированный VB, в действительности является программой-интерпретатором р-кода с добавленным в конце р-кодом программы пользователя.
"Библиотека времени выполнения" (run-time library) стандартных функций для всех программ VB хранится в файле VBRUN300.DLL. Каждая программа VB, попавшая к конечному пользователю, должна включать этот файл, либо приходится расчитывать, что такой файл у пользователя уже есть. Дистрибутивный комплект программы должен также содержать файлы VBX для каждого управляющего средства VB, не включенного в VBRUN300.DLL.
Программы Delphi включают необходимую часть библиотеки времени выполнения Delphi, а также используемые компоненты. В результате EXE-файл Delphi обычно больше по объему, чем эквивалентный EXE-файл VB, но он не зависит ни от каких внешних файлов.
Source: http://dmitry9.nm.ru/info/
ID: 00300
Особенности работы события onActivate

=== Особенности работы события onActivate ===
Наверное многие заметили, что событие onActivate формы ведет себя по странному, иногда происходит его активация просто при приобретении формой фокуса, а иногда событие происходит только в случае, когда форма становится видимой?
Виной тому виндовые API. Помните начиная с 98 виндов возникла фича - когда активация окна приводит к мельканию заголовка в таскбаре. Под win95/NT4 событие формы onActivate происходит только в момент показа формы (Show, ShowModal), а в остальных осях может возникать и просто при попадании фокуса на форму (уж не знаю почему, но не всегда). Есть хороший способ избавиться от такого поведения и заставить это событие возникать только 1 раз при активации формы и в дальнейшем только тогда когда это нужно.
procedure TForm1.Form1OnActivate(Sender: TObject);
begin
 OnActivate := nil;
 { здесь ваш код обработки события }
end;
Чтоб подготовить обработку события если она ожидается надо вновь присвоить событию процедуру обработки
 OnActivate := Form1OnActivate;
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02143
Отключить команду Завершение работы

=== Отключить команду Завершение работы ===
uses
 Registry;
procedure TForm1.Button1Click(Sender: TObject);
begin
 with TRegistry.Create do
 begin
 RootKey := HKEY_CURRENT_USER;
 OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', True);
 WriteInteger('NoClose', 1);
 CloseKey;
 Free;
 end;
end;
Source: http://delphiworld.narod.ru/
ID: 01679
Отключить реакцию на события мыши

=== Отключить реакцию на события мыши ===
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
 Handled := (msg.wParam = vk_lButton)
 or (msg.wParam = vk_rButton)
 or (msg.wParam = vk_mButton);
end;
Source: http://delphiworld.narod.ru
ID: 01594
Открытие MDI-окон определенного размера

=== Открытие MDI-окон определенного размера ===
var
 ProjectWindow: TWndProject;
begin
 if ProjectActive = False then 
 begin
 LockWindowUpdate(ClientHandle);
 ProjectWindow := TWndProject.Create(self);
 ProjectWindow.Left := 10;
 ProjectWindow.Top := 10;
 ProjectWindow.Width := 373;
 ProjecTwindow.Height := 222;
 ProjectWindow.Show;
 LockWindowUpdate(0);
 end;
end;
Используйте LockWindowUpdate перед созданием окна и после того, как создание будет завершено. 
Source: Взято с http://delphiworld.narod.ru
ID: 00493
Открытие сокращённого или полного диалога выбора цвета

=== Открытие сокращённого или полного диалога выбора цвета ===
{ **** UBPFD *********** by kladovka.net.ru ****
>> Открытие сокращённого или полного диалога выбора цвета
Вид диалога зависит от того, можно ли показать начальный цвет (C : TColor) 
в сокращённом диалоге или нужно раскрывать его полностью. 
Возвращает выбранный пользователем цвет.
Зависимости: Windows, Messages, SysUtils, Classes, DIALOGS;
Copyright: Igor Kovalevsky
Дата: 1 июня 2002 г.
********************************************** }
function SelectColor(C : TColor) : TColor;
const
 BasicColors = [$00, $40, $80, $A0, $C0, $FF];
begin
 with TColorDialog.Create(Application) do
 begin
 Color := C;
 if (GetRValue(Color) in BasicColors)
 and (GetGValue(Color) in BasicColors)
 and (GetBValue(Color) in BasicColors) then
 begin
 Options := Options - [cdFullOpen];
 end
 else
 begin
 Options := Options + [cdFullOpen];
 end;
 if Execute then
 begin
 Result := Color
 end
 else
 begin
 Result := clNone;
 end;
 Free;
 end;
end; 
Пример использования:
Form1.Color := SelectColor(Form1.Color); 
ID: 01222
Открыть файл JPEG

В комплект поставки Delphi входит модуль JPEG. Он позволяет работать с изображениями в формате JPEG. Эта программа открывает выбранный файл и выводит изображение на форму.
uses Jpeg;
procedure TForm1.Button1Click(Sender: TObject);
var
 JpegIm: TJpegImage;
 bm: TBitMap;
begin
 if OpenDialog1.Execute = false then Exit;
 bm := TBitMap.Create;
 JpegIm := TJpegImage.Create;
 JpegIm.LoadFromFile(OpenDialog1.FileName);
 bm.Assign(JpegIm);
 Form1.Canvas.Draw(0, 0, bm);
 bm.Destroy;
 JpegIm.Destroy;
end;
Author: Даниил Карапетян
Author: Алексей Денисов
ID: 03791
Category:Графика
Category:Jpeg
Отладка экспертов

=== Отладка экспертов ===
Debug Delphi 3 experts with Delphi 3
Delphi 3 has a new feature "debug DLLs". It can be used to debug experts with the internal debugger. Just follow these simple steps, and debugging an expert can be fun:
Make sure that the expert is not installed. If there is this entry
 \CURRENT_USER\software\Delphi\3.0\experts,
 myexpert=\projects\myexpert\expert.dll
rename this entry to "expert.xxx". (don't delete it, you'll need it later).
Otherwise, you cannot compile a new version.
Run Delphi, open your expert's project as used, compile it and set the break points you think you need.
Go to the menu item run | parameters. This is the new Delphi 3 feature mentioned above.
Surprise: the host application is Delphi itself! So, next to the field "host app", enter something like e:\Programs\delphi3\bin\delphi32.exe (with path)
Second trick: now we install the expert... If you have "expert.xxx" installed, rename that to "expert.dll". This will be used by any Delphi instance started from now on.
Run "your application" (= Delphi 3) using menu item run | run.
If you have enough RAM, Delphi is loaded and this instance will have your expert installed.
Activate the expert, you'll have the possibility to use the comfort of the first instance's internal debugger.
Close the right instance of Delphi - and you can modify/recompile etc. your expert. 
Source: http://www.delphifaq.com
ID: 00030
Отмена вставки нового узла в TreeView по нажатию кнопки Esc

=== Отмена вставки нового узла в TreeView по нажатию кнопки Esc ===
unit BetterTreeView;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ComCtrls, CommCtrl;
type
 TTVNewEditCancelEvent = procedure(Sender: TObject; Node: TTreeNode; var Delete: Boolean) of object;
 TBetterTreeView = class(TTreeView)
 protected
 FIsEditingNew: Boolean;
 FOnEditCancel: TTVChangedEvent;
 FOnNewEditCancel: TTVNewEditCancelEvent;
 procedure Edit(const Item: TTVItem); override;
 public
 function NewChildAndEdit(Node: TTreeNode; const S: String): TTreeNode;
 published
 property IsEditingNew: Boolean read FIsEditingNew;
 property OnEditCancel: TTVChangedEvent read FOnEditCancel write FOnEditCancel;
 property OnNewEditCancel: TTVNewEditCancelEvent read FOnNewEditCancel write FOnNewEditCancel;
 end;
implementation
procedure TBetterTreeView.Edit(const Item: TTVItem);
var
 Node: TTreeNode;
 Action: Boolean;
begin
 with Item do
 begin
 { Get the node }
 if (state and TVIF_PARAM) <> 0 then
 Node := Pointer(lParam)
 else
 Node := Items.GetNode(hItem);
 if pszText = nil then
 begin
 if FIsEditingNew then
 begin
 Action := True;
 if Assigned(FOnNewEditCancel) then
 FOnNewEditCancel(Self, Node, Action);
 if Action then
 Node.Destroy
 end
 else
 if Assigned(FOnEditCancel) then
 FOnEditCancel(Self, Node);
 end
 else
 fFinherited;
 end;
 FIsEditingNew := False;
end;
function TBetterTreeView.NewChildAndEdit(Node: TTreeNode; const S: String): TTreeNode;
begin
 SetFocus;
 Result := Items.AddChild(Node, S);
 FIsEditingNew := True;
 Node.Expand(False);
 Result.EditText;
 SetFocus;
end;
end.
ID: 00641
Отображать элементы TListView как группу XP

=== Отображать элементы TListView как группу XP ===
// declarations from commctrl.h
type
 TLVGROUP = record
 cbSize: UINT;
 mask: UINT;
 pszHeader: LPWSTR;
 cchHeader: Integer;
 pszFooter: LPWSTR;
 cchFooter: Integer;
 iGroupIdL: Integer;
 stateMask: UINT;
 state: UINT;
 uAlign: UINT;
 end;
 tagLVITEMA = packed record
 mask: UINT;
 iItem: Integer;
 iSubItem: Integer;
 state: UINT;
 stateMask: UINT;
 pszText: PAnsiChar;
 cchTextMax: Integer;
 iImage: Integer;
 lParam: lParam;
 iIndent: Integer;
 iGroupId: Integer;
 cColumns: UINT;
 puColumns: PUINT;
 end;
 TLVITEMA = tagLVITEMA;
const
 LVM_ENABLEGROUPVIEW = LVM_FIRST + 157;
 LVM_MOVEITEMTOGROUP = LVM_FIRST + 154;
 LVM_INSERTGROUP = LVM_FIRST + 145;
 LVIF_GROUPID = $0100;
 LVGF_HEADER = $00000001;
 LVGF_ALIGN = $00000008;
 LVGF_GROUPID = $00000010;
 LVGA_HEADER_LEFT = $00000001;
 LVGA_HEADER_CENTER = $00000002;
 LVGA_HEADER_RIGHT = $00000004;
procedure TForm1.Button1Click(Sender: TObject);
var
 LvGroup: TLVGROUP;
 LvItemA: TLVITEMA;
 ListItem: TListItem;
 I: Byte;
begin
 // Fill listview with random data
 Randomize;
 for i := 1 to 10 do
 begin
 ListItem := ListView1.Items.Add;
 ListItem.Caption := IntToStr(Random(100));
 end;
 SendMessage(ListView1.Handle, LVM_ENABLEGROUPVIEW, 1, 0);
 // Create Group1
 FillChar(LvGroup, SizeOf(TLVGROUP), 0);
 with LvGroup do
 begin
 cbSize := SizeOf(TLVGROUP);
 mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID;
 pszHeader := 'Group 1';
 cchHeader := Length(LvGroup.pszHeader);
 iGroupIdL := 0;
 uAlign := LVGA_HEADER_CENTER;
 end;
 SendMessage(ListView1.Handle, LVM_INSERTGROUP, 0, Longint(@LvGroup));
 // Create Group2
 FillChar(LvGroup, SizeOf(LvGroup), 0);
 with LvGroup do
 begin
 cbSize := SizeOf(TLVGROUP);
 mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID;
 pszHeader := 'Group 2';
 cchHeader := Length(LvGroup.pszHeader);
 iGroupIdL := 1;
 uAlign := LVGA_HEADER_LEFT
 end;
 SendMessage(ListView1.Handle, LVM_INSERTGROUP, 1, Longint(@LvGroup));
 // Assign items to the groups
 for I := 0 to ListView1.Items.Count - 1 do
 begin
 with LvItemA do
 begin
 FillChar(LvItemA, SizeOf(TLvItemA), 0);
 mask := LVIF_GROUPID;
 iItem := I;
 iGroupId := Random(2);
 end;
 SendMessage(ListView1.Handle, LVM_SETITEM, 0, Longint(@LvItemA))
 end;
end;
// XPManifest needed!
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01137
Отображаются ли полосы прокрутки для TStringGrid?

=== Отображаются ли полосы прокрутки для TStringGrid? ===
if (GetWindowlong(Stringgrid1.Handle, GWL_STYLE) and WS_VSCROLL) <> 0 then
 ShowMessage('Vertical scrollbar is visible!');
if (GetWindowlong(Stringgrid1.Handle, GWL_STYLE) and WS_HSCROLL) <> 0 then
 ShowMessage('Horizontal scrollbar is visible!');
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01099
Отображение текста с тегами форматирования

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Отображение текста с тегами форматирования
Рисует строку текста, содержащую теги форматирования, походит на теги HTML.
Поддерживаются следующие теги:
.. Полужирный
.. Наклонный
.. Подчёркнутый
.. Перечёркнутый
.. Увеличить размер шрифта на n единиц (по умолчанию 1)
.. Уменьшить шрифт на n единиц (по умолчанию 1)
.. Нижний индекс
.. Верхний индекс
Для правильного отображения внутри тегов и не должно располагаться других тегов
..
Установка параметров шрифта.
Размер шрифта указывается как для свойства TFont.Size, а не как в HTML.
В качестве цвета можно указывать либо константы clXXXX либо числа в формате #RRGGBB,
где RR GG и ВВ соответственно шестнадцатеричные значения 00..FF красной,
зелёной и синей составляющей, HTML цвета не поддерживаются. В параметре charset
указываются константы XXXX_CHARSET, например RUSSIAN_CHARSET или ANSI_CHARSET
Зависимости: Windows, SysUtils, Classes, Graphics, Dim
Copyright: Dimka Maslov
Дата: 17 марта 2004 г.
***************************************************** }
unit HtDraw;
interface
uses Windows, SysUtils, Classes, Graphics, Dim;
type
 TTag = class;
 THtDraw = class(TObject)
 private
 FTag: TTag;
 FText: TString;
 procedure SetText(Value: TString);
 public
 function Draw(Canvas: TCanvas; X, Y: Integer): Integer;
 // Canvas - устройство для отображения текста.
 // в свойстве Canvas.Font задаются начальные параметры шрифта
 // X, Y - начальные координаты
 // Функция возвращает сумму X и ширины выведенного текста
 property Text: TString read FText write SetText;
 // Задаёт текст для отображения. В отличие от свойств компонентов,
 // присвоение значения этого свойства не приводит к автоматической
 // перерисовке. Необходимо вызывать метод Draw
 constructor Create(const AText: TString);
 destructor Destroy; override;
 end;
Полный текст модулей располагается по адресам:
* HtDraw: http://downloads.endimus.com/htdraw.zip
* Dim: http://downloads.endimus.com/dimpas.zip
Пример использования:
var
 HtDraw: THtDraw;
begin
 HtDraw := THtDraw.Create('Test');
 try
 HtDraw.Draw(Canvas, 10, 10);
 finally
 HtDraw.Free;
 end;
end;
Author: Dimka Maslov, mainbox@endimus.com, ICQ:148442121, Санкт-Петербург
Source: http://delphibase.endimus.com
ID: 03663
Category:Графика
Category:Работа с текстом
Отображение формы выбранного окна

=== Отображение формы выбранного окна ===
{
SW_MAXIMIZE - Развёрнуть форму
SW_MINIMIZE - Минимизировать форму
SW_SHOW - Показать форму
SW_HIDE - Спрятать форму
}
ShowWindow(FindWindow(nil, PChar('Название Окна')), SW_MAXIMIZE);
Author: Radmin
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02027