nyuuzyou/wikis huggingface dataset:
Как быстро нарисовать тень в заданном регионе?

procedure TForm2.DrawShadows(WDepth, HDepth: Integer);
var
 Dst, RgnBox: TRect;
 hOldDC: HDC;
 OffScreen: TBitmap;
 Pattern: TBitmap;
 Bits: array[0..7] of WORD;
begin
 Bits[0] := $0055;
 Bits[1] := $00aa;
 Bits[2] := $0055;
 Bits[3] := $00aa;
 Bits[4] := $0055;
 Bits[5] := $00aa;
 Bits[6] := $0055;
 Bits[7] := $00aa;
 hOldDC := Canvas.Handle;
 Canvas.Handle := GetWindowDC(Form1.Handle);
 OffsetRgn(ShadeRgn, WDepth, HDepth);
 GetRgnBox(ShadeRgn, RgnBox);
 Pattern:=TBitmap.Create;
 Pattern.ReleaseHandle;
 Pattern.Handle:=CreateBitmap(8, 8, 1, 1, @(Bits[0]));
 Canvas.Brush.Bitmap:=Pattern;
 OffScreen := TBitmap.Create;
 OffScreen.Width := RgnBox.Right-RgnBox.Left;
 OffScreen.Height := RgnBox.Bottom-RgnBox.Top;
 Dst := Rect(0, 0, OffScreen.Width, OffScreen.Height);
 OffsetRgn(ShadeRgn, 0, -RgnBox.Top);
 FillRgn(OffScreen.Canvas.Handle, ShadeRgn, Canvas.Brush.Handle);
 OffsetRgn(ShadeRgn, 0, RgnBox.Top);
 // BitBlt работает быстрее CopyRect
 BitBlt(OffScreen.Canvas.Handle, 0, 0, OffScreen.Width, OffScreen.Height,
 Canvas.Handle, RgnBox.Left, RgnBox.Top, SRCAND);
 Canvas.Brush.Color := clBlack;
 FillRgn(Canvas.Handle, ShadeRgn, Canvas.Brush.Handle);
 BitBlt(Canvas.Handle, RgnBox.Left, RgnBox.Top, OffScreen.Width,
 OffScreen.Height, OffScreen.Canvas.Handle, 0, 0, SRCPAINT);
 OffScreen.Free;
 Pattern.Free;
 OffsetRgn(ShadeRgn, -WDepth, -HDepth);
 ReleaseDC(Form1.Handle, Canvas.Handle);
 Canvas.Handle := hOldDC;
end;
Комментарии:
Функция рисует тень сложной формы на форме Form2.
Для определения формы тени используется регион ShadeRgn, который был создан где-то раньше (например в OnCreate). Относительно регионов см. Win32 API.
Author: Титов Игорь Евгеньевич (infos@obninsk.ru)
ID: 03741
Category:Графика
Category:Рисование
Как в ListBox нарисовать Item своим цветом?

=== Как в ListBox нарисовать Item своим цветом? ===
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; 
 Rect: TRect; State: TOwnerDrawState); 
begin 
 with ListBox1 do 
 begin 
 if odSelected in State then 
 Canvas.Brush.Color := clTeal { твой цвет } 
 else 
 Canvas.Brush.Color := clWindow; 
 Canvas.FillRect(Rect); 
 Canvas.TextOut(Rect.Left+2, Rect.Top, Items[Index]); 
 end; 
end; 
Hе забудьте установить свойство Style у своего ListBox в lbOwnerDrawFixed или в 
lbOwnerDrawVariable.
Source: Взято из http://forum.sources.ru
ID: 00653
Как в TBlobField загрузить картинку из переменной типа TBitmap?

=== Как в TBlobField загрузить картинку из переменной типа TBitmap? ===
1) LoadFromStream / SaveToStream
2) TBlobField.Assign
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02463
Как в TDBGrid pазpешить только опеpации UPDATE записей

=== Как в TDBGrid pазpешить только опеpации UPDATE записей ===
А я делаю так. На DataSource, к которому прицеплен Grid, вешаю обработчик на событие OnStateChange. Ниже текст типичного обратчика
if DBGrid1.DataSource.DataSet.State in [dsEdit, dsInsert] then
 DBGrid1.Options := DBGrid1.Options + goRowSelect
else
 DBGrid1.Options := DBGrid1.Options - goRowSelect;
Дело в том, что если у Grid'а стоит опция goRowSelect, то из Grid'а невозможно добавить запись. Ну а когда программно вызываешь редактирование или вставку, то курсор принимает обычный вид и все Ok.
Лучше использовать конструкцию "State in dsEditModes"
Source: Взято с http://delphiworld.narod.ru
ID: 03060
Category:Базы данных
Category:DBGrid
Как в TDBGrid узнать над каким полем висит мышь?

=== Как в TDBGrid узнать над каким полем висит мышь? ===
var
 ScrPt, GrdPt: TPoint;
 Cell: TGridCoord;
begin
 ScrPt := Mouse.CursorPos;
 GrdPt := DBGrid.ScreenToClient(ScrPt);
 Cell := DBGrid.MouseCoord(GrdPt.X, GrdPt.Y);
 // Col := Cell.X;
 // Row := Cell.Y;
end;
type
 THackDBGrid = class(TDBGrid); // для доступа к private методам
var
 FieldText: string;
 DLink: TDataLink;
 OldActiveRec: Integer;
begin
 Cell := DBGrid.MouseCoord(GrdPt.X, GrdPt.Y);
 FieldText := ;
 DLink := THackDBGrid(DBGrid).DataLink;
 if Assigned(DLink) then
 begin
 if (Cell.X < = 0)or(Cell.Y < = 0) then Exit;
 OldActiveRec := DLink.ActiveRecord;
 try
 DLink.ActiveRecord := Cell.Y-1{TitleOffset};
 FieldText := DBGrid.Columns[Cell.X-1{IndicatorOffset}].Field.Text;
 finally
 DLink.ActiveRecord := OldActiveRec;
 end;
 end;
end;
Source: Взято с http://delphiworld.narod.ru
ID: 03058
Category:Базы данных
Category:DBGrid
Как в run-time Action добавить в ActionList?

=== Как в run-time Action добавить в ActionList? ===
var
 NewAction : TAction;
begin
 NewAction := TAction.Create(self);
 NewAction.ActionList := ActionList1;
end; 
Author: Dayana 
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01190
Как в байте информации выделить биты

=== Как в байте информации выделить биты ===
В Delphi используй операцию and, которая возвращает результат побитового умножения. Пример a and $10 - выделить 4-ый бит. Если результат не ноль - бит установлен. 
То же самое, но на ассемблере. Это позволяет достичь максимальной скорости выполнения. 
function GetBites(t, Mask: LongWord): LongWord; 
asm
 mov eax, t;
 and eax, mask;
end;
Эта функция возвращает t and Mask. Если необходимо выполнить сдвиг, то применяется команда shr: 
function ShiftBites(t, Mask: LongWord; shift: byte): LongWord; 
asm
 mov eax, t;
 mov cl, shift;
 shr eax;
 and eax, Mask;
end;
Эта функция возвращает (t shr shift) and Mask. Если же ассемблер не поможет, надо или переделывать алгоритм, или менять компьютер :)) 
Source: http://delphiworld.narod.ru
ID: 00819
Как в консольном приложении можно задать цвет текста?

=== Как в консольном приложении можно задать цвет текста? ===
Цвет Текста задается командой SetTextColor(Color), параметр Color - целое число от 0 до 15.
Вывод текста в указанном месте экрана задается командой GotoXY(X, Y, Text).
* X,Y-координаты экрана.
* Text - переменная типа String.
Ответ 3:
Вот текст модуля, напоминающего про наш любимый ДОС (CRT-like):
unit UffCRT;
// written by Michael Uskoff, Apr 2001, St.Petersburg, RUSSIA
interface
procedure ClrScr;
procedure SetAttr(attr: Word);
function GetAttr: Word;
procedure GotoXY(aX, aY: Integer); // zero-based coords
function WhereX: Integer;
function WhereY: Integer;
implementation
uses Windows;
var
 UpperLeft: TCoord = (X: 0; Y: 0);
 hCon: Integer;
procedure GotoXY(aX, aY: Integer);
var
 aCoord: TCoord;
begin
 aCoord.x := aX;
 aCoord.y := aY;
 SetConsoleCursorPosition(hCon, aCoord);
end;
procedure SetAttr(attr: Word);
begin
 SetConsoleTextAttribute(hCon, attr);
end;
function WhereX: Integer;
var
 ScrBufInfo: TConsoleScreenBufferInfo;
begin
 GetConsoleScreenBufferInfo(hCon, ScrBufInfo);
 Result := ScrBufInfo.dwCursorPosition.x;
end;
function WhereY: Integer;
var
 ScrBufInfo: TConsoleScreenBufferInfo;
begin
 GetConsoleScreenBufferInfo(hCon, ScrBufInfo);
 Result := ScrBufInfo.dwCursorPosition.y;
end;
function GetAttr: Word;
var
 ScrBufInfo: TConsoleScreenBufferInfo;
begin
 GetConsoleScreenBufferInfo(hCon, ScrBufInfo);
 Result := ScrBufInfo.wAttributes;
end;
procedure ClrScr;
var
 fill: Integer;
 ScrBufInfo: TConsoleScreenBufferInfo;
begin
 GetConsoleScreenBufferInfo(hCon, ScrBufInfo);
 fill := ScrBufInfo.dwSize.x * ScrBufInfo.dwSize.y;
 FillConsoleOutputCharacter(hCon, ' ', fill, UpperLeft, fill);
 FillConsoleOutputAttribute(hCon, ScrBufInfo.wAttributes, fill, UpperLeft, fill);
 GotoXY(0, 0);
end;
initialization
 hCon := GetStdHandle(STD_OUTPUT_HANDLE);
end.
Теперь можно творить такое:
uses UffCRT;
begin
 ClrScr;
 SetAttr($1E);
 GotoXY(32, 12);
 Write('Hello, master !');
 ReadLn;
end.
Source: Взято с сайта http://blackman.wp-club.net/
ID: 02185
Как вернуть результат в виде XML?

=== Как вернуть результат в виде XML? ===
В MSSQL 2000 можно в запросе указать выражение FOR XML, в результате чего будет возвращена строка, содержащая XML представление выборки. Например, запрос:
SELECT O.OrderID, O.CustomerID, O.OrderDate,
 O.ShipName, O.ShipAddress, O.ShipCity, O.ShipRegion,
 P.ProductName, OD.UnitPrice, OD.Quantity
 FROM Orders O
 INNER JOIN [Order Details] OD ON O.OrderId = OD.OrderId
 INNER JOIN Products P ON OD.ProductId = P.ProductId
WHERE O.OrderId = '10248'
FOR XML AUTO
Вернет результат:
<O OrderID="10248"
 CustomerID="VINET"
 OrderDate="1996-07-04T00:00:00"
 ShipName="Vins et alcools Chevalier"
 ShipAddress="59 rue de l'Abbaye"
 ShipCity="Reims">
 <P ProductName="Queso Cabrales">
 <OD UnitPrice="14.0000" Quantity="12"/>
 </P>
 <P ProductName="Singaporean Hokkien Fried Mee">
 <OD UnitPrice="9.8000" Quantity="10"/>
 </P>
 <P ProductName="Mozzarella di Giovanni">
 <OD UnitPrice="34.8000" Quantity="5"/>
 </P>
</O>
Возможно как автоматическое форматирование XML результатов запроса, так и задание способа форматирования программистом.
Кроме этого возможно использование XML данных в качестве таблицы в запросе. В качестве примера рассмотрим хранимую процедуру, выдающую данные по заранее неизвестному количеству записей. Идентификаторы записей передаются в неё в виде XML-документа
CREATE PROCEDURE XMLParam
 @Ids VARCHAR(8000)
AS
 DECLARE @idoc int
 EXEC sp_xml_preparedocument @idoc OUTPUT, @Ids
 SELECT O.*
 FROM Orders O
 INNER JOIN OPENXML (@idoc, '/ROOT/Ids', 1) WITH (ID INT) AS T ON
 .OrderId = T.Id
 EXEC sp_xml_removedocument @idoc
GO
Вызов этой процедуры выглядит следующим образом:
DECLARE @S VARCHAR(8000)
SET @S = '<ROOT>
<Ids ID="10250"/>
<Ids ID="10257"/>
<Ids ID="10258"/>
</ROOT>'
EXECUTE XMLParam @S
Очевидно, что соответствующая строка параметров может быть легко построена и клиентским приложением.
Author: Тенцер А. Л.
ID: 02786
----
SELECT * FROM MyTable FOR XML AUTO, ELEMENTS
Author: Vit
Category:Базы данных
Category:MS SQL Server
Как взять URL из окна IE?

== Как получить активный URL из браузера? ==
uses windows, ddeman;
function Get_URL(Servicio: string): String;
var
 Cliente_DDE: TDDEClientConv;
 temp: PChar;
begin
 Result := ;
 Cliente_DDE := TDDEClientConv.Create(nil);
 with Cliente_DDE do
 begin
 SetLink(Servicio, 'WWW_GetWindowInfo');
 temp := RequestData('0xFFFFFFFF');
 Result := StrPas(temp);
 StrDispose(temp); // <<-Предотвращаем утечку памяти
 CloseLink;
 end;
 Cliente_DDE.Free;
end;
procedure TForm1.Button1Click(Sender);
begin
 ShowMessage(Get_URL('Netscape'));
 // или
 ShowMessage(Get_URL('IExplore'));
end;
Author: Song
Source: Vingrad.ru http://forum.vingrad.ru
ID: 03501
ID: 03508
----
Пример показывает, как найти окно Internet Explorer, и захватить из него текущий URL, находящийся в поле адреса IE. В Исходнике используются простые функции win32 api на delphi.
function GetText(WindowHandle: hwnd): string;
var
 TxtLength: Integer;
 buffer: string;
begin
 TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
 TxtLength := TxtLength + 1;
 SetLength(buffer, TxtLength);
 SendMessage(WindowHandle, wm_gettext, TxtLength, LongInt(@buffer[1]));
 Result := buffer;
end;
function GetURL: string;
var
 ie, toolbar, combo, comboboxex, edit: hwnd;
 worker, toolbarwindow: hwnd;
begin
 ie := FindWindow(PChar('IEFrame'), nil);
 worker := FindWindowEx(ie, 0, 'WorkerA', nil);
 toolbar := FindWindowEx(worker, 0, 'rebarwindow32', nil);
 comboboxex := FindWindowEx(toolbar, 0, 'comboboxex32', nil);
 combo := FindWindowEx(comboboxex, 0, 'ComboBox', nil);
 edit := FindWindowEx(combo, 0, 'Edit', nil);
 toolbarwindow := FindWindowEx(comboboxex, 0, 'toolbarwindow32', nil);
 Result := GetText(edit);
{-------------------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(GetURL);
end;
Source: http://forum.sources.ru
ID: 03502
Category:Связь
Category:WebBrowser
Как включить/выключить спикер?

=== Как включить/выключить спикер? ===
Это выключит спикеp:
 SyStemParametersInfo(SPI_SETBEEP, 0, nil, SPIF_UPDATEINIFILE);
Это включит:
 SyStemParametersInfo(SPI_SETBEEP, 1, nil, SPIF_UPDATEINIFILE);
Author: Alexey Lesovik (2:5020/898.15)
Source: Взято из FAQ: Delphi and Windows API Tips'n'Tricks http://www.chat.ru/~olmal
ID: 02259
Как включить/отключить хранитель экрана?

=== Как включить/отключить хранитель экрана? ===
procedure TForm1.Button1Click(Sender: TObject);
begin
 { Turn it off }
 SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);
 { Turn it on }
 SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0);
end;
ID: 02373
Как вместо печати графики использовать резидентный шрифт принтера?

Используйте функцию Windows API - GetStockObject() чтобы получить дескриптор (handle) шрифта по умолчанию устройства (DEVICE_DEFAULT_FONT) и передайте его Printer.Font.Handle.
uses Printers;
procedure TForm1.Button1Click(Sender: TObject);
var
 tm: TTextMetric;
 i: integer;
begin
 if PrintDialog1.Execute then
 begin
 Printer.BeginDoc;
 Printer.Canvas.Font.Handle := GetStockObject(DEVICE_DEFAULT_FONT);
 GetTextMetrics(Printer.Canvas.Handle, tm);
 for i := 1 to 10 do
 begin
 Printer.Canvas.TextOut(100, i * tm.tmHeight +
 tm.tmExternalLeading, 'Test');
 end;
 Printer.EndDoc;
 end;
end;
ID: 03231
Category:Принтер
Category:WinAPI
Как внести изменения в код VCL?

=== Как внести изменения в код VCL? ===
Примечание: внесение изменений в VCL не поддерживается Borland или Borland Developer Support.
- Но если Вы решили сделать это...
Изменения в код VCL никогда не должны вносится в секцию "interface" модуля - только в секцию "implimentation". Наиболее безопасный способ внести изменения в VCL - создать новый каталог названный "исправленный VCL". Скопируйте файл VCL который Вы хотите изменить в этот каталог. Внесите изменения (лучше прокомментировать их) в этот файл. Затем добавьте путь к Вашему каталогу "исправленный VCL" в самое начало "library path". Перезапустите Delphi/C++ Builder и перекомпилируйте Ваш проект. "library path" можно изменить в меню: 
 Delphi 1 : Options | Environment | Library
 Delphi 2 : Tools | Options | Library
 Delphi 3 : Tools | Environment Options | Library
 Delphi 4 : Tools | Environment Options | Library
 C++ Builder : Options | Environment | Library
ID: 00109
Как возвращать сообщения на родном языке компьютера

{
 Call inLanguage like this to get the German text else return english
 if you use different coutntry codes you can do more
}
{############### FGetLanguageSettings ############################
# Author: Walter Verhoeven
# Date: 14.Sep.2000
# Coming From: InLanguage
# Next Event: NONE
# Parameters: NONE
# Objective: See the users regional settings and return Country #number code
# Change:
# DD-MMM-YYYYY ¦Programmer
# 1)
#
########################################################}
function FGetLanguageSettings: Integer;
var
 OutputBuffer: PChar;
 SelectedLCID: LCID; // DWORD constand in Windows.pas
begin
 OutputBuffer := StrAlloc(4); // alocate memory for the PChar
 try
 try
 SelectedLCID := GetUserDefaultLCID;
 GetLocaleInfo(SelectedLCID, LOCALE_ICOUNTRY, OutputBuffer, 3);
 Result := StrToInt(OutputBuffer);
 except
 Result := 49; // german
 Abort;
 end;
 finally
 StrDispose(OutputBuffer); //alway's free the memory alocated
 end;
end;
{############## INLanguage #######################################
# Author: Walter Verhoeven
# Date: .Jun.2000
# Coming From:
# Next Event: FGetLanguageSettings
# Parameters: Eglish and german text
# Objective: provide a method to return
# english or german results based on the
# users window prefered language setting.
# Change:
# DD-MMM-YYYYY ¦Programmer
# 1)
#
##############################################################}
function INLanguage(English, German: string): string;
begin
 case FGetLanguageSettings of
 49: Result := German; // Return the german string
 43: Result := German; // If the PC has a german preferance
 41: Result := German;
 352: Result := German;
 else
 Result := English; // if not german then english
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(Format(INLanguage('My %s English Word',
 'Riesiges %s Software-Angebot'), ['Hopla']));
end;
Source: http://www.swissdelphicenter.ch
ID: 04560
Category:Разработка приложений
Как восстановить индекс Paradox?

=== Как восстановить индекс Paradox? ===
BDE включает функцию для этого - DbiRegenIndexes.
Copyright © 1996 Epsylon Technologies
Source: Взято из FAQ Epsylon Technologies (095)-913-5608; (095)-913-2934; (095)-535-5349
ID: 02629
Как восстановить индексы?

=== Как восстановить индексы? ===
procedure TForm1.Button1Click(Sender: TObject);
begin
 Table.Close;
 Table.Exclusive := True;
 Table.Open;
 DbiRegenIndexes(Table.Handle);
 Table.Close;
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 02630
Как восстановить повреждённую таблицу?

=== Как восстановить повреждённую таблицу? ===
How to recover Data in a damaged Header of DbTables.
(Paradox or Dbase) Tables
If this problem occurs and we have not copies of data.
Paradox can't directly open those damaged Tables so Paradox can't repair those tables.
solution :
T1: the Damaged Table
1- We Have to create an empty Table (T2.Db or T2.Dbf) that have the same structure of damaged table (T1.DB or T1.Dbf).
2- With Dos Prompts or excutable batch File we have to execute this command:
 Copy T2.Db+T1.db T3.Db
or
 Copy T2.Dbf+T1.dbf T3.Dbf
3- Finally with paradox browser we can open T3 Table we have to delete bad records. and copy t3 to t1 table.
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 02962
Category:Базы данных
Category:Paradox
Как восстановить целостность автоинкрементного поля?

=== Как восстановить целостность автоинкрементного поля? ===
Problem/Question/Abstract:
Recently I got unique key violations during insert attempts on a piece of code that used to work (what can go bad, will go bad). I found that the offending field - was actually created by a generator. For some reason the generator returned values that where already in the database.
* how can I display the current value of the generator?
* how can I adjust the value of the generator?
Answer:
See the example (table name is SD_LOAD, generator name is GEN_SD_LOAD).
; Note: You cannot modify the value of the generator inside of a trigger or stored procedure. You only can call the gen_id() function to increment the value in a generator. The SET GENERATOR command will only work outside of a stored procedure or trigger.
 SELECT DISTINCT(GEN_ID(gen_sd_load, 0))FROM sd_load
 set GENERATOR gen_sd_load to 2021819
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 02907
Category:Базы данных
Category:Interbase
Как временно отключить перерисовку окна?

Вызовите функцию WinAPI LockWindowUpdate передав ей дескриптор окна, которое необходимо не обновлять. Передайте ноль в качестве параметра для восстановления нормального обновления.
LockWindowUpdate(Memo1.Handle);
{...}
LockWindowUpdate(0);
ID: 03730
Category:Графика
Как вставить RTF в Word?

uses
 Word_TLB, ActiveX, ComObj;
function GetRTFFormat(DataObject: IDataObject; var RTFFormat: TFormatEtc): Boolean;
var
 Formats: IEnumFORMATETC;
 TempFormat: TFormatEtc;
 pFormatName: PChar;
 Found: Boolean;
begin
 try
 OleCheck(DataObject.EnumFormatEtc(DATADIR_GET, Formats));
 Found := False;
 while (not Found) and (Formats.Next(1, TempFormat, nil) = S_OK) do
 begin
 pFormatName := AllocMem(255);
 GetClipBoardFormatName(TempFormat.cfFormat, pFormatName, 254);
 if (string(pFormatName) = 'Rich Text Format') then
 begin
 RTFFormat := TempFormat;
 Found := True;
 end;
 FreeMem(pFormatName);
 end;
 Result := Found;
 except
 Result := False;
 end;
end;
procedure WriteToMSWord(const RTFText: String);
var
 WordDoc: _Document;
 WordApp: _Application;
 DataObj: IDataObject;
 Formats: IEnumFormatEtc;
 RTFFormat: TFormatEtc;
 Medium: TStgMedium;
 pGlobal: Pointer;
begin
 try
 GetActiveOleObject('Word.Application').QueryInterface(_Application, WordApp);
 except
 WordApp := CoWordApplication.Create;
 end;
 WordApp.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
 WordApp.Visible := True;
 WordDoc := WordApp.ActiveDocument;
 OleCheck(WordDoc.QueryInterface(IDataObject,DataObj));
 GetRTFFormat(DataObj, RTFFormat);
 FillChar(Medium, SizeOf(Medium), 0);
 Medium.tymed := RTFFormat.tymed;
 Medium.hGlobal := GlobalAlloc(GMEM_MOVEABLE, Length(RTFText)+1);
 try
 pGlobal := GlobalLock(Medium.hGlobal);
 CopyMemory(PGlobal, PChar(RTFText), Length(RTFText)+1);
 GlobalUnlock(Medium.hGlobal);
 OleCheck(DataOBJ.SetData(RTFFormat, Medium, True));
 finally
 GlobalFree(Medium.hGlobal);
 ReleaseStgMedium(Medium);
 end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
 WriteToMSWord(Memo1.Text); // may be rtf-formatted text
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 04434
Category:COM
Category:MS Office
Как вставить картинку в Excel

WS это Worksheet (лист таблицы):
WS.Shapes.AddPicture('C:\Pictures\Small.Bmp', EmptyParam, EmptyParam, 10, 160, EmptyParam, EmptyParam);
или
var
 Pics: Excel2000.Pictures; {or whichever Excel}
 Pic: Excel2000.Picture;
 Pic: Excel2000.Shape;
 Left, Top: integer;
begin
 Pics := (WS.Pictures(EmptyParam, 0) as Pictures);
 Pic := Pics.Insert('C:\Pictures\Small.Bmp', EmptyParam);
 Pic.Top := WS.Range['D4', 'D4'].Top;
 Pic.Left := WS.Range['D4', 'D4'].Left;
end;
EmptyParam это особый Variant (описанный в Variants.pas в D6+). Однако, в некоторых версиях Delphi могут быть проблемы. Это должно сработать:
uses
 OfficeXP;
begin
 WS.Shapes.AddPicture('H:\Pictures\Game\Hills.bmp', msoFalse, msoTrue, 10, 160, 100, 100);
end;
Но возможно, что придется использовать TBitmap для определения нужного размера картинки.
Source: Delphi Knowledge Base: http://www.baltsoft.com/
ID: 04385
Category:COM
Category:MS Office
Как вставить картинку в RichEdit?

=== Как вставить картинку в RichEdit? ===
В стандартном RichEdit нельзя, для RichEdit с картинками используйте RichEdit из RxLib или JVCL. 
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00562
----
Ниже представлен пример, который можно применить к RxRichEdit, RichEditEx, RichEdit98, и Microsoft RichTextBox (поставляемый с VB5+) не прибегая к использованию буфера обмена или OLE:
function BitmapToRTF(pict: TBitmap): string;
var
 bi,bb,rtf: string;
 bis,bbs: Cardinal;
 achar: ShortString;
 hexpict: string;
 I: Integer;
begin
 GetDIBSizes(pict.Handle, bis, bbs);
 SetLength(bi, bis);
 SetLength(bb, bbs);
 GetDIB(pict.Handle, pict.Palette, PChar(bi)^, PChar(bb)^);
 rtf := '{\rtf1 {\pict\dibitmap ';
 SetLength(hexpict, (Length(bb) + Length(bi)) * 2);
 I := 2;
 for bis := 1 to Length(bi) do
 begin
 achar := Format('%x', [Integer(bi[bis])]);
 if Length(achar) = 1 then
 achar := '0' + achar;
 hexpict[I-1] := achar[1];
 hexpict[I] := achar[2];
 Inc(I,2);
 end;
 for bbs := 1 to Length(bb) do
 begin
 achar := Format('%x',[Integer(bb[bbs])]);
 if Length(achar) = 1 then
 achar := '0' + achar;
 hexpict[I-1] := achar[1];
 hexpict[I] := achar[2];
 Inc(I,2);
 end;
 rtf := rtf + hexpict + ' }}';
 Result := rtf;
end;
А вот пример использования этой функции:
 { SS это TStringStream, RE это TRxRichEdit, а BMP это TBitmap содержащий картинку. }
 SS := TStringStream.Create(BitmapToRTF(BMP));
 RE.PlainText := False;
 RE.StreamMode := [smSelection];
 RE.Lines.LoadFromStream(SS);
 SS.Free;
Source: Взято из http://forum.sources.ru
ID: 00563
Как вставить свой курсор из внешнего файла?

=== Как вставить свой курсор из внешнего файла? ===
Используя процедуру LoadCursorFromFile
var
 h: hcursor;
begin
 h := LoadCursorFromFile('D:\mc.cur');
 Screen.Cursors[1] := h;
 Form1.Cursor := 1;
end;
ID: 02322
----
var h: THandle;
begin
 h := LoadImage(0, 'c:\Cursor.cur', IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE or
 LR_LOADFROMFILE);
 if h = 0 then
 ShowMessage('Cursor not loaded!!!')
 else
 begin
 Screen.Cursors[1] := h;
 Form1.Cursor := 1;
 end;
end;
ID: 02323
----
Этот пример позволяет также использовать анимированные курсоры (*.ani)!
Вот кусок кода для загрузки анимированного курсора, который можно вставить в обработку события активизации формы :
var
 h: THandle;
 name: array[0..255] of Char;
begin
 StrPCopy(name, 'Animcurs.ani');
 h := LoadImage(0, name, IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE or LR_LOADFROMFILE);
 if h <> 0 then
 begin
 Screen.Cursors[1] := h;
 Screen.Cursor := 1;
 end
 else
 Screen.Cursor := crDefault;
end;
Source: Взято с сайта http://blackman.wp-club.net/
ID: 02324