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

=== Как создать вычисляемые поля во время исполнения программы ===
Смотрите книгу "Developing Custom Delphi Components" от Рэя Конопки.
Здесь немного исправленный пример из этой книги -
function TMyClass.CreateCalcField(const AFieldName: string;
 AFieldClass: TFieldClass; ASize: Word): TField;
begin
 Result := FDataSet.FindField(AFieldName); // Field may already exists!
 if Result <> nil then
 Exit;
 if AFieldClass = nil then
 begin
 DBErrorFmt(SUnknownFieldType, [AFieldName]);
 end;
 Result := FieldClass.Create(Owner);
 with Result do
 try
 FieldName := AFieldName;
 if (Result is TStringField) or (Result is TBCDField)
 or (Result is TBlobField) or (Result is TBytesField)
 or (Result is TVarBytesField) then
 begin
 Size := ASize;
 end;
 Calculated := True;
 DataSet := FDataset;
 Name := FDataSet.Name + AFieldName;
 except
 Free; // We must release allocated memory on error!
 raise;
 end;
end;
Author: Nomadic
Source: http://delphiworld.narod.ru/
ID: 02621
Как создать компонент во время выполнения приложения?

=== Как создать компонент во время выполнения приложения? ===
При создании визуальных контролов в runtime, важным моментом является назначение родительских свойств и использование метода SetBounds, чтобы этот контрол стал видимым.
type 
 TForm1 = class(TForm) 
 protected 
 MyLabel: TLabel; 
 procedure LabelClick(Sender: TObject); 
 procedure CreateControl; 
 end; 
procedure TForm1.LabelClick(Sender: TObject); 
begin 
 (Sender as Label).Caption := 'Clicked!'; 
end; 
procedure TForm1.CreateControl; 
var 
 ALeft, ATop, AWidth, AHeight: Integer; 
begin 
 ALeft := 10; 
 ATop := 10; 
 AWidth := 50; 
 AHeight := 13; 
 MyLabel := TLabel.Create(Self); 
 MyLabel.Parent := Self; 
 MyLabel.Name := 'LabelName'; 
 MyLabel.SetBounds(ALeft, ATop, AWidth, AHeight); 
 MyLabel.OnClick := LabelClick; 
end;
Source: http://forum.sources.ru
ID: 00106
Как создать контрол в Run-Time?

=== Как создать контрол в Run-Time? ===
var Butt: TButton;
begin
 Butt := TButton.Create(Self);
 Butt.Parent := Self;
 Butt.Visible := True;
end;
Author: Fantasist
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 00356
Как создать копию произвольного компонента?

=== Как создать копию произвольного компонента? ===
{ Здесь процедура CreateClone, которая создает компонентy ОЧЕНЬ ПОХОЖУЮ на 
входную. С такими же значениями свойств. Присваивается все, кpоме методов. }
 
function CreateClone(Src: TComponent): TComponent; 
var 
 F: TStream; 
begin 
 F := nil; 
 try 
 F := TMemoryStream.Create; 
 F.WriteComponent(Src); 
 RegisterClass(TComponentClass(Src.ClassType)); 
 F.Position := 0; 
 Result := F.ReadComponent(nil); 
 finally 
 F.Free; 
 end; 
end; 
ID: 00111
Как создать круглую форму?

=== Как создать круглую форму? ===
Здесь приведён полный пример того, как создать круглую форму.
Не забудьте создать TButton, чтобы окно можно было закрыть.
unit Unit1; 
interface 
uses 
 Windows, Messages, SysUtils, Classes, Graphics, Controls, 
 Forms, Dialogs, ExtCtrls, Buttons, StdCtrls; 
type 
 TForm1 = class(TForm) 
 Button1: TButton; 
 procedure FormCreate(Sender: TObject); 
 procedure Button1Click(Sender: TObject); 
 private 
 { Private-Deklarationen} 
 procedure CreateParams(var Params: TCreateParams); override; 
 public 
 { Public-Deklarationen} 
 end; 
var 
 Form1: TForm1; 
implementation 
{$R *.DFM} 
{ TForm1 } 
procedure TForm1.CreateParams(var Params: TCreateParams); 
begin 
 inherited CreateParams(Params); 
 { удаляем заголовок и рамку }
 Params.Style := Params.Style or ws_popup xor ws_dlgframe; 
end; 
procedure TForm1.FormCreate(Sender: TObject); 
var 
 FormRgn: hRgn; 
begin 
 {clear form} 
 Form1.Brush.Style := bsSolid; //bsclear; 
 { делаем круг формы } 
 GetWindowRgn(Form1.Handle, FormRgn); 
 { удаляем старый объект } 
 DeleteObject(FormRgn); 
 { делаем прямоугольник формы }
 Form1.Height := 500; 
 Form1.Width := Form1.Height; 
 { создаём круглую форму } 
 FormRgn := CreateRoundRectRgn(1, 1, Form1.Width - 1, 
 Form1.height - 1, Form1.width, Form1.height); 
 { устанавливаем новое круглое окно }
 SetWindowRgn(Form1.Handle, FormRgn, TRUE); 
end; 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
 Form1.close; 
end; 
end.
Source: Взято из http://forum.sources.ru
ID: 00466
Как создать лупу для рабочего стола?

=== Как создать лупу для рабочего стола? ===
// переменные
var
 Srect, Drect, PosForme: TRect;
 iWidth, iHeight, DmX, DmY: Integer;
 iTmpX, iTmpY: Real;
 C: TCanvas;
 Kursor: TPoint;
begin
 // Увеличиваем экран, если приложение не свёрнуто в иконку
 if not IsIconic(Application.Handle) then
 begin
 // Получаем координаты курсора
 GetCursorPos(Kursor);
 // PosForm представляет прямоугольник с координатами Form (image control).
 PosForme := Rect(Form1.Left, Form1.Top,
 Form1.Left+Form1.Width, Form1.Top+Form1.Height);
 // Показываем magnified screen если курсор за пределами формы.
 if not PtInRect(PosForme, Kursor) then
 begin
 // Далее код можно использовать для увеличения выбранной
 // части экрана. С небольшими модификациями его можно
 // использовать для уменьшения экрана
 iWidth := Image1.Width;
 iHeight := Image1.Height;
 Drect := Bounds(0, 0, iWidth, iHeight);
 iTmpX := iWidth / (Slider.Position * 4);
 iTmpY := iHeight / (Slider.Position * 4);
 Srect := Rect(Kursor.x, Kursor.y, Kursor.x, Kursor.y);
 InflateRect(Srect, Round(iTmpX), Round(iTmpY));
 // Получаем обработчик(handle) окна рабочего стола.
 C := TCanvas.Create;
 try
 C.Handle := GetDC(GetDesktopWindow);
 // Передаём часть изображения окна в TImage.
 Image1.Canvas.CopyRect(Drect, C, Srect);
 finally
 C.Free;
 end;
 end;
 // Обязательно обрабатываем все сообщения Windows.
 Application.ProcessMessages;
 end;
end;
Author: Zarko Gajic
Source: Взято из http://forum.sources.ru
ID: 01824
Как создать поле Lookup во время выполнения приложения

=== Как создать поле Lookup во время выполнения приложения ===
uses
 Forms, Classes, Controls, StdCtrls, Db, DBTables, DBCtrls;
type
 TForm1 = class(TForm)
 Table1: TTable; // DBDemos customer table
 Table2: TTable; // DBDemos orders table
 Button1: TButton;
 DBLookupComboBox1: TDBLookupComboBox;
 DataSource1: TDataSource;
 Table2CustNo: TFloatField; // CustNo key field object used for Lookup
 procedure Button1Click(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
 with TStringField.Create(Table2) do
 begin
 FieldName := 'MyLookup';
 FieldKind := fkLookup;
 DataSet := Table2;
 name := Dataset.name + FieldName;
 KeyFields := 'CustNo';
 LookUpDataset := Table1;
 LookUpKeyFields := 'CustNo';
 LookUpResultField := 'Company';
 DbLookupCombobox1.DataField := FieldName;
 DataSource1.DataSet := Dataset;
 Table2.FieldDefs.Add(name, ftString, 20, false);
 end;
 DbLookupCombobox1.DataSource:= Datasource1;
 Table1.Active := True;
 Table2.Active := True;
end;
end.
Source: http://delphiworld.narod.ru/
ID: 02622
Как создать поле Lookup во время выполнения приложения?

=== Как создать поле Lookup во время выполнения приложения? ===
uses 
 Forms, Classes, Controls, StdCtrls, Db, DBTables, DBCtrls; 
type 
 TForm1 = class(TForm) 
 Table1: TTable; // DBDemos customer table 
 Table2: TTable; // DBDemos orders table 
 Button1: TButton; 
 DBLookupComboBox1: TDBLookupComboBox; 
 DataSource1: TDataSource; 
 Table2CustNo: TFloatField; // CustNo key field object used for Lookup 
 procedure Button1Click(Sender: TObject); 
 private 
 { Private declarations } 
 public 
 { Public declarations } 
 end; 
var 
 Form1: TForm1; 
implementation 
{$R *.DFM} 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
 with TStringField.Create(Table2) do
 begin 
 FieldName := 'MyLookup'; 
 FieldKind := fkLookup; 
 DataSet := Table2; 
 Name := Dataset.Name + FieldName; 
 KeyFields := 'CustNo'; 
 LookUpDataset := Table1; 
 LookUpKeyFields := 'CustNo'; 
 LookUpResultField := 'Company'; 
 DbLookupCombobox1.DataField := FieldName; 
 DataSource1.DataSet := Dataset; 
 Table2.FieldDefs.Add(Name, ftString, 20, false); 
 end; 
 DbLookupCombobox1.DataSource := Datasource1; 
 Table1.Active := True; 
 Table2.Active := True; 
end; 
end.
Source: Взято из http://forum.sources.ru
ID: 00656
Как создать постоянный Alias?

=== Как создать постоянный Alias? ===
There has been a number of occasions where I needed to create persistent BDE aliases. The point is that the DB API isn't very discussed and is unkown to most Delphi developers. Despite that fact, the Dbi calls are very powerful and useful functions.
The function below, CreateAlias, encapsulates the DbiAddAlias call, with some error checking and BDE initialization and finalization procedures.
uses Windows, SysUtils, DbiProcs, DbiErrs, DBTables;
const
 CRLF = #13 + #10;
 ERR_ALIASDRIVERNOTFOUND = 'Specified driver does not exist.';
 ERR_ALIASALREADYEXISTS = 'The Alias (%s) already exists.' + CRLF +
 'Would you like to reconfigure it?';
 ERR_ALIASINVALIDPARAM = 'Invalid Alias name.';
 ERR_ALIASCLOSEBDE = 'Error closing the BDE.' + CRLF +
 'Please close all applications and restart Windows';
 ERR_ALIASOPENBDE = 'Error initializing BDE. Cannot create Alias.';
procedure CreateAlias(sAlias, sPath, sDriver: string;
 PersistentAlias: Boolean);
var
 dbEnv: DbiEnv;
 dbRes: DbiResult;
 Resp: word;
begin
 { Sets the BDE environment }
 with dbEnv do
 begin
 StrPCopy(szWorkDir, sPath);
 StrPCopy(szIniFile, );
 bForceLocalInit := True;
 StrPCopy(szLang, );
 StrPCopy(szClientName, 'dbClientName');
 end;
 { Initalizes BDE with the environment dbEnv }
 if DbiInit(@dbEnv) <> DbiERR_NONE then
 raise Exception.Create(ERR_ALIASOPENBDE);
 { Adds the specified Alias }
 if sDriver = 'STANDARD' then
 dbRes := DbiAddAlias(nil, pchar(sAlias), nil,
 pchar('PATH:' + sPath), PersistentAlias)
 else
 dbRes := DbiAddAlias(nil, pchar(sAlias), pchar(sDriver),
 pchar('PATH:' + sPath), PersistentAlias);
 case dbRes of
 DbiERR_INVALIDPARAM:
 raise Exception.Create(ERR_ALIASINVALIDPARAM);
 DbiERR_NAMENOTUNIQUE:
 begin
 resp := MessageBox(0, pchar(Format(ERR_ALIASALREADYEXISTS, [sAlias])),
 'CreateAlias', MB_ICONSTOP + MB_YESNO);
 if Resp = ID_YES then
 begin
 Check(DbiDeleteAlias(nil, pchar(sAlias)));
 CreateAlias(sAlias, sPath, sDriver, PersistentAlias);
 end;
 end;
 DbiERR_UNKNOWNDRIVER:
 raise Exception.Create(ERR_ALIASDRIVERNOTFOUND);
 end;
 if DbiExit <> DbiERR_NONE then
 raise Exception.Create(ERR_ALIASCLOSEBDE);
end; {CreateAlias}
The parameters for this function are:
* sAlias: Name of the new alias to be created
* sPath: Full path of the directory to which the alias should point. With little adjustments, this function can be used to create any kind of aliases, and, instead of passing the path info in this argument, pass all the parameters needed by the driver to create the alias.
* sDriver: Name of an existing BDE driver, such as PARADOX, DBASE, STANDARD
* PersistentAlias: Determines whether the new alias will be for future use (persistent) or just for the actual session.
Example of usage:
 CreateAlias('DBTEST', 'c:\progra~1\borland\delphi~1\projects\cd3\data', 'PARADOX',
 true);
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 02519
Как создать простейший эксперт?

=== Как создать простейший эксперт? ===
{ 
This unit can be compiled into a package and will then appear in the Delphi 
Help menu. 
} 
unit SDCSimpleExpert; 
interface 
uses ToolsApi; 
type 
 TSDCSimpleExpert = class(TNotifierObject, IOTAMenuWizard, IOTAWizard) 
 public 
 function GetIDString: string; 
 function GetName: string; 
 function GetState: TWizardState; 
 procedure Execute; 
 function GetMenuText: string; 
 end; 
procedure Register; 
implementation 
uses Dialogs; 
procedure Register; 
begin 
 {register expert} 
 RegisterPackageWizard(TSDCSimpleExpert.Create); 
end; 
{ TSDCSimpleExpert } 
procedure TSDCSimpleExpert.Execute; 
begin 
 {code to execute when menu item is clicked} 
 ShowMessage('Hello SwissDelphiCenter Simple Expert.'); 
end; 
function TSDCSimpleExpert.GetIDString: string; 
begin 
 {unique expert identifier} 
 Result := 'SwissDelphiCenter.SimpleExpert'; 
end; 
function TSDCSimpleExpert.GetMenuText: string; 
begin 
 {caption of menu item in help menu} 
 Result := 'SwissDelphiCenter Simple Expert'; 
end; 
function TSDCSimpleExpert.GetName: string; 
begin 
 {name of the expert} 
 Result := 'SwissDelphiCenter Simple Expert'; 
end; 
function TSDCSimpleExpert.GetState: TWizardState; 
begin 
 Result := [wsEnabled]; 
end; 
end. 
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 00029
Как создать регион(HRNG) по маске

Ниже приведена функция, которая создаёт HRGN из чёрно-белого битмапа. Все чёрные пиксели становятся регионом, а белые становятся прозрачными. Так же не составит труда сделать преобразования для поддержки всех цветов и чтобы один из них был прозрачным.
По окончании необходимо освободить регион при помощи функции DeleteObject.
function BitmapToRgn(Image: TBitmap): HRGN;
var
 TmpRgn: HRGN;
 x, y: Integer;
 ConsecutivePixels: Integer;
 CurrentPixel: TColor;
 CreatedRgns: Integer;
 CurrentColor: TColor;
begin
 CreatedRgns := 0;
 Result := CreateRectRgn(0, 0, Image.Width, Image.Height);
 Inc(CreatedRgns);
 if (Image.Width = 0) or (Image.Height = 0) then exit;
 for y := 0 to Image.Height - 1 do
 begin
 CurrentColor := Image.Canvas.Pixels[0, y];
 ConsecutivePixels := 1;
 for x := 0 to Image.Width - 1 do
 begin
 CurrentPixel := Image.Canvas.Pixels[x, y];
 if CurrentColor = CurrentPixel then
 Inc(ConsecutivePixels)
 else
 begin
 // Входим в новую зону
 if CurrentColor = clWhite then
 begin
 TmpRgn := CreateRectRgn(x-ConsecutivePixels, y, x, y+1);
 CombineRgn(Result, Result, TmpRgn, RGN_DIFF);
 Inc(CreatedRgns);
 DeleteObject(TmpRgn);
 end;
 CurrentColor := CurrentPixel;
 ConsecutivePixels := 1;
 end;
 end;
 if (CurrentColor = clWhite) and (ConsecutivePixels > 0) then
 begin
 TmpRgn := CreateRectRgn(x-ConsecutivePixels, y, x, y+1);
 CombineRgn(Result, Result, TmpRgn, RGN_DIFF);
 Inc(CreatedRgns);
 DeleteObject(TmpRgn);
 end;
 end;
end;
Source: http://forum.sources.ru
ID: 03765
Category:Графика
Category:Bitmap
Как создать свой пункт меню в Дельфи IDE?

=== Как создать свой пункт меню в Дельфи IDE? ===
{....} 
uses ToolsApi, Menus; 
{....} 
var 
 item: TMenuItem; 
begin 
 {get reference to delphi's mainmenu. You can handle it like a common TMainMenu} 
 with (BorlandIDEServices as INTAServices).GetMainMenu do 
 begin 
 item := TMenuItem.Create(nil); 
 item.Caption := 'A Mewn caption'; 
 Items.Add(item); 
 end; 
end; 
Source: http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 00028
Как создать собственное Hint-окно

=== Как создать собственное Hint-окно ===
procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Enabled := false;
 Panel1.Visible := false;
 Panel1.BevelInner := bvNone;
 Panel1.BevelOuter := bvNone;
 Panel1.BorderStyle := bsSingle;
 Panel1.Color := clWhite;
 Button1.Hint := 'Hint test';
end;
procedure TForm1.ShowAHint(x: integer; y: integer; Caption: string; Duration: LongInt);
var
 dc: hdc;
 OldFont: hFont;
 pt: TSize;
 p: pChar;
begin
 if Timer1.Enabled <> false then
 Timer1.Enabled := false;
 Timer1.Enabled := false;
 if Panel1.Visible <> false then
 Panel1.Visible := false;
 if Caption = then
 exit;
 Panel1.Caption := caption;
 { Get the width of the caption string }
 GetMem(p, Length(Panel1.Caption) + 1);
 StrPCopy(p, Panel1.Caption);
 dc := GetDc(Panel1.Handle);
 OldFont := SelectObject(dc, Panel1.Font.Handle);
 GetTextExtentPoint32(dc, p, Length(Panel1.Caption), pt);
 SelectObject(dc, OldFont);
 ReleaseDc(Panel1.Handle, Dc);
 FreeMem(p, Length(Panel1.Caption) + 1);
 { Position and show the panel }
 Panel1.Left := x;
 Panel1.Top := y;
 Panel1.Width := pt.cx + 6;
 Panel1.Height := pt.cy + 2;
 Panel1.Visible := true;
 { Fire off the timer to hide the panel }
 Timer1.Interval := Duration;
 Timer1.Enabled := true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if Panel1.Visible <> false then
 Panel1.Visible := false;
 Timer1.Enabled := false;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 { Let the button repaint }
 Application.ProcessMessages;
 ShowAHint(Button1.Left, Button1.Top + Button1.Height + 6, Button1.Hint, 2000);
end; 
Source: http://delphiworld.narod.ru/
ID: 01294
Как создать таблицу в MS Access при помощи DAO?

=== Как создать таблицу в MS Access при помощи DAO? ===
1. Объявляем переменные:
var
 access, db, td, recordset: Variant;
2. объявляем массив констант соответствия типов данных
(между полями в Delphi и типами полей DAO)
 arrMDBTypes: array[TFieldType] of Integer =
 ({dbText} 10 {ftUnknown},
 {dbText} 10 {ftString},
 {dbInteger} 3 {ftSmallint},
 {dbLong} 4 {ftInteger},
 {dbInteger} 3 {ftWord},
 {dbBoolean} 1 {ftBoolean},
 {dbDouble} 7 {ftFloat},
 {dbCurrency} 5 {ftCurrency},
 {dbDouble} 7 {ftBCD},
 {dbDate} 8 {ftDate},
 {dbTime} 22 {ftTime},
 {dbDate} 8 {ftDateTime},
 {dbLongBinary} 11 {ftBytes},
 {dbLongBinary} 11 {ftVarBytes},
 {dbInteger} 3 {ftAutoInc},
 {dbLongBinary} 11 {ftBlob},
 {dbMemo} 12 {ftMemo},
 {dbLongBinary} 11 {ftGraphic},
 {dbMemo} 12 {ftFmtMemo},
 {dbLongBinary} 11 {ftParadoxOle},
 {dbLongBinary} 11 {ftDBaseOle},
 {dbBinary} 9 {ftTypedBinary},
 {dbText} 10 {ftCursor}
 {$IFDEF VER120}
 ,
 {dbText} 10 {ftFixedChar},
 {dbText} 10 {ftWideString},
 {dbBigInt} 16 {ftLargeint},
 {dbText} 10 {ftADT},
 {dbText} 10 {ftArray},
 {dbText} 10 {ftReference},
 {dbText} 10 {ftDataSet}
 {$ELSE}
 {$IFDEF VER125}
 ,
 {dbText} 10 {ftFixedChar},
 {dbText} 10 {ftWideString},
 {dbBigInt} 16 {ftLargeint},
 {dbText} 10 {ftADT},
 {dbText} 10 {ftArray},
 {dbText} 10 {ftReference},
 {dbText} 10 {ftDataSet}
 {$ELSE}
 {$IFDEF VER130}
 ,
 {dbText} 10 {ftFixedChar},
 {dbText} 10 {ftWideString},
 {dbBigInt} 16 {ftLargeint},
 {dbText} 10 {ftADT},
 {dbText} 10 {ftArray},
 {dbText} 10 {ftReference},
 {dbText} 10 {ftDataSet},
 {dbLongBinary} 11 {ftOraBlob},
 {dbLongBinary} 11 {ftOraClob},
 {dbText} 10 {ftVariant},
 {dbText} 10 {ftInterface},
 {dbText} 10 {ftIDispatch},
 {dbGUID} 15 {ftGuid}
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 );
3. загружаем DAO:
 try
 access := GetActiveOleObject('DAO.DBEngine.35');
 except
 access := CreateOleObject('DAO.DBEngine.35');
 end;
4. открываем базу данных
 try
 db := access.OpenDatabase(yourDatabaseName);
 except
 exit
 end;
5. создаём новую таблицу в открытой базе данных
 td := db.CreateTableDef(yourTableName, 0, , );
6. добавляем в таблицу поле с описаниями
 td.Fields.Append(td.CreateField(strFieldName, arrMDBTypes[intDataType], Size));
например,
 td.Fields.Append(td.CreateField('ID', arrMDBTypes[intDataType], Size));
 td.Fields.Append(td.CreateField('NAME', arrMDBTypes[intDataType], Size));
7. добавляем таблицу в список таблиц
 db.TableDefs.Append(td);
8. открываем созданную таблицу
 recordset := db.OpenTable(yourTableName, 0);
9. добавляем новую запись в открытую таблицу
 recordset.AddNew;
10. изменяем значения поля
 curField := recordset.Fields[0].Value := 1;
 curField := recordset.Fields[1].Value := 'First record';
11. помещаем новую запись в базу
 recordset.Update(dbUpdateRegular, False);
где
const
 dbUpdateRegular = 1;
12. закрываем recordset
 recordset.Close;
13. закрываем базу данных
 db.Close;
14. освобождаем экземпляр DAO
 access := UnAssigned;
Source: Взято из http://forum.sources.ru
ID: 02763
Как создать таблицу в MS Word?

Для примера, Doc: TWordDocument
var
 Tbl: Table;
 R: Range;
 Direction: OleVariant;
begin
 Direction := wdCollapseEnd;
 R := Doc.Range;
 R.Collapse(Direction);
 Tbl := Doc.Tables.Add(R, 2, 4, EmptyParam, EmptyParam);
 Tbl.Cell(1, 1).Range.Text := 'Row 1, Col 1';
 Tbl.Cell(1, 2).Range.Text := 'Row 1, Col 2';
end;
Но обращение к отдельным ячейкам таблицы работает крайне медленно. По возможности, лучше представить данные в виде значений, разделенных запятой и преобразовать их в таблицу на последнем этапе. Например:
const
 Line1 = 'January,February,March';
 Line2 = '31,28,31';
 Line3 = '31,59,90';
var
 R: Range;
 Direction, Separator, Format: OleVariant;
begin
 R := Word.Selection.Range;
 Direction := wdCollapseEnd;
 R.Collapse(Direction);
 R.InsertAfter(Line1);
 R.InsertParagraphAfter;
 R.InsertAfter(Line2);
 R.InsertParagraphAfter;
 R.InsertAfter(Line3);
 R.InsertParagraphAfter;
 Separator := ',';
 Format := wdTableFormatGrid1;
 R.ConvertToTable(Separator, EmptyParam, EmptyParam, EmptyParam, Format, EmptyParam,
 EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
 EmptyParam, EmptyParam);
end;
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 04424
Category:COM
Category:MS Office
Как создать таблицу через SQL?

=== Как создать таблицу через SQL? ===
Следующая функция полностью совместима с Paradox:
procedure TForm1.Button1Click(Sender: TObject);
var
 Q: TQuery;
begin
 Q := TQuery.Create(Application)
 try
 Q.DatabaseName := 'SF';
 with Q.SQL do
 begin
 Add('Create Table Funcionarios');
 Add('( ID AutoInc, ');
 Add(' Name Char(30), ');
 Add(' Salary Money, ');
 Add(' Depno SmallInt, ');
 Add(' Primary Key ( ID ) ) ');
 end;
 Q.ExecSQL;
 finally
 Q.Free;
 end;
end;
Source: Взято из http://forum.sources.ru
ID: 03096
Category:Базы данных
Как создать форму в форме эллипса?

=== Как создать форму в форме элипса? ===
procedure TForm1.FormCreate(Sender: TObject);
var
 Region: HRGN;
begin
 Region := CreateEllipticRgn(0, 0, 300, 300);
 SetWindowRgn(Handle, Region, True);
end;
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 00469
Как сообщить что-нибудь всем формам моего приложения?

=== Как сообщить что-нибудь всем формам моего приложения? ===
Как сообщить всем формам моего приложения (в том числе и не видимым в данный момент) об изменении каких-то глобальных значений?
Один из способов - создать пользовательское сообщение и использовать метод preform чтобы разослать его всем формам из массива Screen.Forms.
{ Code for Unit1 }
const
 UM_MyGlobalMessage = WM_USER + 1;
type
 TForm1 = class(TForm)
 Label1: TLabel;
 Button1: TButton;
 procedure FormShow(Sender: TObject);
 procedure Button1Click(Sender: TObject);
 private
 { Private declarations }
 procedure UMMyGlobalMessage(var AMessage: TMessage); message UM_MyGlobalMessage;
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
uses Unit2;
procedure TForm1.FormShow(Sender: TObject);
begin
 Form2.Show;
end;
procedure TForm1.UMMyGlobalMessage(var AMessage: TMessage);
begin
 Label1.Left := AMessage.WParam;
 Label1.Top := AMessage.LParam;
 Form1.Caption := 'Got It!';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
 f: Integer;
begin
 for f := 0 to Screen.FormCount - 1 do
 Screen.Forms[f].Perform(UM_MyGlobalMessage, 42, 42);
end;
{ Code for Unit2 }
const
 UM_MyGlobalMessage = WM_USER + 1;
type
 TForm2 = class(TForm)
 Label1: TLabel;
 private
 { Private declarations }
 procedure UMMyGlobalMessage(var AMessage: TMessage); message UM_MyGlobalMessage;
 public
 { Public declarations }
 end;
var
 Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.UMMyGlobalMessage(var AMessage: TMessage);
begin
 Label1.Left := AMessage.WParam;
 Label1.Top := AMessage.LParam;
 Form2.Caption := 'Got It!';
end;
ID: 02316