nyuuzyou/wikis huggingface dataset:
Как использовать TImageList для рисования прозрачных картинок

Следующий пример демонстрирует, динамическое создание компонента TImageList, используемого для рисования прозрачного битмапа.
procedure TForm1.Button1Click(Sender: TObject);
var
 bm: TBitmap;
 il: TImageList;
begin
 bm := TBitmap.Create;
 bm.LoadFromFile('C:\DownLoad\TEST.BMP');
 il := TImageList.CreateSize(bm.Width, bm.Height);
 il.DrawingStyle := dsTransparent;
 il.Masked := True;
 il.AddMasked(bm, clRed);
 il.Draw(Form1.Canvas, 0, 0, 0);
 bm.Free;
 il.Free;
end;
Source: Взято из http://forum.sources.ru
ID: 03763
Category:Графика
Category:Bitmap
Как использовать WinAPI?

=== Как использовать WinAPI? ===
WinAPI - это те функции которыми управляется работа приложений в Windows. Они являются частью системы, и подгружаются вместе с Windows в библиотеке kernel32.dll.
В Delphi эти функции преимущественно описаны в библиотеке Windows, которая автоматически включается в ваш новый проект. Вы можете открыть эту библиотеку и посмотреть сами. Большая часть VCL - это надстройка над WinAPI.
Для каждого запущенного приложения создается процесс и в этом процессе основной поток (приложение может создавать свои дополнительные потоки - все они будут принадлежать его процессу), а уж потоки создают окна. Каждый поток имеет уникальный числовой идентификатор называемый ThreadID. Это просто целое число которое дается (ассоциируется) этому потоку. Точно так же имеет свой уникальный идентификатор каждое окно в системе, называемый Handle. Он обозначается обычно типом HWND, но это просто целое. 4-х байтное.
В Windows взаимодействие построено на сообщениях. Сообщение - это небольшой набор данных (record, условно говоря), который содержит:
* Handle - Handle окна, которому сообщение предназначается.
* Message - целое число, которое указывает, что же это за сообщение. Для системных сообщений определены константы типа WM_KEYPRESSED, WM_MOUSEMOVE и т. д. Их значение(числовое) совершенно никого не интересует однако его легко узнать: ShowMessage('WM_MOUSEMOVE: '+IntToStr(WM_MOUSEMOVE));
* wParam - целое, значение зависит от сообщения
* lParaw - целое, значение зависит от сообщения.
Для каждого потока отводиться специальное место в памяти, куда складываются сообщение по мере из поступления - называется это очередью сообщений. Сами окна сообщения не получают - все они складываются в очередь потока. Чтобы достать следующее сообщение, используется функция GetMessage(PeekMessage). Если вы хотите доставить сообщение окну, то проще всего это сделать вызвав DispatchMessage передав в качестве параметра полученное сообщение. Эта функция находит нужное окно в вашем потоке, и вызывает WindowsProc - процедура окна, которое должна обработать это сообщение. Адрес этой процедуры (для каждого окна свой) известен системе - он передается ей во время регистрации окна.
Практически каждое приложение осуществляет цикл обработки сообщений. То есть цикл, который вызывает GetMessage и обрабатывает сообщение (рассылает окнам), пока не попадется сообщение WM_QUIT, после чего приложение должно завершить работу. В Delphi этот цикл представлен в методе Application.Run 
Author: Fantasist
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02011
Category:Статьи
Category:WinAPI
Как использовать format parameter больше одного раза?

=== Как использовать format parameter больше одного раза? ===
Sometimes you probably have written something like this:
s := Format('Hello %s, your name is %s %s', [FirstName, FirstName, LastName]);
(an admittedly stupid example ;-) )
And if you do, you probably found it annoying that you need to specify the FirstName parameter twice, in particular if there are lots of similar lines. But this isn't necessary because you can specify the parameter position to use for the placeholder
in the format string like this:
s := Format('Hello %0:s, your name is %0:s %1:s', [FirstName, LastName]);
Just one more example from a code generator I am currently writing:
TableName := 'Customer';
//...
s := Format(' f%0:sTableAuto := T%0:sTableAuto.Create(f%0:Table);', [TableName]);
which results in
s := ' fCustomerTableAuto := TCustomerTableAuto.Create(fCustmerTable);';
Language: en
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 00157
Как использовать joystick?

=== Как использовать joystick? ===
uses MMSYSTEM; 
var 
 MyJoy: TJoyInfo; 
 ErrorResult: MMRESULT; 
begin 
 ErrorResult := joyGetPos(joystickid1, @MyJoy); 
 if ErrorResult = JOYERR_NOERROR then 
 begin 
 TrackBar1.Position := MyJoy.wypos; 
 TrackBar2.Position := MyJoy.wxpos; 
 RadioButton1.Checked := (MyJoy.wbuttons and joy_button1) > 0; 
 RadioButton2.Checked := (MyJoy.wbuttons and joy_button2) > 0; 
 end 
else 
 case ErrorResult of 
 MMSYSERR_NODRIVER: ShowMessage('No Joystick driver present'); 
 MMSYSERR_INVALPARAM: ShowMessage('Invalid Joystick Paramameters'); 
 JOYERR_UNPLUGGED: ShowMessage('Joystick is Unplugged'); 
 else 
 ShowMessage('Unknown error with Joystick'); 
 end; 
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 01614
----
var
 MyJoy: TJoyInfo;
begin
 JoyGetPos(joystickid1, @MyJoy);
 TrackBar1.Position := MyJoy.wypos;
 TrackBar2.Position := MyJoy.wxpos;
 RadioButton1.Checked := (MyJoy.wbuttons and joy_button1) > 0;
 RadioButton2.Checked := (MyJoy.wbuttons and joy_button2) > 0;
end;
Не забудьте включить MMSYSTEM в список используемых (USES) модулей
Сборник Kuliba
Source: Взято из Советов по Delphi от Валентина Озерова
ID: 01615
Как использовать mouse event() для эмулирования событий мышки?

=== Как использовать mouse_event() для эмулирования событий мышки? ===
Следующий пример демонстрирует использование API функции mouse_event() для эмуляции событий мышки. Когда Button2 нажата, то мышь перемещается на Button1 и щёлкает по ней. Координаты мыши даны в "Mickeys", где 65535 соответствует ширине экрана.
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage('Button 1 clicked');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
 Pt: TPoint;
begin
 { Allow Button2 to repaint it's self }
 Application.ProcessMessages;
 { Получаем координаты центра button 1 }
 Pt.x := Button1.Left + (Button1.Width div 2);
 Pt.y := Button1.Top + (Button1.Height div 2);
 { Преобразуем Pt в координаты экрана }
 Pt := ClientToScreen(Pt);
 { Преобразуем Pt в mickeys }
 Pt.x := Round(Pt.x * (65535 / Screen.Width));
 Pt.y := Round(Pt.y * (65535 / Screen.Height));
 { Перемещаем мышку }
 Mouse_Event(MOUSEEVENTF_ABSOLUTE or
 MOUSEEVENTF_MOVE,
 Pt.x,
 Pt.y,
 0,
 0);
 { Эмулируем нажатие левой кнопки мыши }
 Mouse_Event(MOUSEEVENTF_ABSOLUTE or
 MOUSEEVENTF_LEFTDOWN,
 Pt.x,
 Pt.y,
 0,
 0);
 { Эмулируем отпускание левой кнопки мыши }
 Mouse_Event(MOUSEEVENTF_ABSOLUTE or
 MOUSEEVENTF_LEFTUP,
 Pt.x,
 Pt.y,
 0,
 0);
end;
Source: Взято из http://forum.sources.ru
ID: 01582
Как использовать базу данных BDE не указывая её имени?

=== Как использовать базу данных BDE не указывая её имени? ===
Если база данных находится в той же директории, что и экзешник, то в качестве имени базы можно использовать .\ в поле DatabaseName в TTable
Примечания Vit:
# Если путь другой - то в поле DatabaseName можно прописать путь, например: c:\Program Files\...
# Прописывание пути вместо alias не исключает необходимости использования BDE
Source: Взято из http://forum.sources.ru
ID: 02537
Как использовать верхние и нижние индексы?

=== Как использовать верхние и нижние индексы? ===
RichEdit поддерживает верхние/нижние индексы;
Вот как это делается:
uses RichEdit;
procedure TForm1.Button1Click(Sender: TObject);
var
 CF: TCharFormat;
begin
 cf.cbSize := sizeof(cf);
 cf.dwMask := CFM_OFFSET;
 cf.yOffset := 70; // смещение по y; положительное/отрицательное для смещение верх/вниз
 RichEdit1.Perform(EM_SETCHARFORMAT, SCF_SELECTION, integer(@cf));
end;
 SCF_ALL применить ко всему тексту
 SCF_SELECTION применить к веделенному тексту
 SCF_WORD | SCF_SELECTION применить к выделенным словам
Тем более это работает в rxRichEdit. 
Author: Seti
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00572
----
// yOffset values 
type
 TCharacterFormat = (CFM_Superscript, CFM_Subscript, CFM_Normal);
procedure RE_SetCharFormat(RichEdit: TRichEdit; CharacterFormat: TCharacterFormat);
var
 // The CHARFORMAT structure contains information about 
 // character formatting in a rich edit control. 
 Format: TCharFormat;
begin
 FillChar(Format, SizeOf(Format), 0);
 with Format do
 begin
 cbSize := SizeOf(Format);
 dwMask := CFM_OFFSET;
 // Character offset, in twips, from the baseline. 
 // If the value of this member is positive, 
 // the character is a superscript; 
 // if it is negative, the character is a subscript. 
 case CharacterFormat of
 CFM_Superscript: yOffset := 60;
 CFM_Subscript: yOffset := -60;
 CFM_Normal: yOffset := 0;
 end;
 end;
 // The EM_SETCHARFORMAT message sets character formatting in a rich edit control. 
 // SCF_SELECTION: Applies the formatting to the current selection 
 Richedit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
end;
// Examples: 
// Beispiele: 
// Apply Superscript to the current selection 
// Markierte Zeichen hoch stellen 
procedure TForm1.Button1Click(Sender: TObject);
begin
 RE_SetCharFormat(RichEdit1, CFM_Superscript);
end;
// Apply Subscript to the current selection 
// Markierte Zeichen tief stellen 
procedure TForm1.Button2Click(Sender: TObject);
begin
 RE_SetCharFormat(RichEdit1, CFM_Subscript);
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01027
Как использовать встроенные в Windows иконки в своём приложении?

=== Как использовать встроенные в Windows иконки в своём приложении? ===
Сперва необходимо узнать, константы, которые соответствуют определённым иконкам. Все они определены в API unit (windows.pas) в Delphi:
 IDI_HAND
 IDI_EXCLAMATION
 IDI_QUESTION
Следующий пример рисует иконку вопроса на панели:
var
 DC: HDC;
 Icon: HICON;
begin
 DC := GetWindowDC(Panel1.Handle);
 Icon := LoadIcon(0, IDI_QUESTION);
 DrawIcon(DC, 5, 5, Icon);
 ReleaseDC(Panel1.Handle, DC);
end;
Source: Взято из http://forum.sources.ru
ID: 02350
Как использовать клавишу-акселератор в TTabSheets (TPageControl)

=== Как использовать клавишу-акселератор в TTabSheets (TPageControl) ===
TPageControl, расположенный на закладке Win95 палитры компонентов, в настоящий момент не может работать с акселераторами. Тем не менее, в наших силах создать потомок TPageControl, поддерживающий вышеназванную характеристику. 
В приведенном ниже коде показана реализация такого компонента. Наследник TPageControl осуществляет захват и обработку сообщения CM_DIALOGCHAR. Это позволяет перехватывать комбинации клавиш, которые могут быть акселератороми для данной формы. Обработчик со бытия CMDialogChar использует функцию IsAccel, которая позволяет определить, имеет ли отношение перехваченный код клавиш к акселератору одной из страниц TPageControl. В этом случае делаем страницу активной и передаем ей фокус. 
unit tapage;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics,
 Controls, Forms, Dialogs, ComCtrls;
type
 TAPageControl = class(TPageControl)
 private
 procedure CMDialogChar(var Msg: TCMDialogChar); message CM_DIALOGCHAR;
 end;
procedure Register;
implementation
procedure TAPageControl.CMDialogChar(var Msg: TCMDialogChar);
var
 i: Integer;
 S: string;
begin
 if Enabled then
 for I := 0 to PageCount - 1 do
 if IsAccel(Msg.CharCode, Pages[i].Caption) and
 Pages[I].TabVisible then
 begin
 Msg.Result := 1;
 ActivePage := Pages[I];
 Change;
 Exit; // выход из цикла.
 end;
 inherited;
end;
procedure Register;
begin
 RegisterComponents('Test', [TAPageControl]);
end;
end.
Source: http://delphiworld.narod.ru/
ID: 01177
== См. также ==
* Как использовать клавишу-акселератор в TTabsheets?
Как использовать клавишу-акселератор в TTabsheets?

=== Как использовать клавишу-акселератор в TTabsheets? ===
Как использовать клавишу-акселератор в TTabsheets? Я добавляю клавишу-акселератор в заголовок каждого Tabsheet моего PageControl, но при попытке переключать страницы этой клавишей программа пикает и ничего не происходит. 
Можно перехватить сообщение CM_DIALOGCHAR.
type
 TForm1 = class(TForm)
 PageControl1: TPageControl;
 TabSheet1: TTabSheet;
 TabSheet2: TTabSheet;
 TabSheet3: TTabSheet;
 private
 procedure CMDialogChar(var Msg: TCMDialogChar); message CM_DIALOGCHAR;
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CMDialogChar(var Msg: TCMDialogChar);
var
 i: integer;
begin
 with PageControl1 do
 begin
 if Enabled then
 for i := 0 to PageControl1.PageCount - 1 do
 if ((IsAccel(Msg.CharCode, Pages[i].Caption)) and (Pages[i].TabVisible)) then
 begin
 Msg.Result := 1;
 ActivePage := Pages[i];
 exit;
 end;
 end;
 inherited;
end;
 DELPHI VCL FAQ Перевод с английского
 Подборку, перевод и адаптацию материала подготовил Aziz(JINX)
 специально для Королевства Дельфи
Source: Взято из 
ID: 01160
Как использовать консоль в не-консольном приложении?

=== Как использовать консоль в не-консольном приложении? ===
Для того, чтобы добавить в не-консольное приложение ввод/вывод из консоли, необходимо воспользоваться функциями AllocConsole и FreeConsole.
Пример:
procedure TForm1.Button1Click(Sender: TObject);
var
 s: string;
begin
 AllocConsole;
 try
 Write('Type here your words and press ENTER: ');
 Readln(s);
 ShowMessage(Format('You typed: "%s"', [s]));
 finally
 FreeConsole;
 end;
end;
Source: Взято из http://forum.sources.ru
ID: 02183
----
{
 For implementing console input/output for non-console applications you
 should use the AllocConsole and FreeConsole functions.
 The AllocConsole function allocates a new console for the calling process.
 The FreeConsole function detaches the calling process from its console.
 Example below demonstrates using these functions:
}
procedure TForm1.Button1Click(Sender: TObject);
var
 s: string;
begin
 AllocConsole;
 try
 // Change color attributes
 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
 FOREGROUND_BLUE OR FOREGROUND_GREEN or
 BACKGROUND_RED );
 Write('Type here your words and press ENTER: ');
 Readln(s);
 ShowMessage(Format('You typed: "%s"', [s]));
 finally
 FreeConsole;
 end;
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 02184
Как использовать не установленный шрифт?

=== Как использовать не установленный шрифт? ===
Зарегистрировать шрифт:
AddFontResource('путь к файлу шрифта\\Algerian.ttf');
Label1.Font.Name := "Algerian";
Удалить:
RemoveFontResource('путь к файлу шрифта\\Algerian.ttf');
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01919
Как использовать параметры коммандной строки?

=== Как использовать параметры коммандной строки? ===
* Paramcount - показывает сколько параметров передано
* Paramstr(0) - это имя с путем твоей программы
* Paramstr(1) - имя первого параметра
* Paramstr(2) - имя второго параметра и т.д.
Если ты запускаешь:
 с:\myprog.exe /a -b22 c:\dev
* Paramcount будет равен 3
* Paramstr(0) будет равен с:\myprog.exe
* Paramstr(1) будет равен /a
* Paramstr(2) будет равен -b22
* Paramstr(3) будет равен c:\dev 
Параметр это просто строка, набор букв, выполнить ее нельзя - ты можешь только проверить на наличие строки и если она присутствует, то выполнить какое либо действие, это действие ты должен написать сам, никаких стандартных действий нет.
Например у тебя возможно 3 параметра: 
* "/v" - выдать сообщение
* "/c" - покрасить форму в синий цвет
* "/f" - поменять заголовок формы
if ParamStr(1) = '/v' then
 ShowMessage('Parameter "/v" was found!');
if ParamStr(1) = '/c' then
 Color := clBlue;
if ParamStr(1) = '/f' then
 Caption := 'Parameter "/f" was found';
Поставь этот код на событие формы onActivate, откомпилируй и попробуй запустить программу с одним из 3-х указанных параметров и ты увидишь что произойдет. 
Функция 
type TSysCharSet = set of Char;
Function FindCmdLineSwitch(const Switch: string;
 SwitchChars: TSysCharSet;
 IgnoreCase: Boolean): Boolean; 
Функция определяет, была ли передана приложению в качестве параметра командной строки строка Switch. Параметр IgnoreCase указывает должен ли учитываться регистр. Параметр SwitchChars идентифицирует допустимые символы-разделители (например, "-", "/").
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: http://atrussk.ru/delphi/
ID: 00073
Как использовать переменную для имени процедуры?

=== Как использовать переменную для имени процедуры? ===
Каким образом можно использовать переменную типа String в качестве имени процедуры?
Если все процедуры, которые вы собираетесь вызывать, имеют список с одними и теми же параметрами (или все без параметров), то это не трудно. Для этого необходимы: процедурный тип, соответствующий вашей процедуре, например: 
type
 TMacroProc = procedure(param: Integer); 
 // массив, сопоставляющий имена процедур их адресам во время выполнения приложения: 
 TMacroName = string[32];
 TMacroLink = record
 name: TMacroName;
 proc: TMacroProc;
 end;
 TMacroList = array [1..MaxMacroIndex] of TMacroLink; 
const
 Macros: TMacroList = (
 (name: 'Proc1'; proc: Proc1),
 (name: 'Proc2'; proc: Proc2),
 //...
 ); //интерпретатор функций, типа: 
procedure CallMacro(name: String; param: Integer);
var
 i: Integer;
begin
 for i := 1 to MaxMacroIndex do
 begin
 if CompareText(name, Macros[i].name) = 0 then 
 begin
 Macros[i].proc(param);
 break;
 end;
 end;
end; 
{ Макропроцедуры необходимо объявить в секции Interface модуля или с ключевым словом Far, например: }
procedure Proc1(n: Integer); far;
begin
 //...
end; 
procedure Proc2(n: Integer); far;
begin
 //...
end; 
Source: http://forum.vingrad.ru
ID: 00071
Как использовать проверку грамматики?

{
 If you are using Delphi 2+ and have the ActiveX component TVSSpell, it is very
 simple to add a spell checker to your TMemo applications.
 (Note: Do not use this component with a Rich Edit application because of text
 formatting problems.)
}
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Memo1.Text = then Exit;
 VSSpell1.CheckText := Memo1.Text;
 if VSSpell1.ResultCode = 0 then
 Memo1.Text := VSSpell1.Text;
end;
{
 To distribute a VisualSpeller application you have to include the following
 files:
- VsSpell.HLP
- VSPELL32.OCX
- VSPELL32.DLL
- AMERICAN.VTD
- VSPELL.HLP
}
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 04466
Category:COM
Category:MS Office
Как использовать протокол about?

Перевод материала с сайта members.home.com/hfournier/webbrowser.htm
procedure TForm1.LoadHTMLString(sHTML: String);
var
 Flags, TargetFrameName, PostData, Headers: OleVariant;
begin
 WebBrowser1.Navigate('about:' + sHTML, Flags, TargetFrameName, PostData, Headers)
end;
Source: http://blackman.km.ru/myfaq/cont4.phtml
ID: 03451
Category:Связь
Category:WebBrowser
Как использовать протокол res?

Перевод материала с сайта members.home.com/hfournier/webbrowser.htm
Протокол "res:" позволяет просмотреть HTML файл, сохранённый как ресурс.
Более подробная информация доступна на Microsoft site:
procedure TForm1.LoadHTMLResource;
var
 Flags, TargetFrameName, PostData, Headers: OleVariant;
begin
 WebBrowser1.Navigate('res://' + Application.ExeName + '/myhtml',
 Flags, TargetFrameName, PostData, Headers);
end;
Создайте файл ресурса (*.rc) со следующими строками и откомпилируйте его при помощи brcc32.exe:
 MYHTML 23 " .\html\myhtml.htm"
 MOREHTML 23 " .\html\morehtml.htm"
Отредактируйте файл проекта, чтобы он выглядел примерно так:
 {$R *.RES}
 {$R HTML.RES} //где html.rc будет скомпилирован в html.res
Source: http://blackman.km.ru/myfaq/cont4.phtml
ID: 03452
Category:Связь
Category:WebBrowser
Как использовать различные шрифты и стили в Memo-объекте?

=== Как использовать различные шрифты и стили в Memo-объекте? ===
Просто создайте собственный TxxxMemo: наследуйтесь от стандартного TMemo и перекройте метод Paint. 
Вот мой старый пример, изменяющий цвет каждой строки:
unit Todrmemo;
interface
uses
 SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
 Forms, Dialogs, StdCtrls;
type
 TOwnerDrawMemo = class(TMemo)
 private
 { Private declarations }
 procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
 end;
procedure Register;
implementation
procedure TOwnerDrawMemo.WMPaint(var Message: TWMPaint);
var
 Buffer: array[0..255] of Char;
 PS: TPaintStruct;
 DC: HDC;
 i: Integer;
 X, Y, Z: Word;
 OldColor: LongInt;
begin
 DC := Message.DC;
 if DC = 0 then
 DC := BeginPaint(Handle, PS);
 try
 X := 1;
 Y := 1;
 SetBkColor(DC, Color);
 SetBkMode(DC, Transparent);
 OldColor := Font.Color;
 for i := 0 to Pred(Lines.Count) do
 begin
 if odd(i) then
 SetTextColor(DC, clRed)
 else
 SetTextColor(DC, OldColor);
 Z := Length(Lines[i]);
 StrPCopy(Buffer, Lines[i]);
 Buffer[Z] := #0; { реально не нужно }
 TextOut(DC, X, Y, Buffer, Z);
 Inc(Y, abs(Font.Height));
 end;
 finally
 if Message.DC = 0 then
 EndPaint(Handle, PS);
 end;
end;
procedure Register;
begin
 RegisterComponents('Dr.Bob', [TOwnerDrawMemo]);
end;
end.
Source: http://delphiworld.narod.ru/
ID: 00986
Как использовать ресурсы?

{
 To create resource files (*.res) for Kylix you can use the Delphi
 brcc32.exe resource compiler.
 Take a look at ;http://www.swissdelphicenter.ch/en/showcode.php?id=1049
 Kylix dont support userdefined resourcetypes. Therefore you have to define
 all resources without a predefined ResType as RCDATA.
 Example with TResourceStream
 Saves the resource (in userdefined.res) with the name MYRES1 to the file
 test.txt
}
uses
 SysUtils, Types, Classes, Variants, QGraphics, QControls, QForms, QDialogs,
 QStdCtrls;
type
 TForm1 = class(TForm)
 Button1: TButton;
 procedure Button1Click(Sender: TObject);
 private
 { Private-Deklarationen }
 public
 { Public-Deklarationen }
 end;
var
 Form1: TForm1;
implementation
{$R *.xfm}
{$R userdefined.res}
procedure TForm1.Button1Click(Sender: TObject);
var
 stream: TResourceStream;
begin
 stream := TResourceStream.Create(HInstance, 'MYRES1', RT_RCDATA);
 with TFileStream.Create('test.txt', fmCreate) do begin
 CopyFrom(stream, stream.Size);
 Free;
 end;
end;
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 04615
Category:Kylix
Как использовать свои курсоры?

=== Как использовать свои курсоры? ===
{$R CURSORS.RES}
const
 crZoomIn = 1;
 crZoomOut = 2;
Screen.Cursors[crZoomIn] := LoadCursor(hInstance, 'CURSOR_ZOOMIN');
Screen.Cursors[crZoomOut] := LoadCursor(hInstance, 'CURSOR_ZOOMOUT');
С вашей программой должен быть слинкован файл ресурсов, содержащий соответствующие курсоры или заменить зеленое на конкретное имя файла(он должен также поставляться с программой).
Source: Взято с сайта http://blackman.wp-club.net/
ID: 02320
----
В этой статье вы найдёте несколько способов использования собственных курсоров, в том числе и анимированных. (это файлы с расширением .ani)
Например, у вас есть какой-то файл с расширением .ani и вы хотите его задействовать. Всё, что вам для этого потребуется сделать, это - поместить файл в тот же каталог, где будет ваш exe, а затем написать следующий код, ну, скажем, по нажатию на кнопку:
Screen.Cursors[5] := LoadCursorFromFile('File.ani');
Screen.Cursor := 5;
Здесь используется свойство Cursors глобального объекта Screen. В нём содержится список курсоров, доступных приложению. По индексу в нужную позицию мы загружаем курсор из файла. А затем с помощью свойства Cursor задействуем его.
Если же вы имеете файл ресурсов, тогда дела будут обстоять иначе:
Помещаете этот файл в тот же каталог, что и exe. Затем в модуле объявляем глобальную константу, например после
var
 Form1: TForm1;
Выглядеть это будет примерно так:
var
 Form1: TForm1;
const
 MyConst = 100;
С помощью этой константы мы зарезервируем новую позицию в свойстве Cursors глобального объекта Screen.
После чего подключаем файл ресурсов, т.е. если он у нас называется Cursors.res, тогда после
{$R *.DFM}
{$R Cursors.res}
// Затем, допустим, по нажатию на кнопку пишем код:
Screen.Cursors[MyConst] := LoadCursor(hInstance,'MYCURSOR');
Screen.Cursor := MyConst;
Здесь 'MYCURSOR' - это имя курсора, который нам необходимо загрузить. Обратите внимание, если вы создаёте файл ресурсов самостоятельно, а сделать это можно с помощью утилиты "ImageEditor", вам необходимо в именах курсоров использовать только прописные буквы.
Source: http://delphiworld.narod.ru/
ID: 02321