nyuuzyou/wikis huggingface dataset:
Рисование на минимизированной иконке

=== Рисование на минимизированной иконке ===
Есть ли у кого пример рисования на иконке минимизированного приложения с помощью Delphi? 
Когда Delphi-приложение минимизировано, иконка, которая вы видите - реальное главное окно, объект TApplication, поэтому вам необходимо использовать переменную Application. Таким образом, чтобы удостовериться что приложение минимизировано, вызовите IsIconic(Application.Handle). Если функция возвратит True, значит так оно и есть. Для рисования на иконке создайте обработчик события Application.OnMessage. Здесь вы можете проверять наличие сообщения WM_Paint и при его нахождении отрисовывать иконку. Это должно выглядеть приблизительно так:
 { private declarations }
 procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean);
procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
var
 DC: hDC;
 PS: TPaintStuff;
begin
 if (Msg.Message = WM_PAINT) and IsIconic(Application.Handle) then
 begin
 DC := BeginPaint(Application.Handle, PS);
 { осуществляем отрисовку с помощью вызовов Windows GDI }
 EndPaint(Application.Handle, PS);
 Handled := True;
 end;
end;
procedure TForm1.OnCreate(Sender: TObject);
begin
 Application.OnMessage := AppOnMessage;
end;
Код создан на основе алгоритма Neil Rubenking.
Source: http://delphiworld.narod.ru/
ID: 01793
Рисование текста в DBGrid

=== Рисование текста в DBGrid ===
Следующий метод может быть использован в качестве обработчика события TDBGrid.OnDrawDataCell. Он демонстрирует способ рисования текста в колонке цветом, отличным от цвета текста в остальной части табличной сетки.
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect:
 TRect; Field: TField; State: TGridDrawState);
 { ПРИМЕЧАНИЕ: Свойство DefaultDrawing компонента Grid должно быть установлено в False }
begin
 { если имя поля - "NAME" }
 if Field.FieldName = 'NAME' then
 { изменяем цвет шрифта на красный }
 (Sender as TDBGrid).Canvas.Font.Color := clRed;
 { выводим текст в табличной сетке }
 (Sender as TDBGrid).Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Field.AsString);
end;
Source: Взято с http://delphiworld.narod.ru
ID: 03074
----
Для отображения таблицы я использую DBGrid. Для некоторых полей я хочу применить другой шрифт, размер, цвет...
Вам необходимо обработать событие OnDrawDataCell, например так:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const
 Rect: TRect; Field: TField; State: TGridDrawState);
begin
 if Field.FieldName = 'SERIAL' then
 if (Field as TStringField).Value = 'НЕИЗВЕСТНО' then
 with (Sender as TDBGrid).Canvas do
 begin
 Brush.Color := clRed;
 Font.Style := [fsItalic];
 Font.Color := clAqua;
 FillRect(Rect);
 TextOut(Rect.Left, Rect.Top, Field.AsString);
 end;
end;
....BTW, выключите DefaultDrawing.
Source: Взято с http://delphiworld.narod.ru
ID: 03075
Category:Базы данных
Category:DBGrid
Русификация Kylix

;Внимание!: Данная информация устарела! 
В этой статье я решил рассказать тебе, как можно заставить Kylix уважать русский язык. Для этого нужно полностью русифицировать Linux. Это не так уж и сложно и мы сейчас полностью опишем этот процесс.
Для Kylix желательно использовать кодовую страницу KOI-8r, которая является практически стандартом русского языка в Linux. Для того, чтобы Kylix мог понимать русские шрифты, нужно сделать следующее:
1. Открыть файл /etc/sysconfig/i18n и добавить в него следующие недостающие строки:
 LANG=ru
 LANGUAGE=ru_RU.KOI8-R:ru #опционально
 LC_CTYPE=ru_RU.KOI8-R
 LC_NUMERIC=ru_RU.KOI8-R
 LC_TIME=ru_RU.KOI8-R
 LC_COLLATE=ru_RU.KOI8-R
 LC_MONETARY=ru_RU.KOI8-R
 LC_MESSAGES=ru_RU.KOI8-R
 LC_ALL=ru_RU.KOI8-R
 SYSFONT=UniCyr_8x16
 SYSFONTACM=koi8-r
Если какие-то из этих строк уже есть в файле, то нужно отредактировать существующие.
В системе уже должны быть установлены русские шрифты. В последних дистрибутивах почти всегда идут шрифты Cronyx Cyrillic, которых достаточно для нормальной работы Kylix.
И последнее, что надо сделать - настроить переключение клавиатуры в файле /etc/X11/XF86Config. Там нужно отредактировать следующие строки:
 Option "XkbLayout" "ru(winkeys)"
 Option "XkbOptions" "grp:ctrl_shift_toggle"
Последняя строка показывает как будет переключатся раскладка. В данном случае будет использоваться сочетание клавиш Ctrl+Shift.
Вот и всё!!! Желательно ещё и перегрузить Linux, чтобы он заговорил по-русски.
Source: http://delphi.h5.ru
ID: 04620
Category:Kylix
Category:Linux
Сase для строки

=== Сase для строки ===
const
 vlist = 'первый, второй, третий';
var
 Values: TStringList;
procedure SetValues(VL : TStringList; S: String);
var
 I : Integer;
begin
 VL.CommaText := S;
 for I := 0 to CL.Count-1 do
 VL.Objects[I] := Pointer(I);
 VL.Sorted := True;
end;
function GetValueIndex(VL : TStringList; Match: String): Integer;
begin
 Result := VL.IndexOf(Match);
 if Result >= 0 then
 Result := Integer(VL.Objects[Result]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 case GetValueIndex(Values, Edit1.Text) of
 -1: {не найден} ;
 0: Caption := '0';
 1: Caption := '1';
 2: Caption := '2';
 end;
end;
initialization
 VL := TStringList.Create;
 SetValues(VL, vlist);
finalization
 VL.Free;
Source: http://delphiworld.narod.ru
ID: 00837
Самолет летит по небу

unit aplane_;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ExtCtrls, StdCtrls, Buttons;
type
 TForm1 = class(TForm)
 Timer1: TTimer;
 Image1: TImage;
 procedure FormActivate(Sender: TObject);
 procedure Timer1Timer(Sender: TObject);
 procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
var
 Back, bitmap, Buf: TBitMap; // фон, картинка, буфер
 BackRct: TRect; // область фона, которая должна быть восстановлена из буфера
 BufRct: TRect; // область буфера, которая используется для восстановления фона
 x, y: Integer; // текущее положение картинки
 W, H: Integer; // размеры картинки
procedure TForm1.FormActivate(Sender: TObject);
begin
 // создать три объекта - битовых образа
 Back := TBitmap.Create; // фон
 bitmap := TBitmap.Create; // картинка
 Buf := TBitmap.Create; // буфер
 // загрузить и вывести фон
 Back.LoadFromFile('factory.bmp');
 Form1.Image1.Canvas.Draw(0, 0, Back);
 // загрузить картинку, которая будет двигаться
 bitmap.LoadFromFile('aplane.bmp');
 // определим "прозрачный" цвет
 bitmap.Transparent := True;
 bitmap.TransParentColor := bitmap.Canvas.Pixels[1, 1];
 // создать буфер для сохранения копии области фона,
 // на которую накладывается картинка
 W := bitmap.Width;
 H := bitmap.Height;
 Buf.Width := W;
 Buf.Height := H;
 Buf.Palette := Back.Palette; // Чтобы обеспечить соответствие палитр !!
 Buf.Canvas.CopyMode := cmSrcCopy;
 // определим область буфера, которая будет использоваться
 // для восстановления фона
 BufRct := Bounds(0, 0, W, H);
 // начальное положение картинки
 x := -W;
 y := 20;
 // определим сохраняемую область фона
 BackRct := Bounds(x, y, W, H);
 // и сохраним ее
 Buf.Canvas.CopyRect(BufRct, Back.Canvas, BackRct);
end;
// обработка сигнала таймера
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 // восстановлением фона (из буфера) удалим рисунок
 Form1.Image1.Canvas.Draw(x, y, Buf);
 x := x + 2;
 if x > form1.Image1.Width then
 x := -W;
 // определим сохраняемую область фона
 BackRct := Bounds(x, y, W, H);
 // сохраним ее копию
 Buf.Canvas.CopyRect(BufRct, Back.Canvas, BackRct);
 // выведем рисунок
 Form1.Image1.Canvas.Draw(x, y, bitmap);
end;
// завершение работы программы
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 // освободим память, выделенную
 // для хранения битовых образов
 Back.Free;
 bitmap.Free;
 Buf.Free;
end;
end.
Source: http://delphiworld.narod.ru/
ID: 03757
Category:Графика
Category:Рисование
Самый быстрый способ узнать количество записей в таблице

=== Самый быстрый способ узнать количество записей в таблице ===
When using the standard dataset.recordcount in my client-server (win nt against sqlserver7 db, targettable has 500.000 records) i can go for lunch and stil be waiting (:-
Answer:
For those of you who don't know why u should not use the standard dataset.recordcount when developing client server database applications.
This article is especialy for those cs db apps against a sqlserver 7 db.
* since the standard dataset.recordcount iterates from begin of the table through the end of the table to result in the recordcount. This is a crime when developing cs db apps (against sqlserver7).
* simply use another way of obtaining the number of records. I use a sql for obtaining the number of records in a sqlserver table.
* drop a tquery on the form
* provide this tquery with the follow SQL:
SQL:
SELECT DISTINCT max(itbl.rows)
FROM sysindexes AS itbl
INNER JOIN sysobjects AS otbl ON (itbl.id = otbl.id)
WHERE (otbl.type = 'U') AND (otbl.name = :parTableName)
notice the parameter: parTableName type string
use this tquery to find out how many rows in the table
TIP: try to make your own tYourSqlServerCountQuery and thus override the recordcount property.
ByTheWay: use this only for sqlserver
for other cs db apps simply use a count sql (coming upnext time...)
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 02780
Category:Базы данных
Category:MS SQL Server
Самый продвинутый DBGrid

=== Самый продвинутый DBGrid ===
Самый продвинутый DBGrid можно найти здесь: http://www.ehlib.com
Вот краткое описание, которое дал Петрович:
Для всех работающих с DBGrid да и вообще с DataAware-компонентами, очень рекомендую бесплатную библиотеку EhLib (Сайт разработчика). В ней есть небольшой, но ОЧЕНЬ мощный набор визуальных компонент для работы с БД. В частности DBGridEh в котором реализованы:
* многострочные заголовки,
* сортировка при шелчке по заголовку колонки (включая сортировку по нескольким колонкам),
* инкрементальный поиск,
* фильтрование записей,
* агрегативные функции,
и много других возможностей. Причем все это реализуется для большинства DataSet'ов (BDE, ADO, ...), более того, можно подключить и еще не существующие.
Библиотека бесплатна для росийских пользователей, и включает исходные тексты.
Сам уже полгода пользуюсь, теперь стандартные компоненты страницы DataControl в дельфи мне не нужны!
Author: Петрович
Source: Взято из http://forum.sources.ru
ID: 03034
Category:Базы данных
Category:DBGrid
Сбростить BDE базу данных в XML файл

=== Сбросить BDE базу данных в XML файл ===
procedure CreateXML(Alias: string; XMLName: string);
var
 i, j, x, y: Integer;
 f: TextFile;
 Tables: TStringList;
 Table: TTable;
 function FixValue(Value: string): string;
 var
 n: Integer;
 begin
 Result := ;
 for n := 1 to Length(Value) do
 if Value[n] in ['0'..'9','a'..'z','A'..'Z','.',',','-',' ','/','*',':','{','}','_','@','\','+','%'] then
 Result := Result + Value[n]
 else
 Result := Result + '&#' + IntToStr(Ord(Value[n])) + ';';
 end;
 procedure WriteValue(Indent: Integer; Name, ParamName, ParamValue, Value: string);
 var
 temp: string;
 const
 Empty = ' ';
 begin
 temp := Copy(Empty, 1, Indent);
 temp := temp + '<' + Name;
 if ParamName = then
 temp := temp + '>'
 else
 temp := temp + ' ' + Paramname + '="' + FixValue(ParamValue) + '">';
 Temp := Temp + FixValue(Value) + '</' + Name + '>';
 WriteLn(f, temp);
 end;
 procedure WriteTag(Indent: Integer; Name, ParamName, ParamValue: string; Open: Boolean = True);
 var
 temp: string;
 const Empty = ' ';
 begin
 Temp := Copy(Empty, 1, Indent);
 if Open then
 temp := temp + '<' + Name
 else
 temp := temp + '</' + Name;
 if ParamName = then
 temp := temp + '>'
 else
 temp := temp + ' ' + Paramname + '="' + FixValue(ParamValue) + '">';
 Writeln(f, temp);
 end;
begin
 Tables := TStringList.Create;
 Table := TTable.Create(nil);
 try
 session.GetTableNames(Alias, '*.db', False, False, Tables);
 Table.DatabaseName := Alias;
 AssignFile(f,XMLName);
 Rewrite(f);
 WriteTag(0, Alias, , , True);
 for i := 0 to Tables.Count-1 do
 begin
 Table.Active := False;
 Table.TableName := Tables[i];
 WriteTag(1, Table.tablename, , , True);
 Table.Active := True;
 Table.First;
 for j := 0 to Table.RecordCount-1 do
 begin
 WriteTag(2, 'Rec', , , True);
 for x := 0 to Table.fields.count-1 do
 WriteValue(4, Table.Fields[x].FieldName, , , Table.Fields[x].AsString);
 WriteTag(2, 'Rec', , , False);
 Table.Next;
 end;
 WriteTag(1, Table.TableName, , , False);
 end;
 WriteTag(0, Alias, , , False);
 CloseFile(f);
 finally
 Tables.Free;
 Table.Free;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 CreateXML('MyDatabase', 'c:\XMLFile.xml');
end;
XML формируется в виде
 <MyDatabase>
 <Table1>
 <Rec>
 <Field1>Value1</Field1>
 <Field2>Value2</Field2>
 <Field3>Value3</Field3>
 </Rec>
 <Rec>
 <Field1>Value1</Field1>
 <Field2>Value2</Field2>
 <Field3>Value3</Field3>
 </Rec>
 </Table1>
 <Table2>
 <Rec>
 <Field1>Value1</Field1>
 <Field2>Value2</Field2>
 <Field3>Value3</Field3>
 </Rec>
 <Rec>
 <Field1>Value1</Field1>
 <Field2>Value2</Field2>
 <Field3>Value3</Field3>
 </Rec>
 </Table2>
 </MyDatabase>
Author: Vit
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 03109
Category:Базы данных
Category:XML
Свои настройки Proxy в программе с TWebBrowser

Сразу скажу, что эта статья - маленькая рекомендация тем, кто хочет реализовать возможность работы TWebBrowser в своей программе с настройками Proxy, которые отличаются от стандартных. 
В один прекрасный день мне понадобилось в программе периодически менять Proxy и при этом пользоваться всем, что предоставляет IE. Лучший и единственный выбор - TWebBrowser. При близком знакомстве с ним стало понятно, что через Proxy он работать не может (вернее может, но берет настройки из "Свойств обозревателя"). Перспектива постоянно менять настройки реестра меня не прельщала. И как назло ни в одной крупной конференции не было даже упоминания о возможности настройки Proxy в ходе выполнения программы кроме изменения реестра (может плохо искал).
Перерыв Fido-архивы и конференции Инета наткнулся на win-функцию UrlMkSetSessionOption. Вот к чему привели мои изыскания :
uses urlmon, wininet;
var
 PIInfo: PInternetProxyInfo;
New(PIInfo);
 // Изменение настроек ПРОКСИ
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY ; // Тип доступа в интернет - через Proxy сервер
PIInfo^.lpszProxy := PChar('some.proxy:someport'); // указать прокси напр. 195.43.67.33:8080
PIInfo^.lpszProxyBypass := PChar(); // Список адресов, доступ к которым возможен минуя Proxy сервер
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info), 0);
{...}
Dispose(PIInfo);
Вызывать функцию UrlMkSetSessionOption можно из любого места программы, причем любое количество раз и с разными настройками. 
После вызова функции TWebBrowser будет работать через указанный прокси. Еще раз повторюсь, настройки касаются только текущей сессии (программы на момент выполнения ), общие настройки Windows не изменяются.
Дополнительно:
INTERNET_PROXY_INFO Structure
Contains information that is supplied with the INTERNET_OPTION_PROXY value to get or set proxy information on a handle obtained from a call to the InternetOpen function.
Syntax
typedef struct {
 DWORD dwAccessType;
 LPCTSTR lpszProxy;
 LPCTSTR lpszProxyBypass;
} INTERNET_PROXY_INFO, * LPINTERNET_PROXY_INFO;
Members
* dwAccessType - Unsigned long integer value that contains the access type. This can be one of the following values:
** INTERNET_OPEN_TYPE_DIRECT - Internet accessed through a direct connection.
** INTERNET_OPEN_TYPE_PRECONFIG - Applies only when setting proxy information.
** INTERNET_OPEN_TYPE_PROXY - Internet accessed using a proxy.
* lpszProxy - Address of a string value that contains the proxy server list.
* lpszProxyBypass - Address of a string value that contains the proxy bypass list.
Author: Андрей Попков
Source: http://www.delphikingdom.com
ID: 03480
Category:Связь
Category:WebBrowser
Свойства кнопок DBNavigator

=== Свойства кнопок DBNavigator ===
Как можно узнать значения свойств кнопок компонента DBNavigator (enabled/disabled или видимая/невидимая)?
Для определения видимости вы можете использовать свойство VisibleButtons. Например:
if nbRefresh in DBNavigator1.VisibleButtons then
 ShowMessage('Кнопка Refresh видимая') ;
Для того, чтобы узнать, активизирована (enabled/disabled) кнопка или нет:
{ Вместо nbFirst вы можете определить другой член TNavigateBtn (например, nbFirst, nbPrior,
nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh) }
if DBNavigator1.Controls[Ord(nbFirst)].Enabled then
 ShowMessage('Кнопка First активизирована') ;
Source: Взято с http://delphiworld.narod.ru
ID: 03084
Category:Базы данных
Category:DBNavigator
Свойства шрифта Style и Color в виде строки

=== Свойства шрифта Style и Color в виде строки ===
Как мне получить значение Font.Style и Font.Color в виде строки, я хотел бы присвоить его заголовку компонента Label, но style и color не являются строковыми величинами. 
Есть масса способов это сделать, но я использую следующий способ:
const
 fsTextName: array[TFontStyle] of string[11] = ('fsBold', 'fsItalic', 'fsUnderline', 'fsStrikeOut');
 fpTextName: array[TFontPitch] of string[10] = ('fpDefault','fpVariable','fpFixed');
Позже, в коде, я так использую эти имена:
var
 TFPitch: TFontPitch;
 TFStyle: TFontStyle;
 FString: String;
begin
 FString := ;
 for TFStyle := fsBold to fsStrikeOut do
 if TFStyle in Canvas.Font.Style then
 FString := FString + fsTextName[TFStyle] + ',';
 if FString <> then
 Dec(FString[0]); { убираем лишний разделитель ',' }
 something := FString;
 FString := fpTextName[Canvas.Font.Pitch];
 something := FString;
Примерно также нужно поступить и с именованными цветами типа TColor.
Примечание Vit: Описанный здесь способ относится скорее к тем которые указывают как не надо делать. Эта задача решается намного изящнее здесь:
Как получить строковое значение перечисляемого типа?
Source: Взято с http://delphiworld.narod.ru
ID: 01950
Сворачивает все приложение при сворачивании неглавного окна

=== Сворачивает все приложение при сворачивании неглавного окна ===
{ **** UBPFD *********** by kladovka.net.ru ****
>> Сворачивает все приложение при сворачивании неглавного окна.
Обработчик сообщении. При попытке свернуть окно - сворачивает все приложение. Предназначен для неглавных немодальных окон.
Зависимости: Как у стандартной формы...
Copyright: создано на основе примеров на www.delphimaster.ru
Дата: 17 марта 2004 г.
********************************************** }
// Пишем в Private формы (неглавной);
procedure WMSysCommand(var message: TWMSysCommand); message WM_SysCommand;
// Пишем в тексте программы:
procedure TF_Shop.WMSysCommand(var message: TWMSysCommand);
begin
 if message.CmdType = SC_MINIMIZE then 
 Application.Minimize
 else
 inherited;
end;
Source: kladovka.net.ru
ID: 00446
Связь с personal Oracle

=== Связь с personal Oracle ===
Связаться с Personal Oracle - мудреное дело, но оно оказывается очень простым, если знать как...
* Personal Oracle должен иметь имя сервера (servername) "2:" (два и точка с запятой)
* Сетевой протокол (Net Protocol) ДОЛЖЕН БЫТЬ пустым (т.е. пустым - ничего не содержать)
* Если вы работаете с Personal Oracle версии 7.1, в файле конфигурации сервера должен быть определен ORA71WIN.DLL, в противном случае выберите ora7win.dll
Oracle в сети.... Если вы можете соединиться через sql*dba или sql*plus, то настройки вашего Oracle, вероятно, правильные. Кроме того, поставщик в файле конфигурации должен указывать версию базы данных.
The server name (имя сервера): SQL*Net V.1.x: Protocol (протокол) : Servername (имя сервера) : Database SID
---> например: T:222.122.22.32:DEMO
Помните: Protocol и SID чувствительны к регистру. Протокол T для TCP/IP. (Я не помню остальных, но я могу узнать, если они вам необходимы....). TCP/IP адрес может быть заменен псевдонимом, если правильно сконфигурирован host-файл....
SQL*Net V.2.x: Здесь все сводится к (Oracle) псевдониму. Используйте его как имя сервера (Server Name). Сетевой протокол (Network Protocol) должен отражать используемый протокол (TCP/IP, Named pipes, IPX/SPX и др.)
Author: Knud Andersen
Source: Взято из Советов по Delphi от Валентина Озерова
ID: 02736
Сгенерировать все подмножества данного n-элементного множества (0, .., n-1)

Заведем массив B[0..n] из (n+1) элемента. B[i]=0, если i-ый элемент в подмножество не входит, и B[i]=1 иначе. Т.о. пустому подмножеству будет соответствовать набор из n нулей, а n-элементному подмножеству - набор из n единиц. Тут явно заметна связь подмножества с двоичным представлением числа.
Алгоритм: будем генерировать числа от 0 до 2n-1, находить их двоичное представление, и формировать подмножество из элементов с индексами единичных битов в этом представлении.
Но число 2n-1 может не поместиться в разрядную сетку машины. Поэтому генерацию будем проводить, используя массив B:
Сначала B[i]=0 для всех i, что соответствует пустому подмножеству.
Будем рассматривать массив B как запись двоичного числа
 B[N]...B[1]B[0],
и моделировать операцию сложения этого числа с единицей. При сложении будем просматривать число справа налево заменяя единичные биты нулями до тех пор, пока не найдем нулевой бит, в который занесем 1. Генерация подмножеств заканчивается, как только B[N] = 1
(предыдущая конфигурация была 1...12 = 2n-1).
 while B[N] <> 0 do
 begin
 i := 0; { индекс бита двоичного числа }
 while (B[i] = 1) do
 begin
 B[i] := 0; { моделируем перенос в следующий разряд, }
 i := i+1 { возникающий при сложении }
 end;
 B[i]:=1;
 { Распечатываем индексы единичных элементов массива B
 -новое сгенерированное подмножество }
 for i := 0 to N-1 do
 if B[i] = 1 then Write(i);
 WriteLn; { переход на новую строку при печати }
Source: http://algolist.manual.ru
ID: 04183
Category:Алгоритмы
Сгруппировать свойства наподобие Font

=== Сгруппировать свойства наподобие Font ===
...чтобы сгруппировать свойства наподобие Font, вам необходимо создать наследника (подкласс) TPersistent. Например:
TBoolList = class(TPersistent)
 private
 FValue1: Boolean;
 FValue2: Boolean
 published
 property Value1: Boolean read FValue1 write FValue1;
 property Value2: Boolean read FValue2 write FValue2;
end;
Затем, в вашем новом компоненте, для этого подкласса необходимо создать ivar. Чтобы все работало правильно, вам необходимо перекрыть конструктор.
TMyPanel = class(TCustomPanel)
 private
 FBoolList: TBoolList;
 public
 constructor Create(AOwner: TComponent); override;
 published
 property BoolList: TBoolList read FBoolList write FBoolLisr;
end;
Затем добавьте следующий код в ваш конструктор:
constructor TMyPanel.Create( AOwner: TComponent );
begin
 inherited Create(AOwner);
 FBoolList := TBoolList.Create;
end;
Source: http://delphiworld.narod.ru
ID: 00125
Символы разного цвета в StringGrid

=== Символы разного цвета в StringGrid ===
Ниже представлен юнит, который позволяет поместить текст в String Grid с символами различного цвета:
unit Strgr;
interface
uses
 SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
 Forms, Dialogs, Grids, StdCtrls, DB;
type
 TForm1 = class(TForm)
 StringGrid1: TStringGrid;
 procedure StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
 Rect: TRect; State: TGridDrawState);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
 Rect: TRect; State: TGridDrawState);
const
 CharOffset = 3;
begin
 with StringGrid1.Canvas do
 begin
 Font.Color := clMaroon;
 TextOut(Rect.Left + CharOffset, Rect.Top + CharOffset, 'L');
 Font.Color := clNavy;
 TextOut(rect.left + CharOffset + TextWidth('L'),
 Rect.Top + CharOffset, 'loyd');
 end;
end;
end.
Source: Взято из http://forum.sources.ru
ID: 00597
Симулировать нажатие клавиш для копии и вставки из буфера

=== Симулировать нажатие клавиш для копии и вставки из буфера ===
// Ctrl+C, Strg+C: 
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
// Ctrl+V, Strg+V: 
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01881