Create site free
FAQ по Delphi (2) - Программирование - Компьютеры, телекоммуникации, ПО... - Форум
 

Страница 2 из 3«123»
Форум » Компьютеры, телекоммуникации, ПО... » Программирование » FAQ по Delphi
FAQ по Delphi
Vovich Дата: Четверг, 29.04.2010, 00:16 | Сообщение # 1
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline















 
Vovich Дата: Четверг, 29.04.2010, 08:59 | Сообщение # 11
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Когда я устанавливаю Active в True, то получаю ошибку: 'Token not found. Token :dbo. line number:1'

У меня есть TQuery и TDataSource. В свойстве SQL для TQuery я пишу
SELECT * FROM dbo.AnyTable
база данных на MS SQL Server. Когда я устанавливаю Active в True,
то получаю ошибку: 'Token not found. Token :dbo. line number:1'. Что не так?

Если свойство RequestLive=True, то имя таблицы нужно брать в кавычки:
SELECT * FROM " dbo.table"
Если свойство RequestLive=False, кавычек не требуется:
SELECT * FROM dbo.table


 
Vovich Дата: Четверг, 29.04.2010, 09:54 | Сообщение # 12
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Как сделать EXE маленьким?

Обычно компилированный ЕХЕ файл занимает около 400, а как сделать его в маленький размер около 50?

Ответ 1:
Можно, но тогда вместе с *.exe Вам придется распространять и библиотеки. Для этого поставьте в опциях проекта галочку на Packages\Build with runtime packages.

Ответ 2:
Можно еще задействовать компрессоры:
NeoLite (ftp://ftp.zdnet.com/pub/private/sWlIB/utilities/other_utilities/neolitee.zip),
Petite (http://www.icl.ndirect.co.uk/petite),
Shrinker (http://www.blinkinc.com)

Ответ 3:
Есть несколько путей:
1) Компиллировать пакеты отдельно, но тогда их прийдется распространять с программой, выгоды не будет
2) Писать только консольные приложения, тогда никаких форм, кнопок и т.п. не будет
3) Писать только на WinAPI - оччччччень трудоемкий процесс - только чтобы показать форму вы напишете строк 100 кода, и так для каждото компонента, и обработчик событий свой писать прийдется и т.п., собственно что бы избавить Вас от этой мороки и был придуман Дельфи
4) Есть несколько сторонних VCL библиотек, меньшего размера, посмотрите на www.torry.net, но прийдется отказаться почти от всех привычных библиотек
5) компрессировать результирующий файл - у меня есть абсолютно беспланый упаковщик, компрессия сопоставима с zip/rar, для конечного пользователя совсем прозрачно. Напишите мне - я вышлю если надо, или положу на свой сайт.

Ответ 4:
1) Сжать его паковщиком, например NeoLite-ом (правда из 400 кил 50 не получится... у меня из 357к осталось 186к... Есть и другие упаковщики, но НеоЛит сжимает сильнее.)
2) Использовать файловые потоки для сбрасывания всех визуальных объектов формы в файл. (Экзешник получается меньше, но появляется дополнительный файл и в результате общий размер не изменяется...)


 
Vovich Дата: Четверг, 29.04.2010, 09:56 | Сообщение # 13
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Передать параметр в уже запущенную программу методом Dragamp Drop?

Как передать параметр в уже запущенную программу методом Dragamp Drop? Например, как сделать, чтобы после перетаскивания файла из Проводника на форму последняя поменяла свой Caption на имя файла?

Ответ 1:
Вот это я как-то нашёл на одном из русских FAQов в Internete. Проверено - работает. Этот модуль отображает в ListBoxе имена отбуксированых файлов из проводника на форму

Code
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, shellapi;

type
TForm1 = class(TForm)
Panel1: TPanel;
ListBox1: TListBox;
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
procedure WMDROPFILES(var Message: TWMDROPFILES); message WM_DROPFILES;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

const SC_DragMove=$F012;
begin
ReleaseCapture;
Panel1.Perform(WM_SYSCommand, SC_DragMove, 0);
end;

(*procedure TForm1.WMDropFiles(var Msg : TMessage);
var
i, n  : word;
Size  : Word;
FName : String;
HDrop : Word;

begin
{1. Получить handle того, что бросили на форму}
HDrop := Msg.WParam;
{2. Сколько файлов брошено?}
n := DragQueryFile(HDrop, $FFFF, NIL, 0);
ShowMessage(IntToStr(HDROP));
{3. Цикл чтения имен файлов}
for i := 0 to (n - 1) do begin

{4. Получить размер имени файла}
Size := DragQueryFile(HDrop, i, NIL, 0);

{5. Размер строки lt255 символов?}
if Size  lt 255 then begin
FName[1] := Chr(Size);
{6. Получить имя файла}
DragQueryFile(HDrop, i, @FName[1], Size + 1);
{-- Далее делаете все, что хотите с этим файлом. --}

//      Form1.ListBox1.Items.Add(FName);
end;

end;
{7. Возвращаем ноль.}
Msg.Result := 0;
{8. Вызов унаследованного обработчика сообщения}
inherited;
end;*)
procedure TForm1.WMDROPFILES(var Message: TWMDROPFILES);
var
NumFiles : longint;
i : longint;
buffer : array[0..255] of char;
begin
{Сколько файдов прибуксовано}
NumFiles := DragQueryFile(Message.Drop,$FFFFFFFF,nil,0);
{Принимаем брошенные файлы}
for i := 0 to (NumFiles - 1) do begin
DragQueryFile(Message.Drop,i,@buffer,sizeof(buffer));
Form1.ListBox1.Items.Add(buffer);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Form1.Handle, True);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DragAcceptFiles(Handle, false);

end;

end.

Ответ 2:
Для обработки событий Dragamp Drop нужно определить два обработчика событий для формы: OnDragOver и OnDragDrop.
Первое событие возникает при протаскивании над формой какого-либо объекта. В параметрах события указывается, кому принадлежит перетаскиваемый объект, т.е. его Источник. При возможности и желании принять этот объект параметру-переменной Accept присваивается значение True.

Второе событие возникает при опускании перетаскиваемого объекта на форму. В нем нужно выполнить все действия по
обработке quotброшенного quot объекта. Дополнительную информацию о нем можно получить из параметров события.
Более подробно можно посмотреть в хелпе, у меня сейчас под рукой нет исходников с примерами.

Ответ 3:

Code
--начало--
Uses ShellApi;
...
private
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
...

procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
CFileName: array[0..MAX_PATH] of Char;
begin
try
if DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH) gt0 then
begin
Form1.Caption:=CFileName;// Вот тут и оно!
Msg.Result := 0;
end;
finally
DragFinish(Msg.Drop);
end;
end;



 
Vovich Дата: Четверг, 29.04.2010, 09:57 | Сообщение # 14
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Подскажите как работать с модемом под win 2000?

Подскажите как работать с модемом под win 2000 написать простейший диалер я с хелпом так и не разобрался

Ответ 1:
У меня есть такой пример. Может поможет разобраться.

Как lthttp://delphi.mastak.ru/cgi-bin/faq.pl?look=1amp id=1-959901315 gt определить состояние модема под Win32?

Пример:

Code
procedure TForm1.Button1Click(Sender: TObject);
var
CommPort : string;
hCommFile : THandle;
ModemStat : DWord;
begin
CommPort := 'COM2';

{Open the comm port}
hCommFile := CreateFile(PChar(CommPort),
GENERIC_READ,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hCommFile = INVALID_HANDLE_VALUE then
begin
ShowMessage('Unable to open '+ CommPort);
exit;
end;

{Get the Modem Status}
if GetCommModemStatus(hCommFile, ModemStat)  lt gt false then begin
if ModemStat and MS_CTS_ON  lt gt 0 then
ShowMessage('The CTS (clear-to-send) is on.');
if ModemStat and MS_DSR_O!

N  lt gt 0 then
ShowMessage('The DSR (data-set-ready) is on.');
if ModemStat and MS_RING_ON  lt gt 0then
ShowMessage('The ring indicator is on.');
if ModemStat and MS_RLSD_ON  lt gt 0 then
ShowMessage('The RLSD (receive-line-signal-detect) is
on.');
end;

{Close the comm port}
CloseHandle(hCommFile);
end;

Ответ 2:
А на кой, извиняюсь, чорт тебе понадобился драйвер для модема? .) На самом деле как такового драйвера для модемов под виндой не существует. Есть только *.inf файлы с АТ коммандами для конфигурирования оного девайса.
(всякие приблуды для работы с войсовыми функциями модемов я в расчет не беру)

Вот. Если же тебе нужно работать с модемом из под дельфей (ну там написать какой нибуть терминал, звонилку, передачу факсов организовать), то используй AsyncPro.

Ответ 3:
Используйте компонент Async Professional. Его можно найти в комплекте Turbo Power. Все для работы с модемом (+факс) и куча различных примеров.


 
Vovich Дата: Четверг, 29.04.2010, 09:58 | Сообщение # 15
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Как написать в Delphi процедуру, которая бы выполняла задержку времени?

Как написать в Delphi процедуру, которая бы выполняла задержку времени. Аналог процедуры Delay в Турбо Паскале.

Ответ:
Писать ничего не надо - есть функция WinAPI:
Sleep(s); // s - это миллисекунды.


 
Vovich Дата: Четверг, 29.04.2010, 09:59 | Сообщение # 16
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Функция занесения в строковую переменную пути моей программки.

Появилась идея: может есть функция, которая мне укажет и переведет в строковую переменную путь моей программки-меню. Т.е. если она находится на диске F:\, то она она в строковую переменную загонит quotF:\ quot, а если моя программа находиться на C:\TRT\ то напишет quotC:\TRT\ quot.

Ответ 1:

Может вот так :

Code
....
var
CurrntDir : String;
.....
procedure TTrmnForm.FormCreate(Sender: TObject);
begin

GetDir(0,CurrntDir); // Получаем полный путь к *.exe

end;
Ответ 2:
можно так:
sPath := ExtractFilePath(Application.ExeName); //Получаем путь к exe



 
Vovich Дата: Четверг, 29.04.2010, 10:01 | Сообщение # 17
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Как работать с компонентой WordParagraphFormat?

Скажите пожайлусоздания и форматирования новых параграфов.

Ответ 1:
Номера страниц можно добавить положив еещ одну компоненту
QRSysData

Ответ 2:
Можно сформировать отчет в Word из Delphi, открыть его в Word, а там уж пусть меняют, что хотят. Это делается с помощью компонентов TWordApplication, TWordDocument на панели Servers.

Ответ 3:
Есть очень замечательный генератор отчетов - FastReport. Он предназначен для построения отчетов, представляет собой сочетание дизайнера, генератора и Preview отчетов. Здесь вы найдете все что вам
необходимо. Компоненты можно посмотреть здесь http://www.fastreport.ru/rus/index.shtml

Ответ 4:
gt После недолгого разбирательства внедрил в свою программу quotпредпросмотр quot.
gt Однако родился вопрос: я ведь могу с помощью QuickRep1 только смотреть, как
gt будет выглядеть страница. А, можно, скажем, во время работы изменить
gt значение размеров полей, добавить номера страниц и т.д.? Иначе какой смысл
gt использовать предпросмотр?!
Можно добавлять динамически объекты в любую форму, и в QuickRep тоже. Или просто заранее выложить туда все заголови, номера страниц и т.д., а в событии OnPrint проверять, нужно ли их печатать (смотря на указания пользователя).
gt И еще, там имеются кнопки, подписи (hint) к которым сделаны на английском.
gt Могу ли я их quotперевести quot - программа-то моя русская. Да и кнопки save и open
gt мне там не очень нужны. Что можете посоветовать?
Перевести -- элементарно. Открой .res ResourceWorkshop'ом или чем-то аналогичным и переведи. У меня получалось :). Если не нужны кнопки -- можно отключить и их, но сложнее. Самое простое -- в ресурсном файле сдвинуть координаты этих кнопок за пределы окна. Тогда их не будет видно :)
gt Оптимально, мне нужен quotпредпросмотр quot как в любом текстовом редакторе -
gt notepad, word.
А в чем отличия?

Ответ 5:
gtя ведь могу с помощью QuickRep1 только смотреть, как
gtбудет выглядеть страница. А, можно, скажем, во время работы изменить
gtзначение размеров полей
Ну почему же только смотреть......
Например:
QRRichText1.Heigth:=
QRRichText1.Lines.LoadFromFile()
QRImage1.Left:=
QRLabel1.Caption:=''
и т.д. и т.п.

gt добавить номера страниц и т.д.
Можно ли через св-ва самого QuickRep - не знаю , но точно можно поюзать QRSysData : QRSysData1.Data:=qrsPageNumber

gtИ еще, там имеются кнопки, подписи (hint) к которым сделаны на английском.
gtМогу ли я их quotперевести quot - программа-то моя русская.
Я думаю - это вряд ли... Попробуйте поискать расширенные QR сомпоненты . В RX к сожалению - нету :(

А вообще ежели так хочеться ВСЁ менять в RunTime просто сделайте ваш QR видимым (поместить на видимую форму)..........

Ответ 6:
Для создания своего предпросмотра надо использовать не метод Preview, а компонент TQRPreview. А кнопочки и надписи какие-угодно придётся делать самому. Что касается изменения значений размеров полей, добавления номеров страниц и т.д.: просто меняешь то, что надо у QuickReportа


 
Vovich Дата: Четверг, 29.04.2010, 10:02 | Сообщение # 18
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Проверка нажатых функциональных клавиш

Функция GetKeyState (Win32API) возвращает статус кнопки клавиатуры, переданной ей в качестве параметра. Статус определяет, что кнопка нажата(down), отпущена(up) или переключена(on/off, как например клавиши NumLock или CapsLock). Если старший разряд возвращаемого значения равен 1, то кнопка нажата, иначе она отпущена. Если младший разряд равен 1, то кнопка включена(состояние On), иначе кнопка выключена(off).

SHORT GetKeyState( int nVirtKey );

Например:

IF GetKeyState(VK_NUMLOCK) = 1 Then ...// Кнопка "NumLock" включена (on)


 
Vovich Дата: Четверг, 29.04.2010, 10:03 | Сообщение # 19
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Выравнивание текста.

Текст выглядит лучше, если он выровнен по двух краям. Для этого пробелы в каждой строке нужно удлинять или укорачивать так, чтобы все строки имели одну длину. Здесь создана процедура GetLine, которая возвращает одну
строку, начиная с заданного символа. Программа находит разницу между шириной текста и реальной длинной строки и при выводе компенсирует эту разницу удлинением пробелов. Эта программа выводит на экран текст из файла C:\text.txt, выравнивая его по двум краям.

Code
type
   ...
   TLine = record
     s: string;
     wrap: boolean;
     length: integer;
   end;

var
   Form1: TForm1;

implementation

{$R *.DFM}

const
   FileName = 'C:\text.txt';

var
   s: string;
   bm: TBitMap;
   LineH: integer;
   MaxTextWidth: integer;

procedure TForm1.FormCreate(Sender: TObject);
var
   F: TFileStream;
   buf: array [0..127] of char;
   l: integer;
begin
   ScrollBar1.Kind := sbVertical;
   bm := TBitMap.Create;
   with bm.Canvas.Font do begin
     Name := 'Serif';
     Size := 12;
   end;
   LineH := bm.Canvas.TextHeight('123');

   if not FileExists(FileName) then begin
     ShowMessage('Can not find file ' + FileName);
     Exit;
   end;
   F := TFileStream.Create(FileName, fmOpenRead);
   repeat
     l := F.Read(buf, 128);
     if l = 128
       then s := s + buf
       else s := s + copy(buf, 1, l);
   until l < 128;
   F.Destroy;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
   PaintBox1.Left := 0;
   PaintBox1.Top := 0;
   PaintBox1.Height := Form1.ClientHeight;
   PaintBox1.Width := Form1.ClientWidth - ScrollBar1.Width;
   ScrollBar1.Left := PaintBox1.Width;
   ScrollBar1.Top := 0;
   ScrollBar1.Height := PaintBox1.Height;
   bm.Width := PaintBox1.Width;
   bm.Height := PaintBox1.Height;
   ScrollBar1.Max := 1000;
   MaxTextWidth := PaintBox1.Width - 20;
end;

function RealTextWidth(s: string): integer;
var
   i: integer;
begin
   result := bm.Canvas.TextWidth(s);
   for i := 1 to Length(s) do
     if s[i] = #9 then
       inc(result, 40 - bm.Canvas.TextWidth(#9));
end;

function GetLine(index: integer): TLine;
var
   i: integer;
   s1: string;
   first: integer;
begin
   if (s[index] = #13) and (s[index + 1] = #10) then begin
     result.s := '';
     result.length := 2;
     result.wrap := true;
     Exit;
   end;
   first := index;
   while (first <= Length(s)) and (s[first] in [#32]) do inc(first);
   i := first;
   repeat
     while (i <= Length(s)) and (not (s[i] in [#9, #32])) and (s[i] <> #13) do
       inc(i);
     s1 := copy(s, first, i - index);
     inc(i);
   until (i >= Length(s)) or (s[i-1] = #13) or (RealTextWidth(s1) > MaxTextWidth);
   if RealTextWidth(s1) > MaxTextWidth then begin
     result.wrap := false;
     if i < Length(s) then begin
       dec(i, 2);
       while (i > 0) and (not (s[i] in [#9, #32])) do dec(i);
       result.Length := i - index;
       while (i > 0) and (s[i] in [#9, #32]) do dec(i);
     end;
     result.s := copy(s, first, i - index + 1);
     if result.s[length(result.s)] = #32 then
       delete(result.s, length(result.s) , 1);
   end else begin
     result.length := i - index + 1;
     s1 := copy(s, first, i - index + 1);
     if length(s1) > 0 then begin
       if s1[Length(s1)] = #9
         then delete(s1, Length(s1), 1);
       if s1[length(s1) - 1] + s1[length(s1)] = #13#10
         then delete(s1, length(s1) - 1, 2);
     end;
     result.s := s1;
     result.wrap := true;
   end;
end;

procedure draw;
var
   i, j: integer;
   line: TLine;
   OneWord: string;
   LineN: integer;
   SpaceCount: integer;
   TextLeft: integer;
   shift, allshift: integer;
   d: integer;
   LineCount: integer;
begin
   with bm.Canvas do begin
     FillRect(ClipRect);
     i := 1;
     LineCount := 0;
     for j := 1 to Form1.ScrollBar1.Position do begin
       line := GetLine(i);
       inc(i, line.length);
       inc(LineCount);
     end;
     LineN := 0;
     repeat
       line := GetLine(i);
       SpaceCount := 0;
       TextLeft := 0;
       for j := 1 to Length(line.s) do
         if line.s[j] = #32 then inc(SpaceCount);
       if line.wrap = false
         then allshift := MaxTextWidth - RealTextWidth(line.s)
         else allshift := 0;
       if allshift > 40 * SpaceCount then allshift := 0;
       shift := 0;
       for j := 1 to Length(line.s) do begin
         if (not (line.s[j] in [#9, #32])) and (j < Length(line.s)) then begin
           OneWord := OneWord + line.s[j];
         end else begin
           OneWord := OneWord + line.s[j];
           if OneWord = #9 then begin
             inc(TextLeft, 40);
           end else begin
             if OneWord = #13#10 then begin
               inc(LineN);
             end else begin
               TextOut(10 + TextLeft, LineN * LineH, OneWord);
               if SpaceCount = 0
                 then d := 0
                 else d := (allshift - shift) div (SpaceCount);
               inc(shift, d);
               inc(TextLeft, TextWidth(OneWord) + d);
               dec(SpaceCount);
             end;
           end;   
           OneWord := '';
         end;
       end;
       inc(i, line.length);
       inc(LineN);
     until (LineN * LineH > Form1.PaintBox1.Heig    repeat
       line := GetLine(i);
       inc(i, line.length);
       inc(LineCount);
     until i >= Length(s);
     inc(LineCount, LineN);
     Form1.ScrollBar1.Max := LineCount -
       Form1.PaintBox1.Height div LineH;
   end;
   Form1.PaintBox1.Canvas.Draw(0, 0, bm);
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
   draw;
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
   draw;
end;



 
Vovich Дата: Четверг, 29.04.2010, 10:04 | Сообщение # 20
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Перекодирование.

Этот алгоритм позволяет перекодировать текст. Реализованы кодировки Windows-1251, KOI8-R, ISO-8859-5 и DOS.
Кодировка – это таблица, в которой указано, например, что символ под номером 160 - это русская буква "а", а под номером 150 – "Ц" и т. д. Кодировки различаются номерами русских букв (как располагать английские буквы договорились). Разные компьютеры в Интернете используют разные кодировки. И поэтому, когда русский текст идет по Интернету, его многократно перекодируют.

Этот алгоритм обеспечивает высокую скорость перекодирования больших объемов данных.

Code
procedure TForm1.Button1Click(Sender: TObject);
var
   code1, code2: TCode;
   s: string;
   c: char;
   i: integer;
   chars: array [char] of char;
   str: array [TCode] of string;
begin
   case ComboBox1.ItemIndex of
     1: code1 := koi;
     2: code1 := iso;
     3: code1 := dos;
     else code1 := win;
   end;
   case ComboBox2.ItemIndex of
     1: code2 := koi;
     2: code2 := iso;
     3: code2 := dos;
     else code2 := win;
   end;
   s := Memo1.Text;

   Str[win] := 'АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя';
   Str[koi] := 'юЮаАбБцЦдДеЕфФгГхХиИйЙкКлЛмМнНоОпПяЯрРсСтТуУжЖвВьЬыЫзЗшШэЭщЩчЧъЪ';
   Str[iso] := 'РрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяа№бёвђгѓдєеѕжізїијйљкњлћмќн§оўпџ';
   Str[dos] := 'Ђ ЃЎ‚ўѓЈ„¤…Ґ†¦‡§€Ё‰©ЉЄ‹"Њ¬Ќ­Ћ®ЏЇђа'б'в“г”д•е–ж—з�™йљк›лњмќнћоџп';

   for c := #0 to #255 do
     Chars[c] := c;

   for i := 1 to Length(Str[win]) do
     Chars[Str[code2][i]] := Str[code1][i];

   for i := 1 to Length(s) do
     s[i] := Chars[s[i]];

   Memo2.Text := s;
end;



 
Форум » Компьютеры, телекоммуникации, ПО... » Программирование » FAQ по Delphi
Страница 2 из 3«123»
Поиск: