nyuuzyou/wikis huggingface dataset:
Как мне узнать о воздействии мыши на иконку, находящуюся на Tray?

=== Как мне узнать о воздействии мыши на иконку, находящуюся на Tray? ===
При добавлении иконки на Tray вы указывали окно - обработчик сообщения и сообщение (CallbackMessage). Теперь окно, указанное вами будет при любых событиях мыши, происходящих над иконкой, получать сообщение, указанное при добавлении иконки. При этом параметры lParam и wParam будут задействованы следующим образом:
* (UINT)wParam - содержит ID иконки, над которой произошло событие
* (UINT)lParam - содержит стандартное событие мыши, такое как WM_MOUSEMOVE или WM_LBUTTONDOWN.
При этом, информация о клавишах смены регистра, так же как и местоположения события, передаваемые при стандартных "настоящих" сообщениях мыши, теряются. Hо положение курсора можно узнать функцией GetCursorPos(), а состояние клавиш смены регистра - функцией GetKeyState(), описанных в winuser.h.
Source: Взято из FAQ: http://blackman.km.ru/myfaq/cont4.phtml]http://blackman.km.ru/myfaq/cont4.phtml
ID: 01759
Как можно из своей программы закрыть чужую?

=== Как можно из своей программы закрыть чужую? ===
PostThreadMessage(AnotherProg_MainThreadID, WM_CLOSE, 0, 0);
PostMessage(AnotherProg_MainWindow, WM_CLOSE, 0, 0);
Author: Fantasist
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02094
----
http://delphi.mastak.ru/download/255.zip
Author: LENIN INC
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02095
Как можно определить доступные сервера приложений на этой машине через Registry

Прочитайте ключ под HKEY_CLASSES_ROOT\CLSID\*, просматривая его насчёт ключей, которые имеют подключ "Borland DataBroker". Эти вхождения и являются серверами приложений.
Ниже пример, который загружает имена доступных серверов приложений в Listbox:
uses Registry;
procedure TForm1.FormCreate(Sender: TObject);
var
 I: Integer;
 TempList: TStringList;
begin
 TempList := TStringList.Create;
 try
 with TRegistry.Create do
 try
 RootKey := HKEY_CLASSES_ROOT;
 if OpenKey('CLSID', False) then
 GetKeyNames(TempList);
 CloseKey;
 for I := 1 to TempList.Count - 1 do
 begin
 if KeyExists('CLSID\' + TempList[I] + '\Borland DataBroker') then
 begin
 if OpenKey('CLSID\' + TempList[I] + '\ProgID', False) then
 begin
 Listbox1.Items.Add(ReadString());
 CloseKey;
 end;
 end;
 end;
 finally
 Free;
 end;
 finally
 TempList.Free;
 end;
end;
Author: Nomadic
Source: http://delphiworld.narod.ru/
ID: 04322
Category:COM
Как можно открыть отчёт (в режиме Print Preview а также print direct) в MS Access ?

=== Как можно открыть отчёт (в режиме Print Preview а также print direct) в MS Access ? ===
var
 Access: Variant;
begin
 // Открываем Access
 try
 Access := GetActiveOleObject('Access.Application');
 except
 Access := CreateOleObject('Access.Application');
 end;
 Access.Visible := True;
 // Открываем базу данных
 // Второй параметр указывает - будет ли база открыта в Exclusive режиме
 Access.OpenCurrentDatabase('C:\My Documents\Books.mdb', True);
 // открываем отчёт
 { Значение второго параметра может быть одним из следующих
 acViewDesign, acViewNormal, or acViewPreview. acViewNormal,
 которые устанавливаются по умолчанию, для печати отчёта.
 Если Вы не используете библиотеку типов, то можете определить
 эти значения следующими:
 const
 acViewNormal = $00000000;
 acViewDesign = $00000001;
 acViewPreview = $00000002;
 Третий параметр - это имя очереди для текущей базы данных.
 Четвёртый параметр - это строка для SQL-евского WHERE -
 то есть строка SQL, минус WHERE. }
 Access.DoCmd.OpenReport('Titles by Author', acViewPreview, EmptyParam,
 EmptyParam);
 { ... }
 // Закрываем базу данных
 Access.CloseCurrentDatabase;
 // Закрываем Access
 { const
 acQuitPrompt = $00000000;
 acQuitSaveAll = $00000001;
 acQuitSaveNone = $00000002; }
 Access.Quit(acQuitSaveAll);
end;
ID: 02754
Как можно отменить реакцию ComboBox на F4?

=== Как можно отменить реакию ComboBox на F4? ===
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if key = VK_F4 then key := 0;
end; 
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00667
Как можно получить звук с помощью MediaPlayer?

=== Как можно получить звук с помощью MediaPlayer? ===
пример взят из рассылки "Мастера DELPHI. Новости мира компонент, FAQ, статьи..."
procedure TForm1.btRecordClick(Sender: TObject);
begin
 with Media do
 begin
 { Set FileName to the test.wav file to }
 { get the recording parameters. }
 FileName := 'd:\test.wav';
 { Open the device. }
 Open;
 { Start recording. }
 Wait := False;
 StartRecording;
 end;
end;
procedure TForm1.btStopClick(Sender: TObject);
begin
 with Media do
 begin
 { Stop recording. }
 Stop;
 { Change the filename to the new file we want to write. }
 FileName := 'd:\new.wav';
 { Save and close the file. }
 Save;
 Close;
 end;
end;
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02256
Как можно работать с объектами не заботясь об их разрушении?

=== Как можно работать с объектами не заботясь об их разрушении? ===
Вначале сделаем интерфейс для нашего объекта:
type
 IAutoClean = interface
 ['{61D9CBA6-B1CE-4297-9319-66CC86CE6922}']
 end;
 TAutoClean = class(TInterfacedObject, IAutoClean)
 private
 FObj: TObject;
 public
 constructor Create(AObj: TObject);
 destructor Destroy; override;
 end;
implementation
constructor TAutoClean.Create(AObj: TObject);
begin
 FObj := AObj;
end;
destructor TAutoClean.Destroy;
begin
 FreeAndNil(FObj);
 inherited;
end;
А теперь будем использовать его вместо объекта:
procedure TForm1.Button1Click(Sender: TObject);
var
 a: IAutoClean;
 // must declare as local variable, so when this procedure finished, it's out of scope
 o: TOpenDialog; // any component
begin
 o := TOpenDialog.Create(Self);
 a := TAutoClean.Create(o);
 if o.Execute then
 ShowMessage(o.FileName);
end;
Source: http://www.baltsoft.com/
ID: 00093
Как можно разорвать соединение с интернетом?

function LineDrop(hCall: HCALL; lpsUserUserInfo: PChar; dwSize: DWORD): Integer;
* hCall - Дескриптор соединения. Приложение должно быть владельцем соединения. Состояние соединения может быть любым кроме Idle.
* lpsUserUserInfo - Указатель на строку, содержащую текст для передачи удаленной стороне как часть завершения вызова. Может быть nil. Первым байтом может идти определитель протокола, и он должен учитываться в dwSize
* dwSize - Размер данных в lpsUserUserInfo, в байтах. Если lpsUserUserInfo = nil, то игнорируется.
Author: Baa
Source: Vingrad.ru http://forum.vingrad.ru
ID: 03569
Category:Связь
Как можно создать OCX-компонент?

Для Delphi 6:
# Пишем обычный VCL-компонент и добавляем его в палитру компонентов.
# File -> New -> Other -> ActiveX -> ActiveX Control
# VCL Class Name = твой VCL-компонент
Author: Cully
Source: http://forum.vingrad.ru
ID: 04350
Category:COM
Category:ActiveX
Как можно узнать количество цветов текущего режима

GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL) *
 GetDeviceCaps(Form1.Canvas.Handle, PLANES)
Для получения общего количества битов, используемых для получения цвета используются следующие значения.
 1 = 2 colors bpp
 4 = 16 colors bpp
 8 = 256 colors bpp
 15 = 32768 colors (возвращает 16 на большинстве драйверов) bpp
 16 = 65535 colors bpp
 24 = 16,777,216 colors bpp
 32 = 16,777,216 colors (то же, что и 24) bpp
Вы можете использовать:
NumberOfColors := (1 shl
 (GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL) *
 GetDeviceCaps(Form1.Canvas.Handle, PLANES));
для подсчета общего количества используемых цветов.
Source: Взято с http://delphiworld.narod.ru
ID: 03702
== См. также ==
* Число цветов (цветовая палитра) у данного компьютера
Category:Графика
Category:Цвета и палитры
Как можно узнать что было изменениие, Наприме сдвиг мыши или нажатие клавиши

=== Как можно узнать что было изменение, Например сдвиг мыши или нажатие клавиши ===
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
type
 TForm1 = class(TForm)
 Memo1: TMemo;
 procedure FormCreate(Sender: TObject);
 procedure FormClose(Sender: TObject; var Action: TCloseAction);
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
var
 MouseHook: HHOOK;
function LowLevelMouseProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
begin
 Result := CallNextHookEx(MouseHook, nCode, WParam, LParam);
 case WParam of
 WM_LBUTTONDOWN: Form1.Memo1.Lines.Add('Мыша вдавилась левой кнопкой.');
 WM_LBUTTONUP: Form1.Memo1.Lines.Add('Мыша отдавилась левой кнопкой.');
 WM_LBUTTONDBLCLK: Form1.Memo1.Lines.Add('Мыша дважды клацнулась левой кнопкой.');
 WM_RBUTTONDOWN: Form1.Memo1.Lines.Add('Мыша вдавилась правой кнопкой.');
 WM_RBUTTONUP: Form1.Memo1.Lines.Add('Мыша отдавилась правой кнопкой.');
 WM_RBUTTONDBLCLK: Form1.Memo1.Lines.Add('Мыша дважды клацнулась правой кнопкой.');
 WM_MBUTTONDOWN: Form1.Memo1.Lines.Add('Мыша вдавилась средней кнопкой.');
 WM_MBUTTONUP: Form1.Memo1.Lines.Add('Мыша отдавилась средней кнопкой.');
 WM_MBUTTONDBLCLK: Form1.Memo1.Lines.Add('Мыша дважды клацнулась средней кнопкой.');
 WM_MOUSEMOVE: Form1.Memo1.Lines.Add('Мыша побежала.');
 WM_MOUSEWHEEL: Form1.Memo1.Lines.Add('Мыша тащиться.');
 else
 Form1.Memo1.Lines.Add('Мыша сошла с ума, купите новую мышу.');
 end;
end;
procedure TForm1.FormCreate(Sender: TObject);
const
 WH_MOUSE_LL = 14;
begin
 MouseHook := SetWindowsHookEx(WH_MOUSE_LL, @LowLevelMouseProc, HInstance, 0);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 UnhookWindowsHookEx(MouseHook);
end;
end.
Тож самое и на клавиатуру, код хука - Цифра 13 Соответственно принимай уже мессаги от клавиатуры...Только начиная с Win 2000 
Author: Rouse_
Source: Взято из http://forum.sources.ru
ID: 01612
Как на Oracle поменять compatible

=== Как на Oracle поменять compatible ===
Подскажите, как на Oracle 7.3.2.3 (Solaris x86) поменять compatible на 7.3.2.3 (c 7.1.0.0)?
Ставить в initmybase.ora
compatible = "7.3.2.3"
и после старта с новым параметром сделать
ALTER DATABASE RESET COMPABILITY;
И рестартовать базу.
Source: Взято с http://delphiworld.narod.ru
ID: 02726
Как нажать кнопку в TWebbrowser когда в окне есть несколько кнопок?

// If there is only one button, you can do something like:
WebBrowser1.OleObject.Document.forms.item(0).elements.item(0).click;
// This will do a click on the first element of the first <FORM>, where an
// element is either <INPUT>, <SELECT> or <TEXTAREA>.
// If there is more than one button, you can do something like:
procedure TForm1.Button1Click(Sender: TObject);
var
 ovElements: OleVariant;
 i: Integer;
begin
 ovElements := WebBrowser1.OleObject.Document.forms.item(0).elements;
 for i := 0 to (ovElements.Length - 1) do
 if (ovElements.item(i).tagName = 'INPUT')
 and (ovElements.item(i).type = 'SUBMIT')
 and (ovElements.item(i).Value = 'Recent Charges') then
 ovElements.item(i).Click;
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03491
Category:Связь
Category:WebBrowser
Как назначить пароль на таблицу?

=== Как назначить пароль на таблицу? ===
unit Unit2;
interface
uses
 BDE, SysUtils, DBTables, Windows;
function TablePasswort(var table: TTable; password: string): Boolean;
implementation
function StrToOem(const AnsiStr: string): string;
begin
 SetLength(Result, Length(AnsiStr));
 if Length(Result) > 0 then
 CharToOem(PChar(AnsiStr), PChar(Result))
end;
function TablePasswort(var table: ttable; password: string): Boolean;
var
 pTblDesc: pCRTblDesc;
 hDb: hDBIDb;
begin
 Result := False;
 with table do
 begin
 if Active and (not Exclusive) then
 Close;
 if (not Exclusive) then
 Exclusive := True;
 if (not Active) then
 Open;
 hDb := DBHandle;
 Close
 end;
 GetMem(pTblDesc, SizeOf(CRTblDesc));
 FillChar(pTblDesc^, sizeof(CRTblDesc), 0);
 with pTblDesc^ do
 begin
 StrPCopy(szTblName, StrToOem(table.tablename));
 szTblType := szParadox;
 StrPCopy(szPassword, StrToOem(password));
 bPack := True;
 bProtected := True
 end;
 if DbiDoRestructure(hDb, 1, pTblDesc, nil, nil, nil, False) <> DBIERR_NONE then
 exit;
 if pTblDesc <> nil then
 FreeMem(pTblDesc, sizeof(CRTblDesc));
 Result := True
end;
end.
Пример использования:
TablePasswort(Table1, 'secret');
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 02940
Category:Базы данных
Category:Paradox
Как назначить событие на увеличение/уменьшение TSpinEdit с помощью стрелочек?

=== Как назначить событие на увеличение/уменьшение TSpinEdit с помощью стрелочек? ===
У TSpinEdit.Button есть дополнительные события, которые не показаны в инспекторе объектов, например, OnUpClick и OnDownClick...
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, 
 Controls, Forms, Dialogs, StdCtrls, Spin;
type
 TForm1 = class(TForm)
 SpinEdit1: TSpinEdit;
 procedure FormCreate(Sender: TObject);
 public
 procedure OnButtonUpClick(Sender: TObject);
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
 SpinEdit1.Button.OnUpClick := OnButtonUpClick;
end;
procedure TForm1.OnButtonUpClick(Sender: TObject);
begin
 MessageDlg('Up Button was clicked.', mtInformation, [mbOk], 0);
end;
end.
Author: p0s0l
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00540
Как найти все Alias, укакзывающие на MS SQL Server?

=== Как найти все Alias, укакзывающие на MS SQL Server? ===
// GetAliases(ComboBox1.Items)
procedure GetAliases(const AList: TStrings);
var
 i: Integer;
 Desc: DBDesc;
 Buff: array[0..254] of char;
begin
 // list all BDE aliases
 Session.GetAliasNames(AList);
 for i := AList.Count - 1 downto 0 do
 begin
 StrPCopy(Buff, AList[i]);
 Check(DbiGetDatabaseDesc(Buff, @Desc));
 // no Paradox, please
 if StrPas(Desc.szDBType) = 'STANDARD' then
 AList.Delete(i)
 end
end;
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 02782
Category:Базы данных
Category:MS SQL Server
Как найти все установленные компоненты?

=== Как найти все установленные компоненты? ===
uses ToolsApi;
{....}
var
 a, i: Integer;
begin
 with (BorlandIDEServices as IOTAPackageServices) do
 begin
 for a := 0 to GetPackageCount - 1 do
 begin
 for i := 0 to GetComponentCount(a) - 1 do
 begin
 { get each component name with GetComponentName(a, i); }
 end;
 end;
 end;
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 00040
Как найти все форматы бумаги, поддерживаемые принтером?

uses
 Printers, WinSpool;
procedure GetPapernames(sl: TStrings);
type
 TPaperName = array [0..63] of Char;
 TPaperNameArray = array [1..High(Word) div SizeOf(TPaperName)] of TPaperName;
 PPapernameArray = ^TPaperNameArray;
var
 Device, Driver, Port: array [0..255] of Char;
 hDevMode: THandle;
 i, numPaperformats: Integer;
 pPaperFormats: PPapernameArray;
begin
 Printer.PrinterIndex := -1; // Standard printer
 Printer.GetPrinter(Device, Driver, Port, hDevmode);
 numPaperformats := WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES, nil, nil);
 if numPaperformats 0 then
 begin
 GetMem(pPaperformats, numPaperformats * SizeOf(TPapername));
 try
 WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES,
 PChar(pPaperFormats), nil);
 sl.Clear;
 for i := 1 to numPaperformats do sl.Add(pPaperformats^[i]);
 finally
 FreeMem(pPaperformats);
 end;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 GetPapernames(memo1.Lines);
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03197
----
Вот пример, выводящий список форматов бумаги для принтера, установленного по умолчанию:
procedure TForm1.Button2Click(Sender: TObject);
type
 TPaperName = array[0..63] of Char;
 TPaperNameArray = array[1..High(Cardinal) div Sizeof(TPaperName)] of TPaperName;
 PPapernameArray = ^TPaperNameArray;
var
 Device, Driver, Port: array[0..255] of Char;
 hDevMode: THandle;
 i, numPaperformats: Integer;
 pPaperFormats: PPaperNameArray;
begin
 Printer.PrinterIndex := -1;
 Printer.GetPrinter(Device, Driver, Port, hDevmode);
 numPaperformats := WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES, nil, nil);
 if numPaperformats > 0 then
 begin
 GetMem(pPaperformats, numPaperformats * SizeOf(TPaperName));
 try
 WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES, PChar(pPaperFormats), nil);
 memo1.Clear;
 for i := 1 to numPaperformats do
 memo1.Lines.Add(pPaperformats^[i]);
 finally
 FreeMem(pPaperformats);
 end;
 end;
end;
Source: Взято из Советов по Delphi от Валентина Озерова
ID: 03198
Category:Принтер
Как найти директорию TEMP в Windows?

=== Как найти директорию TEMP в Windows? ===
function c_GetTempPath: String; 
var 
 Buffer: array[0..1023] of Char; 
begin 
 SetString(Result, Buffer, GetTempPath(SizeOf(Buffer)-1, Buffer)); 
end; 
этот код так же можно использовать для:
 GetCurrentDirectory 
 GetSystemDirectory 
 GetWindowsDirectory 
Source: Взято из http://forum.sources.ru
ID: 01663
Как найти и выделить текст TWebBrowser?

{....}
 private
 procedure SearchAndHighlightText(aText: string);
{....}
uses mshtml;
procedure TForm1.SearchAndHighlightText(aText: string);
var
 tr: IHTMLTxtRange; // TextRange Object
begin
 if not WebBrowser1.Busy then
 begin
 tr := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange;
 // Get a body with IHTMLDocument2 Interface and then a TextRang obj. with IHTMLBodyElement Intf.
 while tr.findText(aText, 1, 0) do // while we have result
 begin
 tr.pasteHTML('' +
 tr.htmlText + '');
 // Set the highlight, now background color will be Lime
 tr.scrollIntoView(True);
 // When IE find a match, we ask to scroll the window... you dont need this...
 end;
 end;
end;
// Example:
procedure TForm1.Button1Click(Sender: TObject);
begin
 SearchAndHighlightText('delphi');
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03495
Category:Связь
Category:WebBrowser
Как найти каталог Windows

=== Как найти каталог Windows ===
function GetWindowsFolder:string;
var
 p: PChar;
begin
 GetMem(p, MAX_PATH);
 Result := ;
 if GetWindowsDirectory(p, MAX_PATH) > 0 then
 Result := string(p);
 FreeMem(p);
end;
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
ID: 01659
----
type
 TForm1 = class(TForm)
 public
 { Public declarations }
 Windir: string;
 WindirP: PChar;
 Res: Cardinal;
 end;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
 WinDirP := StrAlloc(MAX_PATH);
 Res := GetWindowsDirectory(WinDirP, MAX_PATH);
 if Res > 0 then
 WinDir := StrPas(WinDirP);
 Label1.Caption := WinDir;
end;
Source: http://delphiworld.narod.ru/
ID: 01660
Как найти компонент по имени?

=== Как найти компонент по имени? ===
Обратится к компоненту по имени можно например так, если стоит 10 CheckBox - от CheckBox1 до CheckBox10 то
for i := 1 to 10 do
 (FindComponent(Format('CheckBox%d', [i])) as TCheckBox).Checked := True;
Author: Vit (Vitaly Nevzorov) (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00354
Как найти контрастный цвет к данному?

function FindContrastingColor(Color: TColor): TColor;
var
 R, G, B: Byte;
begin
 R := GetRValue(Color);
 G := GetGValue(Color);
 B := GetBValue(Color);
 if (R < 128) then
 R := 255
 else
 R := 0;
 if (G < 128) then
 G := 255
 else
 G := 0;
 if (B < 128) then
 B := 255
 else
 B := 0;
 Result := RGB(R, G, B);
end;
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 03695
Category:Графика
Category:Цвета и палитры
Как найти наибольший общий делитель?

{ The greatest common factor, or GCF, is the greatest factor
 that divides two numbers.
}
uses
 math;
// Find the greatest common factor of two integers
function TForm1.GCF(A, B: Integer): Integer;
var
 Lfactor: Integer;
begin
 // Return -1 if either value is zero or negative
 if (A < 1) or (B < 1) then
 begin
 Result := -1;
 Exit;
 end;
 // if A = B then this is the GCF
 if A = B then
 begin
 Result := A;
 Exit;
 end;
 Result := 1;
 for Lfactor := trunc(max(A, B) / 2) downto 2 do
 begin
 if (frac(A / Lfactor) = 0) and (frac(B / Lfactor) = 0) then
 begin
 Result := Lfactor;
 Exit; // GCF has been found. No need to continue
 end;
 end;
end;
// Example:
procedure TForm1.Button1Click(Sender: TObject);
var
 Res: Integer;
begin
 Res := GCF(120, 30);
 ShowMessage(Inttostr(Res));
end;
{******************}
// Find the greatest common factor of an array of integers
function TForm1.GCFarray(A: array of Integer): Integer;
var
 Llength, Lindex, Lfactor: Integer;
begin
 Llength := Length(A);
 // Return -1 if any value is zero or negative
 for Lindex := 0 to Llength - 1 do
 begin
 if A[Lindex] < 1 then
 begin
 Result := -1;
 Exit;
 end;
 end;
 // if all elements are equal then this is the GCF
 Lindex := 1;
 while (Lindex < Llength) and (A[Lindex] = A[0]) do Inc(Lindex);
 if Lindex = Llength then
 begin
 Result := A[0];
 Exit;
 end;
 Result := 1;
 for Lfactor := trunc(ArrayMax(A) / 2) downto 2 do
 begin
 Lindex := 0;
 while (Lindex < Llength) and
 (frac(A[Lindex] / Lfactor) = 0) do Inc(Lindex);
 if Lindex = Llength then
 begin
 Result := Lfactor;
 Exit; // GCF has been found. No need to continue
 end;
 end;
end;
// find the maximum value in an array of integers
function TForm1.ArrayMax(Aarray: array of Integer): Integer;
var
 Lpos: Integer;
begin
 Result := 0;
 for Lpos := 0 to Length(Aarray) - 1 do
 if Aarray[Lpos] > Result then
 Result := Aarray[Lpos];
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 04069
Category:Алгоритмы
Category:Математика
Как найти окно по неполному названию?

=== Как найти окно по неполному названию? ===
Код не мой, взят где-то из интернета, авторство не помню, я его работоспособность проверял, но почему-то работает не в 100% случаев, копать дальше не было времени, но может кому пригодится и в таком варианте.
type
 PFindWindowStruct = ^TFindWindowStruct;
 TFindWindowStruct = record
 Caption: string;
 ClassName: string;
 WindowHandle: THandle;
 end;
function EnumWindowsProc(hWindow: hWnd; lParam: LongInt): Bool; stdcall;
var
 lpBuffer: PChar;
 WindowCaptionFound: bool;
 ClassNameFound: bool;
begin
 GetMem(lpBuffer, 255);
 Result := True;
 WindowCaptionFound := False;
 ClassNameFound := False;
 try
 if GetWindowText(hWindow, lpBuffer, 255) > 0 then
 if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer)) > 0 then
 WindowCaptionFound := True;
 if PFindWindowStruct(lParam).ClassName = then
 ClassNameFound := True
 else if GetClassName(hWindow, lpBuffer, 255) > 0 then
 if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer)) > 0 then
 ClassNameFound := True;
 if (WindowCaptionFound and ClassNameFound) then
 begin
 PFindWindowStruct(lParam).WindowHandle := hWindow;
 Result := False;
 end;
 finally
 FreeMem(lpBuffer, SizeOf(lpBuffer^));
 end;
end;
function FindAWindow(Caption: string; ClassName: string): THandle;
var WindowInfo: TFindWindowStruct;
begin
 WindowInfo.Caption := Caption;
 WindowInfo.ClassName := ClassName;
 WindowInfo.WindowHandle := 0;
 EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));
 FindAWindow := WindowInfo.WindowHandle;
end;
procedure TForm1.Button1Click(Sender: TObject);
var TheWindowHandle: THandle;
begin
 TheWindowHandle := FindAWindow('Opera', );
 if TheWindowHandle <> 0 then
 begin
 Showwindow(TheWindowHandle, sw_restore);
 BringWindowToTop(TheWindowHandle);
 end
 else
 ShowMessage('Window Not Found!');
end;
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02097
----
function TForm1.Find(s: string): hWnd;
var
 Wnd: hWnd;
 buff: array[0..127] of Char;
begin
 Find := 0;
 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));
 if Pos(s, StrPas(buff)) > 0 then
 begin
 Find := Wnd;
 Break;
 end;
 end;
 Wnd := GetWindow(Wnd, gw_hWndNext);
 end;
end;
Author: Mikel
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02098