nyuuzyou/wikis huggingface dataset:
Прочитать список всех запущенных Exe/ Проверить запущен ли Exe?

=== Прочитать список всех запущенных Exe/ Проверить запущен ли Exe? ===
uses 
 Psapi, tlhelp32; 
procedure CreateWin9xProcessList(List: TStringList); 
var 
 hSnapShot: THandle; 
 ProcInfo: TProcessEntry32; 
begin 
 if List = nil then Exit; 
 hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hSnapShot <> THandle(-1)) then 
 begin 
 ProcInfo.dwSize := SizeOf(ProcInfo); 
 if (Process32First(hSnapshot, ProcInfo)) then 
 begin 
 List.Add(ProcInfo.szExeFile); 
 while (Process32Next(hSnapShot, ProcInfo)) do 
 List.Add(ProcInfo.szExeFile); 
 end; 
 CloseHandle(hSnapShot); 
 end; 
end; 
procedure CreateWinNTProcessList(List: TstringList); 
var 
 PIDArray: array [0..1023] of DWORD; 
 cb: DWORD; 
 I: Integer; 
 ProcCount: Integer; 
 hMod: HMODULE; 
 hProcess: THandle; 
 ModuleName: array [0..300] of Char; 
begin 
 if List = nil then Exit; 
 EnumProcesses(@PIDArray, SizeOf(PIDArray), cb); 
 ProcCount := cb div SizeOf(DWORD); 
 for I := 0 to ProcCount - 1 do 
 begin 
 hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or 
 PROCESS_VM_READ, 
 False, 
 PIDArray[I]); 
 if (hProcess <> 0) then 
 begin 
 EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb); 
 GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName)); 
 List.Add(ModuleName); 
 CloseHandle(hProcess); 
 end; 
 end; 
end; 
procedure GetProcessList(var List: TstringList); 
var 
 ovi: TOSVersionInfo; 
begin 
 if List = nil then Exit; 
 ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); 
 GetVersionEx(ovi); 
 case ovi.dwPlatformId of 
 VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List); 
 VER_PLATFORM_WIN32_NT: CreateWinNTProcessList(List); 
 end 
end; 
function EXE_Running(FileName: string; bFullpath: Boolean): Boolean; 
var 
 i: Integer; 
 MyProcList: TstringList; 
begin 
 MyProcList := TStringList.Create; 
 try 
 GetProcessList(MyProcList); 
 Result := False; 
 if MyProcList = nil then Exit; 
 for i := 0 to MyProcList.Count - 1 do 
 begin 
 if not bFullpath then 
 begin 
 if CompareText(ExtractFileName(MyProcList.Strings[i]), FileName) = 0 then 
 Result := True 
 end 
 else if CompareText(MyProcList.strings[i], FileName) = 0 then Result := True; 
 if Result then Break; 
 end; 
 finally 
 MyProcList.Free; 
 end; 
end; 
// Example 1: Is a Exe-File running ? 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
 if EXE_Running('Notepad.exe', False) then 
 ShowMessage('EXE is running') 
 else 
 ShowMessage('EXE is not running'); 
end; 
// Example 2: List running Exe-Files 
procedure TForm1.Button3Click(Sender: TObject); 
var 
 i: Integer; 
 MyProcList: TstringList; 
begin 
 MyProcList := TStringList.Create; 
 try 
 GetProcessList(MyProcList); 
 if MyProcList = nil then Exit; 
 for i := 0 to MyProcList.Count - 1 do 
 ListBox1.Items.Add(MyProcList.Strings[i]); 
 finally 
 MyProcList.Free; 
 end; 
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 02050
Прямой вызов Hint

=== Прямой вызов Hint ===
{----------------------------------------------------------------}
{ Демонстрирует всплывающую подсказку для определенного элемента }
{ управления (Control), возвращает ссылку на hint-объект, }
{ поэтому в дальнейшем подсказка может быть спрятана вызовом }
{ RemoveHint (смотри ниже). }
{----------------------------------------------------------------}
function RevealHint(Control: TControl): THintWindow;
var
 ShortHint: string;
 AShortHint: array[0..255] of Char;
 HintPos: TPoint;
 HintBox: TRect;
begin
 { Создаем окно: }
 Result := THintWindow.Create(Control);
 { Получаем первую часть подсказки до '|': }
 ShortHint := GetShortHint(Control.Hint);
 { Вычисляем месторасположение и размер окна подсказки }
 HintPos := Control.ClientOrigin;
 Inc(HintPos.Y, Control.Height + 6);
 // < < < < Смотри примечание ниже
 HintBox := Bounds(0, 0, Screen.Width, 0);
 DrawText(Result.Canvas.Handle,
 StrPCopy(AShortHint, ShortHint), -1, HintBox,
 DT_CALCRECT or DT_LEFT or DT_WORDBREAK or DT_NOPREFIX);
 OffsetRect(HintBox, HintPos.X, HintPos.Y);
 Inc(HintBox.Right, 6);
 Inc(HintBox.Bottom, 2);
 { Теперь показываем окно: }
 Result.ActivateHint(HintBox, ShortHint);
end; {RevealHint}
{----------------------------------------------------------------}
{ Освобождаем дескриптор окна всплывающей подсказки, выведенной }
{ предыдущим RevealHint. }
{----------------------------------------------------------------}
procedure RemoveHint(var Hint: THintWindow);
begin
 Hint.ReleaseHandle;
 Hint.Free;
 Hint := nil;
end;
Строка с комментарием <<<< позиционирует подсказку ниже элемента управления. Это может быть изменено, если по какой-то причине вам необходима другая позиция окна с подсказкой. 
Source: http://delphiworld.narod.ru/
ID: 01287
----
{ Появление }
if h <> nil then H.ReleaseHandle; { если чей-то хинт yже был, то его погасить }
H := THintWindow.Create(Окно-владелец хинта);
H.ActivateHint(H.CalcHintRect(...), 'hint hint nint');
....
{ UnПоявление :) - это возможно придется повесить на таймеp, который будет
обнуляться при каждом новом появлении хинта }
IF h <> nil H.ReleaseHandle;
По-дрyгомy задача тоже решаема, но очень плохо. (см исходник объекта TApplication, он как pаз сабжами заведует. 
Source: http://delphiworld.narod.ru/
ID: 01288
----
Сделаем это по нажатию на первую кнопку, а по нажатию на вторую кнопку будем скрывать окно hint'a: 
public
 { Public declarations }
 h: THintWindow;
procedure TForm1.Button1Click(Sender: TObject);
begin
 if h <> nil then
 H.ReleaseHandle;
 H := THintWindow.Create(Form1);
 H.ActivateHint(Form1.ClientRect, 'Это всплывающая подсказка');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
 if h <> nil then
 H.ReleaseHandle;
end; 
Source: http://delphiworld.narod.ru/
ID: 01289
Путь к папке My Computer

=== Путь к папке My Computer ===
uses
 ActiveX, ShlObj;
procedure TForm1.Button1Click(Sender: TObject);
var
 pShell, ShellFolder: IShellFolder;
 pidl: PITEMIDLIST;
 PMalloc: IMalloc;
 sName: string;
 EnumIDList: IEnumIDList;
 pceltFetched: ULONG;
 lpName: TStrRet;
 slDirectories: TStringList;
begin
 slDirectories := TStringList.Create;
 try
 SHGetDesktopFolder(ShellFolder);
 SHGetSpecialFolderLocation(0, CSIDL_DRIVES, pidl);
 SHGetMalloc(PMalloc);
 ShellFolder.BindToObject(pidl, nil, IID_IShellFolder, Pointer(pShell));
 pShell.EnumObjects(0, SHCONTF_FOLDERS, EnumIDList);
 while EnumIDList.Next(1, pidl, pceltFetched) = S_ok do
 begin
 pceltFetched := 0;
 lpName.uType := 0;
 pShell.GetDisplayNameOf(pidl, SHGDN_FORPARSING, lpName);
 sName := lpName.pOleStr;
 slDirectories.Add(sName);
 end;
 ListBox1.Items.Assign(sldirectories);
 finally
 pMalloc._Release;
 pMalloc := nil;
 slDirectories.Free;
 end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 01666
Работа метода Assign

=== Работа метода Assign ===
В общем случае, утверждение "Destination := Source" не идентично утверждению "Destination.Assign(Source)".
Утверждение "Destination := Source" принуждает Destination ссылаться на тот же объект, что и Source, а "Destination.Assign(Source)" копирует содержание объектных ссылок Source в объектные ссылки Destination.
Если Destination является свойством некоторого объекта (тем не менее, и свойство не является ссылкой на другой объект, как, например, свойство формы ActiveControl, или свойство DataSource элементов управления для работы с базами данных), тогда утверждение "Destination := Source" идентично утверждению "Destination.Assign(Source)". Это объясняет, почему LB.Items := MemStr работает, когда MemStr := LB.Items нет. 
Source: из Советов по Delphi от Валентина Озерова, Сборник Kuliba
ID: 00120
Работа с Excel из Дельфи

Чтобы работать с Excel из Delphi cуществует два основных пути.
* Первый - это создание его как COM объект. Таким же образом можно работать и с Word, Access, Outlook(не Express) и многими другими программами.
* Второй способ (для таблицы Excel) это подключение через ADO, DAO(Data Active Objects) или ODBC. 
Есть замечательный цикл книг по этой теме.
Author: Vit
ID: 04367
== Дополнительная литература ==
* Word2000 для разработчика (я сам разбирался по ней, хорошая книжка)
* Excel2000 для разработчика (тоже)
В книгах подробно описано как и макросы запускать как управлять объектами Office много примеров (правда на VB for App, но все легко переносится)
Author: PILOTIK
ID: 04372
Source: Vingrad.ru http://forum.vingrad.ru
Category:COM
Category:MS Office
Работа с Netscape Navigator через DDE

uses DDEman;
procedure GotoURL(sURL: string);
var
 dde: TDDEClientConv;
begin
 dde := TDDEClientConv.Create(nil);
 with dde do
 begin
 // specify the location of netscape.exe
 ServiceApplication := 'C:\Program Files\Netscape\Communicator\Program\NETSCAPE.EXE';
 // activate the Netscape Navigator
 SetLink('Netscape', 'WWW_Activate');
 RequestData('0xFFFFFFFF');
 // go to the specified URL
 SetLink('Netscape', 'WWW_OpenURL');
 RequestData(sURL + ',,0xFFFFFFFF,0x3,,,');
 // ... CloseLink;
 end;
 dde.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 GotoURL('http://www.site.ru');
end;
Source: http://delphiworld.narod.ru/
ID: 04505
Category:DDE
Работа с Photoshop

uses
 ComObj, ActiveX, PhotoShopTypeLibrary_TLB;
var
 PS: IPhotoShopApplication;
 Unknown: IUnknown;
begin
 Result := GetActiveObject(CLASS_PhotoshopApplication, nil, Unknown);
 if (Result = MK_E_UNAVAILABLE) then
 PS := CoPhotoshopApplication.Create
 else
 begin
 { make sure no other error occurred }
 OleCheck(Result);
 OleCheck(Unknown.QueryInterface(IPhotoShopApplication, PS));
 end;
 PS.Visible := True;
end;
Source: Delphi Knowledge Base: http://www.baltsoft.com/
ID: 04484
Category:COM
Работа с Sender

=== Работа с Sender ===
unit TestInputForm;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, DdhInpuB;
type
 TForm1 = class(TForm)
 Edit1: TEdit;
 Label1: TLabel;
 DdhInputButton1: TDdhInputButton;
 DdhInputButton2: TDdhInputButton;
 DdhInputButton3: TDdhInputButton;
 procedure DdhInputButtonClick(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.DdhInputButtonClick(Sender: TObject);
begin
 ShowMessage ('You have clicked the ' +
 (Sender as TButton).Name + ','#13 +
 'having the caption ' +
 (Sender as TButton).Caption);
end;
end.
Source: http://delphiworld.narod.ru
ID: 00108
Работа с System Menu

=== Работа с System Menu ===
Добавить новый пункт меню в системное меню диалога:
AppendMenu(GetSystemMenu(Self.Handle, FALSE), MF_ENABLED, 1001, '&Help'); 
Author: Sheff
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01801
----
Отловить клик по меню можно следующим образом:
 private
 procedure WhetherUserPressesHelp(var Msg: TMessage); message WM_SYSCOMMAND;
procedure TForm1.WhetherUserPressesHelp(var Msg: TMessage);
begin
 if Msg.WParam = 1001 then
 HelpForm.ShowModal
 else
 inherited; // к примеру вызываем форму на которой будет помощь
end;
Author: Song
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01802
Работа с TGA файлами

const
 FERRORMSG2 = 'Sorry, Unsupported Compressed(RLE) File Format';
 FERRORMSG3 = 'Sorry, Unsupported More Than 256 Colours File Format';
type
 TArrBuff = array[1..512] of Byte;
 TPalette_Cell = record
 b2, g2, r2: byte;
 end;
 TPal = array[0..255] of TPalette_Cell;
 TPPal = ^TPal;
 TTGA_Header = record // Targa(TGA) HEADER //
 IDLength, ColorMap, ImageType: Byte;
 ClrMapSpes: array[1..5] of Byte;
 XAwal, YAwal, Width, Height: SmallInt;
 BpPixel, ImageDescription: Byte;
 end;
var
 pal: TPPal;
 pFile: File;
 buffer: TArrBuff;
 FTgaHeader: TTGA_Header;
procedure THPTGA.ReadImageData2Bitmap;
var
 i, j, idx: Integer;
begin
 Seek(pFile, sizeof(FtgaHeader) + FtgaHeader.IDLength + 768);
 for i := FtgaHeader.Height - 1 downto FtgaHeader.YAwal do
 begin
 BlockRead(pFile, buffer, FtgaHeader.Width);
 for j := FtgaHeader.XAwal to FtgaHeader.Width - 1 do
 begin
 idx := j - FtgaHeader.XAwal + 1;
 SetPixel(Bitmap.Canvas.Handle, j, i, rgb(pal^[buffer[idx]].r2,
 pal^[buffer[idx]].g2, pal^[buffer[idx]].b2));
 end;
 end;
end;
procedure THPTGA.LoadFromFile(const FileName: string);
begin
 AssignFile(pFile, FileName);
{$I-}
 Reset(pFile, 1);
{$I+}
 if (IOResult = 0) then
 begin
 try
 BlockRead(pFile, FtgaHeader, SizeOf(FtgaHeader));
 // checking unsupported features here
 if (FtgaHeader.ImageType > 3) then
 begin
 MessageBox(Application.Handle, FERRORMSG2, 'TGA Viewer Error', MB_ICONHAND);
 exit;
 end;
 if (FtgaHeader.BpPixel > 8) then
 begin
 MessageBox(Application.Handle, FERRORMSG3, 'TGA Viewer Error', MB_ICONHAND);
 exit;
 end;
 GetMem(pal, 768);
 try
 Bitmap.Width := FtgaHeader.Width;
 Bitmap.Height := FtgaHeader.Height;
 // if use Color-Map and Uncompressed then read it
 if (FtgaHeader.ImageType = 1) then
 BlockRead(pFile, pal^, 768);
 ReadImageData2Bitmap;
 finally
 FreeMem(pal);
 end;
 finally
 CloseFile(pFile);
 end;
 end
 else
 MessageBox(Application.Handle, 'Error Opening File', 'TGA Viewer Error', MB_ICONHAND);
end;
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 04305
Category:Форматы файлов
Работа с TaskBar

=== Работа с TaskBar ===
unit TaskBar;
interface
uses Windows, ShellAPI;
const
 // Дублируем описания из ShellAPI, чтобы не писать его в Uses
 // везде, где мы используем этот модуль
 NIF_TIP = ShellAPI.NIF_TIP;
 NIF_ICON = ShellAPI.NIF_ICON;
function TaskBarAddIcon(
 hWindow: THandle; // окно, создавшее значок
 ID: Cardinal; // идентификатор значка
 ICON: hIcon; // иконка
 CallbackMessage: Cardinal; // сообщение, которое будет посылаться окну
 Tip: PChar // ToolTip
 ): Boolean;
function TaskBarModifyIcon(
 hWindow: THandle;
 ID: Cardinal;
 Flags: Cardinal;
 ICON: hIcon;
 Tip: PChar): Boolean;
function TaskBarDeleteIcon(
 hWindow: THandle;
 ID: Integer): Boolean;
implementation
function TaskBarAddIcon(
 hWindow: THandle;
 ID: Cardinal;
 ICON: hIcon;
 CallbackMessage: Cardinal;
 Tip: PChar): Boolean;
var
 NID: TNotifyIconData;
begin
 FillChar(NID, SizeOf(TNotifyIconData), 0);
 with NID do
 begin
 cbSize := SizeOf(TNotifyIconData);
 Wnd := hWindow;
 uID := ID;
 uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
 uCallbackMessage := CallbackMessage;
 hIcon := Icon;
 lstrcpyn(szTip, Tip, SizeOf(szTip));
 end;
 Result := Shell_NotifyIcon(NIM_ADD, @NID);
end;
function TaskBarModifyIcon(
 hWindow: THandle;
 ID: Cardinal;
 Flags: Cardinal;
 ICON: hIcon;
 Tip: PChar): Boolean;
var
 NID: TNotifyIconData;
begin
 FillChar(NID, SizeOf(TNotifyIconData), 0);
 with NID do
 begin
 cbSize := SizeOf(TNotifyIconData);
 Wnd := hWindow;
 uID := ID;
 uFlags := Flags;
 hIcon := Icon;
 lstrcpyn(szTip, Tip, SizeOf(szTip));
 end;
 Result := Shell_NotifyIcon(NIM_MODIFY, @NID);
end;
function TaskBarDeleteIcon(
 hWindow: THandle;
 ID: Integer): Boolean;
var
 NID: TNotifyIconData;
begin
 FillChar(NID, SizeOf(TNotifyIconData), 0);
 with NID do
 begin
 cbSize := SizeOf(TNotifyIconData);
 Wnd := hWindow;
 uID := ID;
 end;
 Result := Shell_NotifyIcon(NIM_DELETE, @NID);
end;
end.
Source: Взято с http://delphiworld.narod.ru
ID: 01774
Работа с Word через OLE

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics,
 Controls, Forms, Dialogs, Buttons,ComCtrls, ExtCtrls, OleCtnrs;
type
 TForm1 = class(TForm)
 OleContainer1: TOleContainer;
 Panel1: TPanel;
 StatusBar1: TStatusBar;
 mbLoad: TSpeedButton;
 mbPrint: TSpeedButton;
 OpenDialog1: TOpenDialog;
 procedure mbLoadClick(Sender: TObject);
 procedure mbPrintClick(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.mbLoadClick(Sender: TObject);
begin
 // Покажем диалог, и если он отработал, то загрузим в контейнер
 if OpenDialog1.Execute and (OpenDialog1.FileName <> ) then
 OleContainer1.CreateObjectFromFile(OpenDialog1.FileName, False);
 // Если загрузилось что-нибудь, то покажем
 if OleContainer1.State <> osEmpty then
 OleContainer1.DoVerb(ovShow);
end;
procedure TForm1.mbPrintClick(Sender: TObject);
var
 V: Variant;
begin
 if OleContainer1.State = osEmpty then
 begin
 MessageDlg('OLE не загружен !!', mtError, [mbOk], 0);
 exit;
 end;
 // Получаем объект, который воплощает в себе WordBasic интерфейс
 V := OleContainer1.OleObject.Application.WordBasic;
 // Командуем до одурения ....
 V.FilePrint;
end;
end.
Source: http://blackman.wp-club.net/
ID: 04409
Category:COM
Category:MS Office
Работа с большими массивами.

=== Работа с большими массивами. ===
Распределите память кучи с помощью GetMem. Если вы имеете:
var a, b: array[0..30000]: Integer;
то попробуйте: 
type TBigArray = array[0..30000] of Integer;
var a, b: ^TBigArray;
и во внешнем блоке сделайте:
GetMem(a, SizeOf(TBigArray));
GetMem(b, SizeOf(TBigArray));
Также необходимо применять указатели на память вместо ссылок, например взамен:
a[0] := xxx; 
необходимо использовать
a^[0] := xxx; 
Сборник Kuliba
Source: Взято из Советов по Delphi от Валентина Озерова
ID: 00242
----
Заставить Delphi работать с достаточно большим массивом данных 
procedure TForm1.Button1Click(Sender: TObject);
 type
 TMyRec = record
 i1, i2, i3: Integer;
 end;
 TMyArr = array[1..20000000] of TMyRec;
 PMyArr=^TMyArr;
var
 A: PMyArr;
begin
 GetMem(A, SizeOf(TMyArr));
 A^[1].i1 := 100;
 ShowMessage('Ok' + IntToStr(A^[1].i1));
 FreeMem(A);
end;
Source: http://delphiworld.narod.ru
ID: 00788
----
В 16-битной версии Delphi нельзя сделать это непосредственно. В новой, 32-битной версии, это как-то можно сделать, но за два месяца колупания я так и не понял как. (Некоторые бета-тестеры знают как. Не могли бы они сообщить нам всю подноготную этого дела?) 
В 16-битной версии Delphi вам необходимо работать с блоками по 32K или 64K и картой. Вы могли бы сделать приблизительно следующее:
type
 chunk: array[0..32767] of byte;
 pchunk: ^chunk;
var
 BigArray: array[0..31] of pChunk;
Для создания массива:
for i := 0 to high(bigArray) do
 new(bigArray[i]);
Для получения доступа к n-ному байту в пределах массива (n должен иметь тип longint):
bigArray[n shr 15]^[n and $7FFF] := y;
x := bigArray[n shr 15]^[n and $7fff];
Это даже осуществляет проверку выхода за границы диапазона, если вы установили в ваших настройках опцию "range checking"! 
n должен находиться в диапазоне [0..32*32*1024] = [0..1024*1024] = [0..1048576]. 
Для освобождения массива после его использования необходимо сделать следующее:
for i := 0 to high(bigArray) do
 dispose (bigArray[i]);
Примечание от Vit: проблемы с большими массивами были актуальны в 16 битных средах (DOS, Windows 3x), когда использовалась сегментированная модель памяти и было затруднительно напрямую адресовать блоки больее 64K, в 32 разрядных системах подобные проблемы возникают значительно реже, при размерах массивов превосходящих 2Gb, что согласитесь даже в современном программировании дело далеко не частое. Для адресации более 2Gb см. статьи по AWE для 32 разрядных систем. 
Source: http://delphiworld.narod.ru
ID: 00789
Работа с листами книги

Есть в VBA одна вещь, которая меня раздражает. Это ActiveSheet и ActiveWorkbook, а также возможность работы с Cells и Range без указания, к какому листу или книге они принадлежат. Одно время я боролся сам с собой, то применяя, то совсем отказываясь от подобных конструкций. Окончательно я отказался от этого лишь после обнаружения многочисленных ошибок в анализе «лога» моего Web-сервера, который я сделал на VBA. Благо, при работе в Delphi нет возможности написать Cells(x, y) = NewValue, подразумевая при этом какой-то неуловимый ActiveSheet. Поэтому прежде, чем работать с отдельными ячейками, я всегда получаю интерфейс на конкретный и вполне осязаемый лист книги. И делю это так:
var ISheet: Excel8TLB._Worksheet;
ISheet := IWorkbook.Worksheets.Item['Лист1'] as Excel8TLB._Worksheet;
Коллекция Worksheet подобна всем остальным коллекциям из Excel TLB. В ней вы можете удалять листы, вставлять новые, изменять их порядок. Но я практически никогда не делаю этого, поэтому всех нетерпеливых снова отсылаю к справке по Excel VBA.
Главную же мысль свою повторю еще раз. Всегда и везде рекомендую работать с ячейками и областями в контексте их листа, получив предварительно интерфейс на этот лист вышеописанным способом. От использования свойств ActiveSheet и ActiveWorkbook можно совсем отказаться, разве что за исключением каких-то особых случаев.
Author: Евгений Старостин
Source: http://www.delphikingdom.ru/
ID: 04383
Category:COM
Category:MS Office
Работа с массивом компонентов

=== Работа с массивом компонентов ===
Часто возникают вопросы о работе с массивом компонентов. Вот пример того как вывести список имен всех компонентов в приложении.
procedure TForm1.Button1Click(Sender: TObject);
var 
 i: Integer;
begin
 ListBox1.Items.Clear;
 for i := 0 to ComponentCount-1 do
 ListBox1.Items.Add(Components[i].Name);
end;
* для поиска конкретного компонента по его имени используйте метод формы - FindComponent.
* для поиска вышестоящего компонента воспользуйтесь функцией - FindGlobalComponent.
Примечание: в Delphi некоторые компоненты сами по себе являются контейнерами компонентов (GroupBox, Panel, PageControl, Form). В этом случае контейнер является родителем этих компонентов (Parent), а форма их владельцем (Owner). Для перехода по дочерних компонентах можно воспользоваться свойством Controls родителя компонентов. А для перехода независимо от родителя - используйте свойство Controls формы.
Смена владельца: свойство Owner - только для чтения, поэтому изменить его нельзя. Владелец устанавливается в ходе создания. Не стоит попросту изменять владельца или имя компонента. Но если есть такая необходимость можно воспользоватся методами: InsertComponent и RemoveComponent самого владельца. Эти методы нельзя применять в обработчике события формы. 
Решение задачи:
procedure ChangeOwner(Component, NewOwner: TComponent);
begin
 Component.Owner.RemoveComponent(Component);
 NewOwner.InsertComponent(Component);
end;
пример использования:
procedure TForm1.ButtonChangeClick(Sender: TObject);
begin
 if Assigned(Button1) then 
 begin
 Button1.Parent := Form2;
 ChangeOwner(Button1.Form2);
 end;
end;
Source: Взято из http://forum.sources.ru
ID: 00359
Работа с печатью в TWebBrowser

{
 TWebBrowser can use native IE API to print and do other things.
 Implement on a Form a TWebBrowser component, and a button to print.
 The code attached to this button is as follow :
}
//--------------------------------------------
procedure TForm.OnClickPrint(Sender: TObject);
begin
 WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER);
end;
//--------------------------------------------
You can replace "OLECMDID_PRINT" by other possibilities :
 OLECMDID_OPEN
 OLECMDID_NEW
 OLECMDID_SAVE
 OLECMDID_SAVEAS
 OLECMDID_SAVECOPYAS
 OLECMDID_PRINT
 OLECMDID_PRINTPREVIEW
 OLECMDID_PAGESETUP
 OLECMDID_SPELL
 OLECMDID_PROPERTIES
 OLECMDID_CUT
 OLECMDID_COPY
 OLECMDID_PASTE
 OLECMDID_PASTESPECIAL
 OLECMDID_UNDO
 OLECMDID_REDO
 OLECMDID_SELECTALL
 OLECMDID_CLEARSELECTION
 OLECMDID_ZOOM
 OLECMDID_GETZOOMRANGE
 OLECMDID_UPDATECOMMANDS
 
 OLECMDID_REFRESH
 OLECMDID_STOP
 OLECMDID_HIDETOOLBARS
 OLECMDID_SETPROGRESSMAX
 OLECMDID_SETPROGRESSPOS
 OLECMDID_SETPROGRESSTEXT
 
 OLECMDID_SETTITLE
 OLECMDID_SETDOWNLOADSTATE
 OLECMDID_STOPDOWNLOAD
 
 OLECMDID_FIND
 OLECMDID_ONTOOLBARACTIVATED
 OLECMDID_DELETE
 
 OLECMDID_HTTPEQUIV
 OLECMDID_ENABLE_INTERACTION
 OLECMDID_HTTPEQUIV_DONE
 
 OLECMDID_ONUNLOAD
 OLECMDID_PROPERTYBAG2
 OLECMDID_PREREFRESH
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03482
Category:Связь
Category:WebBrowser