nyuuzyou/wikis huggingface dataset:
Вывести номер строки и столбца TStringGrid

=== Вывести номер строки и столбца TStringGrid ===
Например, у нас есть таблица с некоторыми данными, и нам необходимо какую-либо запись отредактировать/удалить и т.п. Чтобы не считать, какой это столбец или строка используем следующее: создаем popup menu, прописываем его в форме и создаем соответствующие обработчики событий - это все в файле. На самой таблице жмем правым кликом и edit и перед нами номер строки и столбца. Эти данные пригодятся для создания более интерактивного и дружественного интерфейса ваших приложений. 
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids, Menus;
type
 TForm1 = class(TForm)
 StringGrid1: TStringGrid;
 PopupMenu1: TPopupMenu;
 Edit1: TMenuItem;
 procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
 procedure Edit1Click(Sender: TObject);
 private
 { Private declarations }
 public
 x1, y1: integer;
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);
begin
 form1.x1 := x;
 form1.y1 := y;
end;
procedure TForm1.Edit1Click(Sender: TObject);
var
 Column, Row: Longint;
begin
 StringGrid1.MouseToCell(form1.x1, form1.y1, Column, Row);
 ShowMessage('Строка - ' + IntToStr(row) + #13 + 'Столбец - ' + IntToStr(column));
end;
end.
Source: http://delphiworld.narod.ru/
ID: 01095
Вывести полупрозрачный текст

=== Вывести полупрозрачный текст ===
procedure TForm1.FormPaint(Sender: TObject);
var
 x, y: integer;
 bm: TBitMap;
begin
 Form1.ClientWidth := 200;
 Form1.ClientHeight := 100;
 randomize;
 for x := 0 to 199 do
 for y := 0 to 99 do
 if random(3) = 1 then
 Form1.Canvas.Pixels[x,y] := clGreen
 else
 Form1.Canvas.Pixels[x,y] := clLime;
 bm := TBitMap.Create;
 bm.Width := 200;
 bm.Height := 100;
 with bm.Canvas do
 begin
 Brush.Color := clGreen;
 FillRect(ClipRect);
 Font.name := 'Arial';
 Font.Size := 50;
 Font.Color := clGray;
 Font.Style := [fsBold];
 TextOut((bm.Width - TextWidth('Text')) div 2,
 (bm.Height - TextHeight('Text')) div 2, 'Text');
 end;
 Form1.Canvas.CopyMode := cmSrcPaint;
 Form1.Canvas.CopyRect(bm.Canvas.ClipRect, bm.Canvas,
 bm.Canvas.ClipRect);
 bm.Destroy;
end;
Source: Взято с http://delphiworld.narod.ru
ID: 01942
Вывод даты в нужном формате

=== Вывод даты в нужном формате ===
function CheckDateFormat(SDate: string): string;
var
 IDateChar: string;
 x, y: integer;
begin
 IDateChar := '.,\/';
 for y := 1 to Length(IDateChar) do
 begin
 x := Pos(IDateChar[y], SDate);
 while x > 0 do
 begin
 Delete(SDate, x, 1);
 Insert('-', SDate, x);
 x := Pos(IDateChar[y], SDate);
 end;
 end;
 CheckDateFormat := SDate;
end;
function DateEncode(SDate: string): LongInt;
var
 year, month, day: LongInt;
 wy, wm, wd: LongInt;
 Dummy: TDateTime;
 Check: Integer;
begin
 DateEncode := -1;
 SDate := CheckDateFormat(SDate);
 Val(Copy(SDate, 1, pos('-', SDate) - 1), day, check);
 Delete(Sdate, 1, pos('-', SDate));
 Val(Copy(SDate, 1, pos('-', SDate) - 1), month, check);
 Delete(SDate, 1, pos('-', SDate));
 Val(SDate, year, check);
 wy := year;
 wm := month;
 wd := day;
 try
 Dummy := EncodeDate(wy, wm, wd);
 except
 year := 0;
 month := 0;
 day := 0;
 end;
 DateEncode := (year * 10000) + (month * 100) + day;
end;
ID: 00201
----
Формат даты 
У меня есть неотложная задача: в настоящее время я разрабатываю проект, где я должен проверять достоверность введенных дат с применением маски __/__/____, например 12/12/1997.
Некоторое время назад я делал простой шифратор/дешифратор дат, проверяющий достоверность даты. Код приведен ниже.
function CheckDateFormat(SDate: string): string;
var
 IDateChar: string;
 x, y: integer;
begin
 IDateChar := '.,\/';
 for y := 1 to length(IDateChar) do
 begin
 x := pos(IDateChar[y], SDate);
 while x > 0 do
 begin
 Delete(SDate, x, 1);
 Insert('-', SDate, x);
 x := pos(IDateChar[y], SDate);
 end;
 end;
 CheckDateFormat := SDate;
end;
function DateEncode(SDate: string): longint;
var
 year, month, day: longint;
 wy, wm, wd: longint;
 Dummy: TDateTime;
 Check: integer;
begin
 DateEncode := -1;
 SDate := CheckDateFormat(SDate);
 Val(Copy(SDate, 1, pos('-', SDate) - 1), day, check);
 Delete(Sdate, 1, pos('-', SDate));
 Val(Copy(SDate, 1, pos('-', SDate) - 1), month, check);
 Delete(SDate, 1, pos('-', SDate));
 Val(SDate, year, check);
 wy := year;
 wm := month;
 wd := day;
 try
 Dummy := EncodeDate(wy, wm, wd);
 except
 year := 0;
 month := 0;
 day := 0;
 end;
 DateEncode := (year * 10000) + (month * 100) + day;
end; 
Source: http://delphiworld.narod.ru
ID: 00753
Вывод изображения по маске, используется MackBlt

procedure TForm1.Button1Click(Sender: TObject);
var
 BitmapSrc, BitmapMask: TBitmap;
begin
 BitmapSrc := TBitmap.Create;
 try
 BitmapMask := TBitmap.Create;
 try
 BitmapSrc.LoadFromFile('c:\src.bmp');
 BitmapMask.LoadFromFile('c:\mask.bmp');
 MaskBlt(Canvas.Handle, 0, 0, BitmapSrc.Width, BitmapSrc.Height,
 BitmapSrc.Canvas.Handle, 0, 0, BitmapMask.Handle, 0, 0, MakeROP4(PATCOPY xor PATINVERT, SRCCOPY));
 finally
 BitmapMask.Free;
 end;
 finally
 BitmapSrc.Free;
 end;
end;
Author: Rouse_
Source: http://forum.sources.ru
ID: 03775
Category:Графика
Category:Bitmap
Вывод надписи на рабочий стол

На рабочий стол можно вывести строку используя
TextOut(GetWindowDC(GetDesktopWindow), 100, 100, 'Thom', 4);
Поверх всех окон можно нарисовать надпись использую следующую процедуру:
procedure WriteDC(s: string);
var
 c: TCanvas;
begin
 c := TCanvas.Create;
 try
 c.Brush.Color := clBlue;
 c.Font.color := clYellow;
 c.Font.name := 'Fixedsys';
 c.Handle := GetDC(GetWindow(GetDesktopWindow, GW_OWNER));
 c.TextOut(Screen.Width - c.TextWidth(s) - 2, Screen.Height - 43, s);
 finally
 c.Free;
 end;
end;
Author: Fantasist
Author: Vit
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 03649
Category:Графика
Category:Работа с текстом
Вывод текста на канве картинки

При использовании BitBtn Caption(текст) и картинка(bitmap) из файла не видны одновременно. Почему?
Это может происходить если картинка слишком велика. Класс TBitBtn сначала рисует картинку, а затем выводит текст над, под, слева или справа от картинки (в зависимости от свойства Layout). Если размер картинки такой же как у всей кнопки для вывода текста просто не остается места. Если Вам нужно получить кнопку такого же размера как Ваша картинка и видеть при этом надпись на кнопке Вам придется выводить текст надписи непосредственно на канву картинки.
var
 bm: TBitmap;
 OldBkMode: Integer;
begin
 bm := TBitmap.Create();
 try
 bm.Width := BitBtn1.Glyph.Width;
 bm.Height := BitBtn1.Glyph.Height;
 bm.Canvas.Draw(0, 0, BitBtn1.Glyph);
 OldBkMode := SetBkMode(bm.Canvas.Handle, Transparent);
 bm.Canvas.TextOut(0, 0, 'The Caption');
 SetBkMode(bm.Canvas.Handle, OldBkMode);
 BitBtn1.Glyph.Assign(bm);
 finally
 bm.Free();
 end;
end;
Source: http://delphiworld.narod.ru
ID: 03636
ID: 03659
Category:Графика
Category:Работа с текстом
Вывод текста с эффектами

Как выполнить TextOut с 3D-эффектом или контурным текстом?
Создайте новое приложение и скопируйте текст процедуры ниже в событие формы OnPaint. Результат TextOut будет похож на каллиграфию. Если заменить цикл for в процедуре на одиночный вызов TextOut, то можно использовать данный код для вывода контурного текста. А еще попробуйте разные Canvas.Pen.Style!
procedure TForm1.FormPaint(Sender: TObject);
var
 hFnt: HFONT;
 Fontname, Txt: PChar;
 sze: Size;
 c: Integer;
 byt: Byte;
begin
 Fontname := 'Arial';
 Txt := 'Delphi';
 HFnt := CreateFont(90, 60, 0, 0, FW_BOLD, 0, 0, 0, DEFAULT_CHARSET,
 OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
 PROOF_QUALITY, DEFAULT_PITCH + FF_DONTCARE, Fontname);
 SelectObject(Canvas.Handle, hFnt);
 SetBkMode(Canvas.Handle, TRANSPARENT);
 GetTextExtentPoint32(Canvas.Handle, Txt, Length(Txt), sze);
 BeginPath(Canvas.Handle);
 c := 1;
 for c := 0 to 4 do
 begin
 TextOut(Canvas.Handle, 5 + c, 10 + c, Txt, Length(Txt));
 end;
 EndPath(Canvas.Handle);
 // Canvas.Pen.Style := psDot;
 StrokePath(Canvas.Handle);
 SetBkMode(Canvas.Handle, OPAQUE);
 DeleteObject(SelectObject(Canvas.Handle, GetStockObject(WHITE_BRUSH)));
 SelectObject(Canvas.Handle, GetStockObject(SYSTEM_FONT));
 DeleteObject(hFnt);
end;
Source: http://www.baltsoft.com/
ID: 03651
Category:Графика
Category:Работа с текстом
Вывод шрифтов в списке в виде самих шрифтов

=== Вывод шрифтов в списке в виде самих шрифтов ===
unit Fontlist;
interface
uses
 Windows, Classes, Graphics, Forms, Controls, StdCtrls;
type
 TForm1 = class(TForm)
 ListBox1: TListBox;
 Label1: TLabel;
 FontLabel: TLabel;
 procedure FormCreate(Sender: TObject);
 procedure ListBox1Click(Sender: TObject);
 procedure DrawItem(Control: TWinControl; index: Integer; Rect: TRect;
 State: TOwnerDrawState);
 procedure ListBox1MeasureItem(Control: TWinControl; index: Integer;
 var Height: Integer);
 private
 { Private declarations }
 public
 { Public declarations }
end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
 Listbox1.Items := Screen.Fonts;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
 FontLabel.Caption := ListBox1.Items[ListBox1.ItemIndex];
end;
procedure TForm1.DrawItem(Control: TWinControl; index: Integer;
 Rect: TRect; State: TOwnerDrawState);
begin
 with ListBox1.Canvas do
 begin
 FillRect(Rect);
 Font.name := ListBox1.Items[index];
 Font.Size := 0; // use font's preferred size
 TextOut(Rect.Left+1, Rect.Top+1, ListBox1.Items[index]);
 end;
end;
procedure TForm1.ListBox1MeasureItem(Control: TWinControl; index: Integer;
 var Height: Integer);
begin
 with ListBox1.Canvas do
 begin
 Font.name := Listbox1.Items[index];
 Font.Size := 0; // use font's preferred size
 Height := TextHeight('Wg') + 2; // measure ascenders and descenders
 end;
end;
end.
Source: Взято с http://delphiworld.narod.ru
ID: 01925
Выводим цветной текст на форме под любым углом

=== Выводим цветной текст на форме под любым углом ===
Пример демонстрирует вывод теста случайным образом на форме под определённым углом. Добавляем в форму компонент TButton и в событие OnClick следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
 LogFont: TLogFont;
 Font: THandle;
 Count: Integer;
begin
 LogFont.lfHeight := 20;
 LogFont.lfWidth := 20;
 LogFont.lfWeight := 750;
 LogFont.lfEscapement := -200;
 LogFont.lfCharset := 1;
 LogFont.lfOutPrecision := out_tt_precis;
 LogFont.lfQuality := draft_quality;
 LogFont.lfPitchAndFamily := FF_Modern;
 Font := CreateFontIndirect(LogFont);
 SelectObject(Form1.Canvas.Handle, Font);
 SetTextColor(Form1.Canvas.Handle, rgb(0, 0, 200));
 SetBKmode(Form1.Canvas.Handle, transparent);
 for Count := 1 to 100 do
 begin
 Canvas.TextOut(Random(Form1.Width), Random(Form1.Height), 'Hello');
 SetTextColor(Form1.Canvas.Handle, rgb(Random(255), Random(255), Random(255)));
 end;
 DeleteObject(Font);
end;
Source: Взято из http://forum.sources.ru
ID: 00419
Выводить текст с помощью DBMS OUTPUT.PUT LINE в режиме отладки

=== Выводить текст с помощью DBMS_OUTPUT.PUT_LINE в режиме отладки ===
Эта функция используется действительно только для отладки. Для того, чтобы результаты ее работы были видны из SQL Plus, необходимо в нем выдать команду:
 set serveroutput on size 10000;
Author: Nomadic
Source: http://delphiworld.narod.ru/
ID: 02739
Выделение некоторых узлов другим шрифтом

=== Выделение некоторых узлов другим шрифтом ===
uses 
 CommCtrl; 
procedure SetNodeBoldState(Node: TTreeNode; Value: Boolean); 
var 
 TVItem: TTVItem; 
begin 
 if not Assigned(Node) then Exit; 
 with TVItem do 
 begin 
 mask := TVIF_STATE or TVIF_HANDLE; 
 hItem := Node.ItemId; 
 stateMask := TVIS_BOLD; 
 if Value then state := TVIS_BOLD 
 else 
 state := 0; 
 TreeView_SetItem(Node.Handle, TVItem); 
 end; 
end; 
// Example: Make the first node bold. 
// Beispiel: Erster Eintrag fett machen. 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
 SetNodeBoldState(TreeView1.Items[0], True); 
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01127
----
uses CommCtrl;
procedure SetNodeState(node: TTreeNode; Flags: Integer);
var
 tvi: TTVItem;
begin
 FillChar(tvi, Sizeof(tvi), 0);
 tvi.hItem := node.ItemID;
 tvi.mask := TVIF_STATE;
 tvi.stateMask := TVIS_BOLD or TVIS_CUT;
 tvi.state := Flags;
 TreeView_SetItem(node.Handle, tvi);
end;
// И вызываем: 
SetNodeState(TreeView1.Selected, TVIS_BOLD); // Текст жиpным
SetNodeState(TreeView1.Selected, TVIS_CUT); // Иконкy бледной (Ctrl+X)
SetNodeState(TreeView1.Selected, TVIS_BOLD or TVIS_CUT); // Текст жиpным
SetNodeState(TreeView1.Selected, 0); // Ни того, ни дpyгого
Source: http://delphiworld.narod.ru/
ID: 01128
Выделение подстроки по контексту

=== Выделение подстроки по контексту ===
Вот 2 функции которыми я очень часто пользуюсь - они выделяют из строки подстроку, которая находится до или после ключевого словаю Задача надо сказать частая, например есть строка:
"Total-2.00$"
Нижеприведенные функции позволяют выделить из строки логические элементы:
function GetBefore(substr, str:string):string;
begin
 if Pos(substr, str) > 0 then
 Result := Copy(str, 1, Pos(substr, str)-1)
 else
 Result := ;
end;
function GetAfter(substr, str: string): string;
begin
 if Pos(substr, str)>0 then
 Result := Copy(str, Pos(substr, str) + Length(substr), Length(str))
 else
 Result := ;
end;
Примеры:
1) Найти название параметра (оно находится до символа "-"):
GetBefore('-', 'Total-2.00$') // Результат будет "Total"
2) Найти сумму денег (оно находится после символа "-"):
GetAfter('-', 'Total-2.00$') // Результат будет "2.00$"
3) Найти сумму денег без знака доллара и остатка строки(оно находится после символа "-", но до символа "$"):
GetBefore('$', GetAfter('-', 'Total-2.00$ (общая сумма)') // Результат будет "2.00"
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
ID: 00855
Выделить все поля в TDBGrid?

=== Выделить все поля в TDBGrid? ===
function GridSelectAll(Grid: TDBGrid): Longint;
begin
 Result := 0;
 Grid.SelectedRows.Clear;
 with Grid.DataSource.DataSet do
 begin
 First;
 DisableControls;
 try
 while not EOF do
 begin
 Grid.SelectedRows.CurrentRowSelected := True;
 Inc(Result);
 Next;
 end;
 finally
 EnableControls;
 end;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 GridSelectAll(DBGrid1);
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 03035
Category:Базы данных
Category:DBGrid
Выделить строку в Memo

=== Выделить строку в Memo ===
procedure TfrmMain.Memo1Click(Sender: TObject); 
var 
 Line: Integer; 
begin 
 with (Sender as TMemo) do 
 begin 
 Line := Perform(EM_LINEFROMCHAR, SelStart, 0); 
 SelStart := Perform(EM_LINEINDEX, Line, 0); 
 SelLength := Length(Lines[Line]); 
 end; 
end;
Source: http://delphiworld.narod.ru/
ID: 00989
Выделять узел TTreeView правой кнопкой мыши

=== Выделять узел TTreeView правой кнопкой мыши ===
procedure TForm1.TreeView1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
var
 tmpNode: TTreeNode;
begin
 tmpNode := (Sender as TTreeView).GetNodeAt(MousePos.X, MousePos.Y);
 if tmpNode <> nil then
 TTreeView(Sender).Selected := tmpNode;
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01112
Вызвать функцию по имени

=== Вызвать функцию по имени ===
есть такой способ вызова функций по имени, если они совпадают по сигнатуре:
function TestFunc1(d: Double): Integer;
begin
 //....
end;
function TestFunc2(d: Double): Integer;
begin
 //....
end;
exports 
 TestFunc1,
 TestFunc2;
procedure TForm1.Button1Click(Sender: TObject);
var
 Func: function (d: Double): Integer;
begin
 @Func := GetProcAddress(hInstance, PChar(Edit1.Text));
 if @Func = nil then 
 raise Exception.CreateFmt('Функция с именем "%s" не существует', [Edit1.Text]);
 ShowMessage(IntToStr(Func(10.63)));
end;
Author: jack128
ID: 00086
Вызов C-шной функции с переменным числом параметров

=== Вызов c-шной функции с переменным числом параметров ===
Комментарий к статье по поводу wsprintf 
Сама по себе статья вызывает мало интереса, кроме того, что поднята интересная проблема - вызов с-шной функции с переменным числом параметров. В ответах с использованием массивов вообще, IMHO, ошибка - на стек попадет адрес массива, а в с это совсем не то. Но решение проблемы существует, правда надо ручками повозиться со стеком. Приводимая ниже функция на скорую руку переделывается из работающей в реальном проекте похожего буфера с-паскаль, но там функция в dll имеет тип вызова cdecl и другие обязательные параметры, в связи с чем возможны "опечатки"
// Пишем функцию-переходник, маскируя с-шные "..." паскалевским
// array of const
function sprintf(out, fmt: Pchar; args: array of const): Integer;
var
 I: Integer;
 BufPtr: Pchar;
 S: string;
 buf: array[0..1024] of char;
begin
 BufPtr := buf;
 // Формируем буфер параметров. Можно, конечно, и прямо на стеке,
 // но головной боли слишком много - проще так
 for I := low(Par) to High(Par) do
 case Par[I].VType of
 vtInteger: // Здесь все просто - 4 байта на стек
 begin
 Integer(Pointer(BufPtr)^) := Par[I].VInteger;
 Inc(BufPtr, 4);
 end;
 vtExtended: // Здесь хуже - слова надо местами поменять :-((
 begin
 Integer(Pointer(BufPtr)^) :=
 Integer(Pointer(Pchar(Par[I].VExtended) + 4)^);
 Inc(BufPtr, 4);
 Integer(Pointer(BufPtr)^) :=
 Integer(Pointer(Par[I].VExtended)^);
 Inc(BufPtr, 4);
 end;
 vtPChar: // Здесь тоже все хорошо - 4 байта
 begin
 Pointer(Pointer(BufPtr)^) := Par[I].VPchar;
 Inc(BufPtr, 4);
 end;
 vtString, vtAnsiString: // А здесь во избежание чудес надо
 // копию строки снять
 begin
 if Par[I].VType = vtString then
 S := Par[I].VString^
 else
 S := string(Par[I].VAnsiString);
 Pointer(Pointer(BufPtr)^ :=
 StrPCopy(StrAlloc(Length(S) + 1), S);
 Inc(BufPtr, 4);
 end;
 end;
 // Поддержку других типов доделывать самостоятельно,
 // вооружившись толковым пособием по с и ассемблеру
 I := (BufPtr - buf) div 4; // Сколько раз на стек слово положить
 asm
 push dword ptr [out]
 push dword ptr [fmt]
 mov ecx, dword ptr [i]
 mov eax, dword ptr [buf] // stdcall - параметры в прямом
 // порядке
 @@1:
 push dword ptr [eax]
 add eax, 4
 loop @@1
 call [wsprintf]
 mov dword ptr [Result], eax // Сохранить результат
 mov eax, dword ptr [i] // Привести в порядок стек
 shl eax, 2
 add eax, 8
 add esp, eax
 end;
 // Почистить строки
 for I := low(Par) to High(Par) do
 case Par[I].VType of
 vtInteger: Inc(BufPtr, 4);
 vtExtended: Inc(BufPtr, 8);
 vtPChar: Inc(BufPtr, 4);
 vtString, vtAnsiString:
 begin
 StrDispose(PChar(PPointer(BufPtr)^));
 Inc(BufPtr, 4);
 end;
 end;
end;
В таком виде методика уже имеет смысл. Изменения при типах вызова cdecl / pascal понятны. 
Source: Взято с http://delphiworld.narod.ru
ID: 00292
Вызов процедуры, имя которой содержится в переменной

=== Вызов процедуры, имя которой содержится в переменной ===
Как я могу вызвать процедуру, чье имя хранится в таблице, списке, и т.п.? Другими словами, я хочу сохранить имя процедуры в переменной и для ее вызова обращаться к значению этой переменной. Какие предложения? 
unit ProcDict;
interface
type MyProc = procedure(s: string);
procedure RegisterProc(procName: string; proc: MyProc);
procedure ExecuteProc(procName: string; arg: string);
implementation
uses Classes;
var ProcDict: TStringList;
procedure RegisterProc(procName: string; proc: MyProc);
begin
 ProcDict.AddObject(procName, TObject(@proc));
end;
procedure ExecuteProc(procName: string; arg: string);
var
 index: Integer;
begin
 index := ProcDict.IndexOf(ProcName);
 if index >= 0 then
 MyProc(ProcDict.objects[index])(arg);
 // Можно вставить обработку исключительной ситуации - сообщение об ошибке
end;
initialization
 ProcDict := TStringList.Create;
 ProcDict.Sorted := true;
finalization
 ProcDict.Free;
end.
вы могли бы создать StringList как показано ниже:
StringList := TStringList.Create;
StringList.AddObject('Proc1', @Proc1);
StringList.AddObject('Proc2', @Proc2); 
и затем реализовать это в вашей программе:
var
 myFunc: procedure;
begin
 if StringList.IndexOf(S) = -1 then
 MessageDlg('Не понял процедуру ' + S, mtError, [mbOk], 0)
 else
 begin
 @myFunc := Stringlist.Objects[StringList.IndexOf(S)];
 myFunc();
 end;
Author: RAM 
Source: из Советов по Delphi от Валентина Озерова, Сборник Kuliba
ID: 00113
Выключение кнопок в DBNavigator

=== Выключение кнопок в DBNavigator ===
{ Расширение DBNavigator: позволяет разработчику включать и выключать
отдельные кнопки через методы EnableButton и DisableButton }
unit GNav;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls,
 Forms, Dialogs, ExtCtrls, DBCtrls;
type
 TMyNavigator = class(TDBNavigator)
 public
 procedure EnableButton(Btn: TNavigateBtn);
 procedure DisableButton(Btn: TNavigateBtn);
 end;
procedure Register;
implementation
procedure TMyNavigator.EnableButton(Btn: TNavigateBtn);
begin
 Buttons[Btn].Enabled := True;
end;
procedure TMyNavigator.DisableButton(Btn: TNavigateBtn);
begin
 Buttons[Btn].Enabled := False;
end;
procedure Register;
begin
 RegisterComponents('Samples', [TMyNavigator]);
end;
end.
Source: Взято с http://delphiworld.narod.ru
ID: 03083
Category:Базы данных
Category:DBNavigator
Выключение питания ATX коpпуса из-под DOS

=== Выключение питания ATX коpпуса из-под DOS ===
mov ax,5301h
sub bx,bx
int 15h
jb stop
mov ax,530eh
sub bx,bx
int 15h
jb stop
mov ax,5307h
mov bx,0001h
mov cx,0003h
int 15h
stop: int 20h
 Код прислал Колесников Сергей Александрович 
 Сборник Kuliba
Source: Взято из Советов по Delphi от Валентина Озерова
ID: 01686
Выключить монитор

=== Выключить монитор ===
procedure TForm1.Button3Click(Sender: TObject);
begin
 MessageDlg('Уже поздно. Будь послушным мальчиком. '+
 'Туши свет и вали спать!', mtInformatoion, [mbOk], 0);
 SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);
end;
Для того, чтобы программно включить монитор можете использовать следующий код: 
procedure TForm1.Button3Click(Sender: TObject);
begin
 SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);
end;
Source: http://delphiworld.narod.ru/
ID: 01459
Выполнение процедуры по адресу

=== Выполнение процедуры по адресу ===
var F: procedure(x, y: double);
 @F := GetProcAddress(hDLL, 'SOMEPROC');
 F(3, 4);
Ключом здесь является использование оператора @, располагаемого с левой части процедурной переменной. Он говорит компилятору: "Не волнуйтесь здесь о совместимости типов, просто присвойте полученный в правой части выражения адрес переменной в левой части выражения (и процедурные переменные являются переменными-указателями).
Author: Peter Below
Source: из Советов по Delphi от Валентина Озерова, Сборник Kuliba
ID: 00116