nyuuzyou/wikis huggingface dataset:
TStringGrid в HTML

=== TStringGrid --> HTML ===
procedure SGridToHtml(SG: TStringgrid; Dest: TMemo; BorderSize: Integer);
var 
 i, p: integer;
 SStyle1, SStyle2, Text: string;
begin
 Dest.Clear;
 Dest.Lines.Add('<html>');
 Dest.Lines.Add('<body>');
 Dest.Lines.Add(' ');
 for i := 0 to SG.RowCount - 1 do
 begin
 Dest.Lines.Add(' ');
 for p := 0 to SG.ColCount - 1 do
 begin
 SStyle1 := ;
 SStyle2 := ;
 if fsbold in SG.Font.Style then
 begin
 SStyle1 := SStyle1 + '';
 SStyle2 := SStyle2 + '';
 end;
 if fsitalic in SG.Font.Style then
 begin
 SStyle1 := SStyle1 + '';
 SStyle2 := SStyle2 + '';
 end;
 if fsunderline in SG.Font.Style then
 begin
 SStyle1 := SStyle1 + '';
 SStyle2 := SStyle2 + '';
 end;
 Text := sg.Cells[p, i];
 if Text = then Text := ' ';
 Dest.Lines.Add(' ' + SStyle1 +
 Text + SStyle2 + '');
 end;
 Dest.Lines.Add(' ');
 end;
 Dest.Lines.Add(' ');
 Dest.Lines.Add('</body>');;
 Dest.Lines.Add('</html>');
end;
// Example, Beispiel
procedure TFormCSVInport.Button6Click(Sender: TObject);
begin
 SGridToHtml(StringGrid1, Memo1, 1);
 Memo1.Lines.SaveToFile('c:\test.html');
end;
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 00611
----
procedure ToHtml(SG: TStringGrid; S: string);
var
 i, j: integer;
 t: TStringList;
begin
 try
 t := TStringList.Create;
 t.Add(''); // начало таблицы
 t.Add(''); // начало заголовков
 for j := 0 to SG.ColCount-1 do
 t.Add('' + SG.Cells[j, 0] + ''); // заголовки
 t.Add(''); // конец заголовков
 // ProgressBar1.Max := SG.RowCount;
 for i := 1 to SG.RowCount do
 begin
 t.Add(''); // начало ячеек
 for j := 0 to SG.ColCount-1 do
 t.Add('' + SG.Cells[j, i] + ''); // ячейки
 t.Add(''); // конец ячеек
 { ProgressBar1.Position := i }
 end;
 t.Add(''); //конец таблицы
 t.SaveToFile(S); //сохраняем в файл
 // ProgressBar1.Position := 0;
 finally
 t.Free;
 end;
end;
Пример вызова:
ToHtml(StringGrid1, 'C:\123.html');
Author: Kostas
Source: Взято из http://forum.sources.ru
ID: 00612
TStringGrid и файловый поток

=== TStringGrid и файловый поток ===
Какое наилучшее решение для сохранения экземпляра TStringGrid (150x10)? 
Если вы хотите сохранить это на диске:
var:
 myStream: TFileStream;
begin
 myStream1 := TFileStream.Create('grid1.sav', fmCreate);
 myStream1.WriteComponent(StringGrid1);
 myStream1.Destroy;
end;
// Для обратного чтения:
myStream := TFileStream.Create('grid1.sav', fmOpenRead);
StringGrid1 := myStream1.ReadComponent(StringGrid1) as TStringGrid;
Source: http://delphiworld.narod.ru/
ID: 01056
TStringGrid с фокусом (OnDrawCell)

=== TStringGrid с фокусом (OnDrawCell) ===
Если вы создаете собственный обработчик компонента TStringGrid OnDrawCell, то вы можете нарисовать все, что вам заблагорассудится. Попробуйте, к примеру, это:
procedure TForm1.DrawCell(Sender: TObject;
 Col: Longint;
 Row: Longint;
 Rect: TRect;
 State: TGridDrawState);
var
 lRow, lCol: LongInt;
 S: string;
begin
 lRow := Row;
 lCol := Col;
 with Sender as TStringGrid, Canvas do
 begin
 if (gdSelected in State) then
 begin
 Brush.Color := clHighlight; { *** }
 end
 else if (lRow < FixedRows) or (lCol < FixedCols) then
 begin
 Brush.Color := FixedColor;
 end
 else
 begin
 Brush.Color := Color;
 end;
 FillRect(Rect);
 SetBkMode(Handle, TRANSPARENT);
 TextOut(Rect.Left + 2, Rect.Top + 2, Cells[lCol, lRow]);
 end;
end;
Строка с комментарием { *** } в данном контексте ключевая. Она "сообщает" о том, что если мы рисуем ячейку, которая имеет фокус, то мы ее рисуем с применением цвета подсветки (highlight) (хотя вы бы могли здесь использовать любой другой нравящийся вам цвет), хотя никто нам специально о необходимости подкрашивания области сфокусированной ячейки и не говорил. Единственная проблема возникает со шрифтом, но в конечном счете я обнаружил, что она решается сама собой, если установить свойство компонента TStringGrid DefaultDrawing в TRUE (я потерял немало времени, решая проблему цвета шрифта со значением FALSE!). Попробуйте также поиграться с другими настройками цветов, может вам повезет и вы добъетесь неописуемой красоты компонента TStringGrid. 
Source: http://delphiworld.narod.ru/
ID: 01093
TTreeView. Проблемы CustomDraw

=== TTreeView. Проблемы CustomDraw ===
При использовании компонента TTreeView возникают проблемы при собственной отрисовке содержимого компонента в событиях OnCustomDraw, OnCustomDrawItem, OnAdvancedCustomDraw, OnAdvancedCustomDrawItem. Проблема проявляется когда свойства Canvas компонента устанавливаются вторично. К примеру, при попытке изменить цвет фонта во второй раз, соотвествующих изменений НЕ ПОСЛЕДУЕТ. Тоже самое и со свойствами Brush, Pen. 
Проверено на Дельфи 5. 
Контрольный пример (на форме TTreeView и TCheckBox): 
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
 Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
 var PaintImages, DefaultDraw: Boolean);
var
 ARect: TRect;
 S: string;
begin
 if not CheckBox1.Checked then
 Exit;
 case Stage of
 cdPostPaint:
 begin
 ARect := Node.DisplayRect(True);
 ARect.Right := TreeView1.ClientWidth;
 with TreeView1.Canvas do
 begin
 if cdsSelected in State then
 Brush.Color := clHighlight
 else
 Brush.Color := clWindow;
 FillRect(ARect);
 Font.Color := clGreen;
 S := 'AbsoluteIndex : ' + IntToStr(Node.AbsoluteIndex);
 TextOut(ARect.Left, ARect.Top, S);
 // цвет шрифта должен поменяться!!!
 Font.Color := clBlue;
 // Но он не меняется :-(((
 TextOut(ARect.Left + TextWidth(S) + 20, ARect.Top, Node.Text);
 end;
 end;
 end; { Case }
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 TreeView1.Repaint;
end;
ТИПОВЫЕ РЕШЕНИЯ 
Использовать API функции Windows такие как SetTextColor, SelectObject и т.д, передавая им в качестве первого параметра Canvas.Handle. 
КОММЕНТАРИЙ 
Проверено (Delphi 5 Update Pack 1, WinNT, Win2000). Действительно, эффект имеет место быть. Вероятно, Борланд перемудрил что-то в своем кэше ресурсов GDI (класс TCanvas). 
При присваивании Font.Color изменяется только внутреннее поле FColor. В методе TCanvas.TextOut не выполняется SetTextColor(FHandle, ColorToRGB(FFont.Color)), как это сделано в TCanvas.Draw. Следовательно, мы имеем более глобальную проблему, чем рисование узлов дерева вручную. 
Source: http://delphiworld.narod.ru/
ID: 01110
TXT в GIF

procedure TxtToGif(txt, FileName: string);
var
 temp: TBitmap;
 GIF: TGIFImage;
begin
 temp := TBitmap.Create;
 try
 temp.Height := 400;
 temp.Width := 60;
 temp.Transparent := True;
 temp.Canvas.Brush.Color := colFondo.ColorValue;
 temp.Canvas.Font.Name := Fuente.FontName;
 temp.Canvas.Font.Color := colFuente.ColorValue;
 temp.Canvas.TextOut(10, 10, txt);
 Imagen.Picture.Assign(nil);
 GIF := TGIFImage.Create;
 try
 // Convert the bitmap to a GIF
 GIF.Assign(Temp);
 // Save the GIF
 GIF.SaveToFile(FileName);
 // Display the GIF
 Imagen.Picture.Assign(GIF);
 finally
 GIF.Free;
 end;
 finally
 temp.Destroy;
 end;
end;
Source: Взято с Delphi Knowledge Base: http://www.baltsoft.com/
ID: 04281
Category:Конвертация
Tab как Enter в StringGrid

=== Tab как Enter в StringGrid ===
Данный код переводит ввод на другую колонку. При достижении конца колонок, ввод перемещается на следующую строку. При достижении самого конца сетки, управление перемещается в ее самое начало - естественно, вы можете изменить это поведение, и передавать управление в этом случае другому элементу управления.
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key = #13 then
 begin
 with StringGrid1 do
 begin
 if Col < ColCount - 1 then { следующая колонка! }
 Col := Col + 1
 else if Row < RowCount - 1 then
 begin { следующая строка! }
 Row := Row + 1;
 Col := 1;
 end
 else
 begin { Конец сетки! - Снова перемещаемся наверх! }
 Row := 1;
 Col := 1;
 { или вы можете передать управление другому элементу управления }
 end;
 end;
 end;
end;
Source: http://delphiworld.narod.ru/
ID: 01094
----
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key = #13 then
 begin
 with StringGrid1 do
 begin
 if Col then { next column }
 Col := Col + 1
 else if Row then
 begin { next Row }
 Row := Row + 1;
 Col := 1;
 end
 else
 begin { End of Grid- Go to Top again }
 Row := 1;
 Col := 1;
 end;
 end;
 end;
end;
Source: Взято с сайта: http://www.swissdelphicenter.ch
ID: 01100
URL декодирование строки

{ **** UBPFD *********** by kladovka.net.ru ****
>> URL декодирование строки
Функция выполняет URL декодирование строки, заменяя все
подстроки вида '%HH', где 'HH' - шестнадцатеричные
цифры, на соответствующие символы.
Зависимости: Windows
Copyright: Dimka Maslov
Дата: 27 мая 2002 г.
********************************************** }
function UrlDecode(Str: string): string;
function HexToChar(W: word): Char;
asm
 cmp ah, 030h
 jl @@error
 cmp ah, 039h
 jg @@10
 sub ah, 30h
 jmp @@30
@@10:
 cmp ah, 041h
 jl @@error
 cmp ah, 046h
 jg @@20
 sub ah, 041h
 add ah, 00Ah
 jmp @@30
@@20:
 cmp ah, 061h
 jl @@error
 cmp al, 066h
 jg @@error
 sub ah, 061h
 add ah, 00Ah
@@30:
 cmp al, 030h
 jl @@error
 cmp al, 039h
 jg @@40
 sub al, 030h
 jmp @@60
@@40:
 cmp al, 041h
 jl @@error
 cmp al, 046h
 jg @@50
 sub al, 041h
 add al, 00Ah
 jmp @@60
@@50:
 cmp al, 061h
 jl @@error
 cmp al, 066h
 jg @@error
 sub al, 061h
 add al, 00Ah
@@60:
 shl al, 4
 or al, ah
 ret
@@error:
 xor al, al
end;
function GetCh(P: PChar; var Ch: Char): Char;
begin
 Ch := P^;
 Result := Ch;
end;
var
 P: PChar;
 Ch: Char;
begin
 Result := ;
 P := @Str[1];
 while GetCh(P, Ch) <> #0 do
 begin
 case Ch of
 '+': Result : =Result + ' ';
 '%':
 begin
 Inc(P);
 Result := Result + HexToChar(PWord(P)^);
 Inc(P);
 end;
 else
 Result := Result + Ch;
 end;
 Inc(P);
 end;
end;
Author: Dimka Maslov
ID: 03374
ID: 04028
== См. также ==
* URL кодирование строки
Category:Связь
Category:Алгоритмы
URL кодирование строки

{ **** UBPFD *********** by kladovka.net.ru ****
>> URL кодирование строки
Функция производит так называемое URL кодирование строк для
использования в http запросах. Т.е. все алфавитно-цифровые
символы и знак подчеркивания '_' остаются неизменными,
пробел заменяется на '+', а все остальные символы на знак
процента '%' с двумя шестнадцатеричными цифрами.
Зависимости: Windows
Copyright: Dimka Maslov
Дата: 27 мая 2002 г.
********************************************** }
function UrlEncode(Str: string): string;
function CharToHex(Ch: Char): Integer;
asm
 and eax, 0FFh
 mov ah, al
 shr al, 4
 and ah, 00fh
 cmp al, 00ah
 jl @@10
 sub al, 00ah
 add al, 041h
 jmp @@20
@@10:
 add al, 030h
@@20:
 cmp ah, 00ah
 jl @@30
 sub ah, 00ah
 add ah, 041h
 jmp @@40
@@30:
 add ah, 030h
@@40:
 shl eax, 8
 mov al, '%'
end;
var
 i, Len: Integer;
 Ch: Char;
 N: Integer; P: PChar;
begin
 Result := ;
 Len := Length(Str);
 P := PChar(@N);
 for i := 1 to Len do
 begin
 Ch := Str[i];
 if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '_'] then
 Result := Result + Ch
 else
 begin
 if Ch = ' ' then
 Result := Result + '+'
 else
 begin
 N := CharToHex(Ch);
 Result := Result + P;
 end;
 end;
 end;
end;
Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
var
 S: string;
begin
 S := UrlEncode('Мастера Delphi');
 ShellExecute(Handle, 'open',
 PChar('http://www.yandex.ru/yandsearch?text='+S), , , SW_SHOWNORMAL);
end;
Author: Dimka Maslov
ID: 03373
== См. также ==
* URL декодирование строки
Category:Связь
Category:Алгоритмы
Using Tapi

=== Using TAPI ===
How can I use TAPI to dial the telephone for a voice call?
The following example shows how to interface with tapi to make a voice call.
{ tapi Errors }
const TAPIERR_CONNECTED = 0;
const TAPIERR_DROPPED = -1;
const TAPIERR_NOREQUESTRECIPIENT = -2;
const TAPIERR_REQUESTQUEUEFULL = -3;
const TAPIERR_INVALDESTADDRESS = -4;
const TAPIERR_INVALWINDOWHANDLE = -5;
const TAPIERR_INVALDEVICECLASS = -6;
const TAPIERR_INVALDEVICEID = -7;
const TAPIERR_DEVICECLASSUNAVAIL = -8;
const TAPIERR_DEVICEIDUNAVAIL = -9;
const TAPIERR_DEVICEINUSE = -10;
const TAPIERR_DESTBUSY = -11;
const TAPIERR_DESTNOANSWER = -12;
const TAPIERR_DESTUNAVAIL = -13;
const TAPIERR_UNKNOWNWINHANDLE = -14;
const TAPIERR_UNKNOWNREQUESTID = -15;
const TAPIERR_REQUESTFAILED = -16;
const TAPIERR_REQUESTCANCELLED = -17;
const TAPIERR_INVALPOINTER = -18;
{ tapi size constants }
const TAPIMAXDESTADDRESSSIZE = 80;
const TAPIMAXAPPNAMESIZE = 40;
const TAPIMAXCALLEDPARTYSIZE = 40;
const TAPIMAXCOMMENTSIZE = 80;
const TAPIMAXDEVICECLASSSIZE = 40;
const TAPIMAXDEVICEIDSIZE = 40;
function tapiRequestMakeCallA(DestAddress: PAnsiChar; AppName: PAnsiChar;
 CalledParty: PAnsiChar; Comment: PAnsiChar): LongInt; stdcall; external 'TAPI32.DLL';
function tapiRequestMakeCallW(DestAddress: PWideChar; AppName: PWideChar;
 CalledParty: PWideChar; Comment: PWideChar): LongInt; stdcall; external 'TAPI32.DLL';
function tapiRequestMakeCall(DestAddress: PChar; AppName: PChar;
 CalledParty: PChar; Comment: PChar): LongInt; stdcall; external 'TAPI32.DLL';
procedure TForm1.Button1Click(Sender: TObject);
var
 DestAddress: string;
 CalledParty: string;
 Comment: string;
begin
 DestAddress := '1-555-555-1212';
 CalledParty := 'Frank Borland';
 Comment := 'Calling Frank';
 tapiRequestMakeCall(pChar(DestAddress),
 PChar(Application.Title),
 pChar(CalledParty),
 PChar(Comment));
end;
end.
ID: 01466
Using Visual Basic arrays in Delphi

=== Using Visual Basic arrays in Delphi ===
How do I pass arrays from VB to Delphi?
Arrays can be passed as variants:
VB module code:
Attribute VB_Name = "Module1"
Declare Function TestMin Lib "c:\windows\system\NoelSArr" 
 (Nums As Variant) As Integer
VB form code:
Dim A As Variant
Private Sub Command1_Click()
 A = Array(4, 3)
 MsgBox (TestMin(A))
End Sub
Delphi DLL code:
library NoelSArray;
.
.
function TestMin(const Nums: Variant): integer; export; stdcall;
var
 p1: Variant;
begin
 p1 := VarArrayCreate([0, 1], VT_I4);
 p1:= Nums;
 if (p1[0] < p1[1]) then
 result:= p1[0]
 else
 Result:= p1[1];
end;
ID: 00297
Using the Shell API function SHBrowseForFolder

=== Using the Shell API function SHBrowseForFolder ===
uses ShellAPI, ShlObj;
procedure TForm1.Button1Click(Sender: TObject);
var
 TitleName: string;
 lpItemID: PItemIDList;
 BrowseInfo: TBrowseInfo;
 DisplayName: array[0..MAX_PATH] of Char;
 TempPath: array[0..MAX_PATH] of Char;
begin
 FillChar(BrowseInfo, SizeOf(TBrowseInfo), #0);
 BrowseInfo.hwndOwner := Form1.Handle;
 BrowseInfo.pszDisplayName := @DisplayName;
 TitleName := 'Please specify a directory';
 BrowseInfo.lpszTitle := PChar(TitleName);
 BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
 lpItemID := SHBrowseForFolder(BrowseInfo);
 if lpItemId <> nil then
 begin
 SHGetPathFromIDList(lpItemID, TempPath);
 ShowMessage(TempPath);
 GlobalFreePtr(lpItemID);
 end;
end;
ID: 01203
Virtual ListView с контекстным меню

=== Virtual ListView с контекстным меню ===
В Delphi5/Demos есть пример Virtual ListView. программка чем-то напоминает explorer, но без контекстного меню. контекстное меню приделывается так:
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
 ContextMenu: IContextMenu;
 menu: HMENU;
begin
 FIShellFolder.GetUIObjectOf(Handle, 1, ShellItem(ListView.Selected.Index).ID,
 IID_IContextMenu, nil, ContextMenu);
 menu := CreatePopupMenu();
 ContextMenu.QueryContextMenu(menu, 0, 1, $7FFF, CMF_EXPLORE);
 TrackPopupMenu(menu,
 TPM_LEFTALIGN or TPM_LEFTBUTTON or TPM_RIGHTBUTTON or TPM_RETURNCMD,
 Mouse.CursorPos.x, Mouse.CursorPos.y, 0, Handle, nil);
 DestroyMenu(menu);
end;
Source: Взято из http://forum.sources.ru
ID: 00626
Category:TListView
WEB страничка внутри Delphi приложения

(Перевод одноимённой статьи с сайта delphi.about.com )
Многие из Вас спрашивают, как сделать, чтобы приложением могло содержать в себе различные компоненты в стиле Web, включая HTML ресурсы и картинки, которые являются частью Вашего проекта. Статья показывает, как можно легко добавить в Delphi приложение HTML и связанные с ним файлы (картинки).
== Создание HTML страницы ==
Для начала мы должны создать простую страницу HTML. Для этого можно использовать Ваш любимый HTML редактор, и создать одну страницу с одним изображением. К примеру, назовём этот файл aboutindex.htm. Обратите внимание, что, когда Вы добавляете тэг картинки внутрь htm страницы, то в исходнике страницы будет присутствовать следующая строка:
<img src="../graphics/adp.gif" ...>
Нам необходимо подправить тэг IMG так, чтобы атрибут SRC равнялся имени, которое мы указали в ресурсах:
<img src="ABOUTDP" ...>
У меня HTML код выглядит следующим образом:
<HTML><HEAD><TITLE>HTML inside a Delphi exe</TITLE></HEAD><BODY>
This is a HTML Delphi resource test:
<img src="ABOUTDP" width=106 height=58 border=0 alt="">
</BODY></HTML>
== Создание и компиляция файла ресурсов ==
Запомните, что для того, чтобы создать новый скрипт-файл ресурсов, необходимо:
# Создать новый текстовый файл в директории Вашего проекта.
# Переименовать его в AHTMLDelphi.rc.
# Добавить следующие две строки текста в файл AHTMLDelphi.rc
 DELPHIINDEX HTML "c:\Delphi\projects\aboutindex.htm"
 ABOUTDP GIF "c:\library\graphics\adp.gif"
Обратите внимание, что "HTML" тип ресурса RT_HTML, определён как "23". Это значение является дефолтовым для протокола RES.
Таким образом мы подготовили одну HTML страницу и одну картинку GIF, которые будут включены в исполняемый EXE модуль.
Следующий шаг - это компиляция .rc файла. Для компиляции файла AHTMLDelphi.rc в файл .res, выполните следующую команду из командной строки (в директории Вашего проекта):
 BRCC32 AHTMLDelphi.RC
Заключительный шаг - это добавление следующей директивы компилятора в unit Вашего проекта. Следующая строка заставляет компилятор включить в проект файл RES:
 {$R AHTMLDelphi.RES}
== Отображение внутри Web браузера ==
После того, как Вы получите экзешник приложения (назовём его, например, myhtmldelphi.exe), то HTML ресурсы, содержащиеся в нём, могут быть доступны через протокол RES: . Запустите Internet Explorer и, адресной строке напишите следующее:
 res://c:\myhtmldelphi.exe/DELPHIINDEX
Source: http://forum.sources.ru
ID: 03532
Category:Связь
Category:Web
WMF в BMP

procedure ConvertWMF2BMP(const WMFFileName, BMPFileName: TFileName);
var
 MetaFile: TMetafile;
 Bitmap: TBitmap;
begin
 Metafile := TMetaFile.Create;
 Bitmap := TBitmap.Create;
 try
 MetaFile.LoadFromFile(WMFFileName);
 with Bitmap do
 begin
 Height := Metafile.Height;
 Width := Metafile.Width;
 Canvas.Draw(0, 0, MetaFile);
 SaveToFile(BMPFileName);
 end;
 finally
 Bitmap.Free;
 MetaFile.Free;
 end;
end;
Использование:
ConvertWMF2BMP('c:\mypic.wmf', 'c:\mypic.bmp')
Source: http://forum.sources.ru
ID: 04283
== См. также ==
* BMP в WMF
Category:Конвертация
Where are my components?

===== Where are my components? =====
Windows NT and 2000:
Most likely Delphi was installed by an administrator or a user with administrator rights and the user currently logged on does not have administrator rights. The component library is failing to load because it does not have the registry keys available that indicate where the packages are located. Install first as Admin, then do a 'Registry Settings Only' install for each user to get all the necessary DLL's and registry key entries to run Delphi under a specific user profile. 
To do this login as the user and run the Delphi install. Around 3 screens in you'll get to the screen where you need to choose the install directories. At the bottom of this screen is a check box to select for Registry Settings Only. Complete the install as usual. It should be much faster since no files are copied. 
If it looks like the components are there but the bitmap images are missing then try unistalling and reinstalling each package. This can be done very easily by going into the Delphi menu option Component | Install Packages. Uncheck each of the packages and then check it again. Say "Yes" to any message boxes that appear asking about the removal of related packages. I recommend you start by removing "Borland Database Components" since this will remove several others as well. 
ID: 00005
Why can’t I connect to an Access database using the BDE and native MSACCESS driver?

=== Why can’t I connect to an Access database using the BDE and native MSACCESS driver? ===
Why can't I connect to an Access database using the BDE and native MSACCESS driver?
; Access 2000/XP
: You cannot connect to an Access 2000 database using the BDE's native MSACCESS driver. It is recommended that you use ADO. You could also connect using the BDE with ODBC.
;Access 95 or 97
: You may get the message "BDE error 13059" and "General SQL error". If you are trying to connect to Access 95 or 97 databases using the BDE's native MSACCESS driver, then you need to have DAO 3.0 installed for Access 95 or DAO 3.5 for Access 97 (DAO = Data Access Objects for Visual Basic). You can install the DAO by doing a custom installation of MS Office and selecting only to install Data Access Objects for Visual Basic. You must also have the correct DLL32 setting in the BDE Administrator for the DAO you have installed: IDDA3532.DLL for Access 97, IDDAO32.DLL for Access 95.
ID: 02748
WideString → String

=== WideString -->String ===
{:Converts Unicode string to Ansi string using specified code page.
 @param ws Unicode string.
 @param codePage Code page to be used in conversion.
 @returns Converted ansi string.
}
function WideStringToString(const ws: WideString; codePage: Word): AnsiString;
var
 l: integer;
begin
 if ws = then
 Result := ''
 else 
 begin
 l := WideCharToMultiByte(codePage,
 WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
 @ws[1], - 1, nil, 0, nil, nil);
 SetLength(Result, l - 1);
 if l > 1 then
 WideCharToMultiByte(codePage,
 WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
 @ws[1], - 1, @Result[1], l - 1, nil, nil);
 end;
end; { WideStringToString }
Source: Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php
ID: 00158
Win1251 в-из Koi8r

type
 TConvertChars = array[#128..#255] of Char;
const
 Win_KoiChars: TConvertChars = 
 (#128,#129,#130,#131,#132,#133,#134,#135,#136,#137,
 #060,#139,#140,#141,#142,#143,#144,#145,#146,#147,
 #148,#169,#150,#151,#152,#153,#154,#062,#176,#157,
 #183,#159,#160,#246,#247,#074,#164,#231,#166,#167,
 #179,#169,#180,#060,#172,#173,#174,#183,#156,#177,
 #073,#105,#199,#181,#182,#158,#163,#191,#164,#062,
 #106,#189,#190,#167,#225,#226,#247,#231,#228,#229,
 #246,#250,#233,#234,#235,#236,#237,#238,#239,#240,
 #242,#243,#244,#245,#230,#232,#227,#254,#251,#253,
 #154,#249,#248,#252,#224,#241,#193,#194,#215,#199,
 #196,#197,#214,#218,#201,#202,#203,#204,#205,#206,
 #207,#208,#210,#211,#212,#213,#198,#200,#195,#222,
 #219,#221,#223,#217,#216,#220,#192,#209);
 Koi_WinChars: TConvertChars = 
 (#128,#129,#130,#131,#132,#133,#134,#135,#136,#137,
 #138,#139,#140,#141,#142,#143,#144,#145,#146,#147,
 #148,#149,#150,#151,#152,#153,#218,#155,#176,#157,
 #183,#159,#160,#161,#162,#184,#186,#165,#166,#191,
 #168,#169,#170,#171,#172,#173,#174,#175,#156,#177,
 #178,#168,#170,#181,#182,#175,#184,#185,#186,#187,
 #188,#189,#190,#185,#254,#224,#225,#246,#228,#229,
 #244,#227,#245,#232,#233,#234,#235,#236,#237,#238,
 #239,#255,#240,#241,#242,#243,#230,#226,#252,#251,
 #231,#248,#253,#249,#247,#250,#222,#192,#193,#214,
 #196,#197,#212,#195,#213,#200,#201,#202,#203,#204,
 #205,#206,#207,#223,#208,#209,#210,#211,#198,#194,
 #220,#219,#199,#216,#221,#217,#215,#218);
function Win_KoiConvert(const St: string): string;
var
 i: Integer;
begin
 Result := St;
 for i := 1 to Length(St) do
 if St[i] > #127 then
 Result[i] := Win_KoiChars[St[i]];
end;
Author: Автор: Song
Source: http://forum.sources.ru
ID: 04287
Category:Конвертация
Category:Работа с текстом