Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

про tStringList.Create   Найти похожие ветки 

 
officeman   (2004-11-10 07:30) [0]

Уважаемые мастера. подскажите где ошибка. я читаю текстовый файл с четвертой строки. строку делю на части по специальному символу разделителю. и записываю в ListView1 таблицы. каждая часть строки в отдельный ранее созданный столбик.

var

         Form1: TForm1;
 DelimitedText: String;
     Delimited: Char;
            ss: integer;
ai,h1,h2,h3,h4,h5,h6,h7,h8,h9,h10:integer;
pA,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10: string;

 I: Integer;
 ListItem: TListItem;
 NewColumn: TListColumn;
FileName1,FileName2: TextFile;
Ch: string;
// ...

procedure TForm1.Button2Click(Sender: TObject);
var
f:tStrings;
TempLine:String;
ir:integer;
begin
ss:=0;
Memo1.Clear;
if OpenDialog1.Execute then begin

f:=tStringList.Create();
f.LoadFromFile(OpenDialog1.Filename); //открываю тектовый файл

for ir:=3 to f.Count-1 do begin  // Читаю тектовый с четвертой строки
TempLine:=f.Strings[ir]; // создаю список строк

//------------------------------------------------------------- -
for ai:=1 to length(TempLine) do begin // делю первую(4) строку. т.е. ищё в ней разделители и считаю их.
TempLine:=f.Strings[ir];
if TempLine[ai]=";" then begin
ss:=ss+1;
pA:=TempLine; // исходная строка
if ss=1 then begin
p1:=Copy(f.Strings[ir],1,ai-1); // первая найденная чтость до разделителя
h1:=ai; //
end;
if ss=2 then begin
p2:=Copy(pA,h1+1,ai-h1-1); // вторая найденная часть до разделителя
h2:=ai;
end;

end;
end;
//------------------------------------------------------------- -
Memo1.Lines.add(TempLine); // запись в мемо1. для проверки строк которые были обработаны
lv.Items.Add.Caption:=p1; // добаляю в ListView1
end;
end;

Вот тут почемуто проблема
lv.Items.Add.Caption:=p1; // добаляю в ListView1
Добавляет элементы но только первую часть - первой строки.
Почему? подскажите!

Текстовый файл выглядит так: (1строка-отвечает за описание таблицы, с 4строки начинаются данные)
Код;Товар;Производство;Наличие;Цена;

1001;Лак паркетный 2,5 кг;Турция;есть;
2544;Клей ПВА 3 кг;Россия;есть;
2662;Эмаль баклажановая 0,85 кг;Германия;нет;


 
officeman   (2004-11-10 08:14) [1]

продолжение.
после добавления получается.
1001;Лак паркетный 2,5 кг;Турция;есть;
1001;Лак паркетный 2,5 кг;Турция;есть;
1001;Лак паркетный 2,5 кг;Турция;есть;

вместо
1001;Лак паркетный 2,5 кг;Турция;есть;
2544;Клей ПВА 3 кг;Россия;есть;
2662;Эмаль баклажановая 0,85 кг;Германия;нет;

немогу понять в чём дело.


 
officeman   (2004-11-10 09:32) [2]

Удалено модератором


 
ЮЮ ©   (2004-11-10 09:49) [3]

этот цикл воовще не работает:
for ir:=3 to f.Count-1 = for ir := 3 to 2


 
ЮЮ ©   (2004-11-10 09:55) [4]

И обрати внимание на:
[Warning]: For loop control variable must be simple local variable

перенеси всю эту чушь
           ss: integer;
ai,h1,h2,h3,h4,h5,h6,h7,h8,h9,h10:integer;
pA,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10: string;
в var метода


 
officeman   (2004-11-10 10:33) [5]

Да всё нормально я разобрался!
просто обнуление переменной (ss1:=0) надо было тоже в цикл поставить. Ура! работает! =)
Я собрался разрботать свою информационную бд, разобраться и немного поднакопить опыть программирования.

У меня проблемы в криптографии! у тебя есть опыт?


 
sniknik ©   (2004-11-10 11:21) [6]

> Я собрался разрботать свою информационную бд, разобраться и немного поднакопить опыть программирования.
на основе текстовых файлов? проблемно. как индексы делать будеш? сортировка(в памяти)/фильтрация/использование с базой стандартных взаимодействующих компонент/и т.д.
в общем тебя ожидают трудности, но ради опыта, можно и "пободаться"  ;о)).
посмотри
х:\Program Files\Borland\Delphi7\Demos\Db\TextData
там пример "правильного" компонента датасета на текстовый файл, только в одну колонку, в принципе можно доработать.


 
officeman   (2004-11-10 13:12) [7]

спасибо! обязательно попробую!
Проблема лишь состояла в том чтобы можно было налету создавать таблицы с данными! подставляя и использую данные из разных текстовых файлов. Когдато давно хотел написать ИБ как коммерческий проект.


 
officeman   (2004-11-10 13:19) [8]

Итого получилось! =)
на форме надо: TListView имя в модуле lv
а также TOpenDialog1


var
Form1: TForm1;
DelimitedText: String;
Delimited: Char;
ss,sh: integer;
ai,h1,h2,h3,h4,h5,h6,h7,h8,h9,h10:integer;
pA,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10: string;
I,Complete: Integer;
ListItem: TListItem;
NewColumn: TListColumn;
FileName1,FileName2: TextFile;
Ch: string;
fs:tsearchrec;
f:tStrings;
TempLine:String;
ir:integer;
implementation

{$R *.dfm}

procedure TForm1.addNewItem(f: TSearchRec);
var
ih:integer;
begin
with form1.LV.items.add, f do begin
if (attr and faDirectory) <> 0
then begin
ImageIndex:=0;
end else ImageIndex:=1;
caption:=p1;
subitems.add(p2);
subitems.add(p3);
subitems.add(p4);
subitems.add(p5);
subitems.add(p6);
subitems.add(p7);
subitems.add(p8);
subitems.add(p9);
subitems.add(p10);
//end;
end;
end;

procedure TForm1.N3Click(Sender: TObject);
var
f:tStrings;
TempLine:String;
ir2:integer;
ai2:string;
begin
if OpenDialog1.Execute then begin
AssignFile(FileName1, OpenDialog1.Filename);
Reset(FileName1);
readln(FileName1,Ch);
TempLine:=Ch;
CloseFile(FileName1);
end;
for ai:=1 to length(TempLine) do begin
if TempLine[ai]=";" then begin
sh:=sh+1;
form1.Caption:=inttostr(ss);
pA:=TempLine;
if sh=1 then begin
p1:=Copy(pA,1,ai-1);
h1:=ai;
end;
if sh=2 then begin
p2:=Copy(pA,h1+1,ai-h1-1);
h2:=ai;
end;
if sh=3 then begin
h3:=ai;
p3:=Copy(pA,h2+1,ai-h2-1);
end;
if sh=4 then begin
h4:=ai;
p4:=Copy(pA,h3+1,ai-h3-1);
end;
if sh=5 then begin
h5:=ai;
p5:=Copy(pA,h4+1,ai-h4-1);
end;
if sh=6 then begin
h6:=ai;
p6:=Copy(pA,h5+1,ai-h5-1);
end;
if sh=7 then begin
h7:=ai;
p7:=Copy(pA,h6+1,ai-h6-1);
end;
if sh=8 then begin
h8:=ai;
p8:=Copy(pA,h7+1,ai-h7-1);
end;
if sh=9 then begin
h9:=ai;
p9:=Copy(pA,h8+1,ai-h8-1);
end;
if sh=10 then begin
h10:=ai;
p10:=Copy(pA,h5+1,ai-h9-1);
end;
end;
end;
try
with LV do
 begin
if  p1<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p1;
end;
if  p2<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p2;
end;
if  p3<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p3;
end;
if  p4<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p4;
end;
if  p5<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p5;
end;
if  p6<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p6;
end;
if  p7<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p7;
end;
if  p8<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p8;
end;
if  p9<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p9;
end;
if  p10<>"" Then begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p10;
end;
lv.Columns[1].AutoSize:=true;
end;
Finally
//----------------------------------------------------------------- -
//if OpenDialog1.Execute then begin
f:=tStringList.Create();
f.LoadFromFile(OpenDialog1.Filename);
for ir:=3 to f.Count-1 do begin  

//------------------------------------------- -
if ir=f.Count-1 then begin
lv.Columns[0].Width:=36;
lv.Columns[1].Width:=200;
LV.Items.Item[0].Selected:=true;
showmessage("Complete");
end;
//------------------------------------------- -

ss:=0;
TempLine:=f.Strings[ir];
try
for ai:=1 to length(TempLine) do begin
if TempLine[ai]=";" then begin
ss:=ss+1;
if ss=1 then begin
p1:=Copy(TempLine,1,ai-1);
h1:=ai;
end;
if ss=2 then begin
p2:=Copy(TempLine,h1+1,ai-h1-1);
h2:=ai;
end;
if ss=3 then begin
h3:=ai;
p3:=Copy(TempLine,h2+1,ai-h2-1);
end;
if ss=4 then begin
h4:=ai;
p4:=Copy(TempLine,h3+1,ai-h3-1);
end;
if ss=5 then begin
h5:=ai;
p5:=Copy(TempLine,h4+1,ai-h4-1);
end;
if ss=6 then begin
h6:=ai;
p6:=Copy(TempLine,h5+1,ai-h5-1);
end;
if ss=7 then begin
h7:=ai;
p7:=Copy(TempLine,h6+1,ai-h6-1);
end;
if ss=8 then begin
h8:=ai;
p8:=Copy(TempLine,h7+1,ai-h7-1);
end;
if ss=9 then begin
h9:=ai;
p9:=Copy(TempLine,h8+1,ai-h8-1);
end;
if ss=10 then begin
h10:=ai;
p10:=Copy(TempLine,h5+1,ai-h9-1);
end;
end;
end;
finally
end;
addNewItem(fs);
end;
end;
end;


и текстовый файл такой структуры: (первая строка описывает столбцы, с четвертой строки данные)

tovar.txt:
Код;Товар;Производство;Фасовка;Цена1;Цена2;Цена3;

6226;В\Д "Поли-Р"    Fassadenfarbe  14  кг;Деруфа;14 кг     ;14.05;21.07;19.51;17.27
6793;В\Д "Поли-Р"    Fassadenfarbe  14  кг В;Деруфа;14 кг     ;18.5;21.07;19.51;17.27
6227;В\Д "Поли-Р"    Fassadenfarbe  7  кг;Деруфа;7 кг      ;7.01;10.37;9.6;8.5
6794;В\Д "Поли-Р"    Fassadenfarbe  7  кг В;Деруфа;7 кг      ;9.19;10.37;9.6;8.5
6206;В\Д "Поли-Р"    Mattlatex  14 кг;Деруфа;14 кг     ;11.4;17.57;16.27;14.4
6795;В\Д "Поли-Р"    Mattlatex  14 кг В;Деруфа;14 кг     ;15.43;17.57;16.27;14.4
6628;В\Д "Поли-Р"    Mattlatex  14 кг м/у;Деруфа;14 кг     ;11.38;18.81;17.42;15.42
6667;В\Д "Поли-Р"    Mattlatex  14 кг м/у;Деруфа;14 кг     ;12.5;18.81;17.42;15.42
7083;В\Д "Поли-Р"    Mattlatex  14 кг м/у В;Деруфа;14 кг     ;13.18;18.81;17.42;15.42
6218;В\Д "Поли-Р"    Mattlatex  3,5  кг;Деруфа;3,5 кг    ;3.84;5.57;5.16;4.57
6796;В\Д "Поли-Р"    Mattlatex  3,5  кг м/у;Деруфа;3,5 кг    ;3.93;5.95;5.51;4.88
6208;В\Д "Поли-Р"    Mattlatex  7 кг;Деруфа;7 кг      ;6.15;9.09;8.42;7.45
6797;В\Д "Поли-Р"    Mattlatex  7 кг;Деруфа;7 кг      ;5.82;9.09;8.42;7.45
6648;В\Д "Поли-Р"    Mattlatex  7 кг м/у;Деруфа;7 кг      ;6.27;9.73;9.01;7.98
7082;В\Д "Поли-Р"    Mattlatex  7 кг м/у В;Деруфа;7 кг      ;6.78;9.73;9.01;7.98
6220;В\Д "Поли-Р"    Superweiss   14  кг;Деруфа;14 кг     ;13.73;21.64;20.04;17.74
6798;В\Д "Поли-Р"    Superweiss   14  кг;Деруфа;14 кг     ;14.07;21.64;20.04;17.74
6696;В\Д "Поли-Р"    Superweiss   14  кг м/у;Деруфа;14 кг     ;14.44;23.16;21.44;18.98
7434;В\Д "Поли-Р"    Superweiss   14  кг м/у В;Деруфа;14 кг     ;15.47;23.16;21.44;18.98


 
sniknik ©   (2004-11-10 13:20) [9]

IB? опоздал уже написан, и комерческий и фриваре. ;о))
и текст?! неподходяшая основа для базы, лучше тогда свой формат разработать.


 
officeman   (2004-11-10 13:21) [10]

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


 
Romkin ©   (2004-11-10 13:34) [11]

ТАк. Быстренько читать учебник по Паскалю. Главу "Массивы"


 
officeman   (2004-11-10 15:13) [12]

to romkin , приведи пример. что ты имел ввиду под массивом в моём случае?


 
ЮЮ ©   (2004-11-11 03:23) [13]

Надо начинать не с массивов, а с алгоритмов, изучить один из китов алгоритма - его велмчество ЦИКЛ :)


 
kostan ©   (2004-11-11 04:21) [14]

1)однако стиль ???  зачем так много if?
желательно просто циклически ... вызывать процедуру(ы) обработки!

2)динамические массивы работают на два порядка быстрее
чем базы:) (типа IB)  ... и на порядок быстрее TStrings
(правда статические еще быстрее %на 30)
да и нужна ли вам такая скорость (какие объемы данных ?)


 
jack128 ©   (2004-11-11 04:43) [15]

kostan ©   (11.11.04 4:21) [14]
2)динамические массивы работают на два порядка быстрее
чем базы:) (типа IB)  

Ага.  Когда сортируют пять записей. А когда 5 миллонов,то...


 
officeman   (2004-11-11 14:33) [16]

Как "правильно" записать этот кусок кода for.......
без использования if.
Вобщем-то и мои каракули работают неплохо. только у меня получается ограничение на 10 частей (делиметерс),
а как записать чтоб небыло ограничения.

ss:=0;
TempLine:=f.Strings[ir];
try
for ai:=1 to length(TempLine) do begin
if TempLine[ai]=";" then begin
ss:=ss+1;
if ss=1 then begin
p1:=Copy(TempLine,1,ai-1);
h1:=ai;
end;
if ss=2 then begin
p2:=Copy(TempLine,h1+1,ai-h1-1);
h2:=ai;
end;
if ss=3 then begin
h3:=ai;
p3:=Copy(TempLine,h2+1,ai-h2-1);
end;
if ss=4 then begin
h4:=ai;
p4:=Copy(TempLine,h3+1,ai-h3-1);
end;
if ss=5 then begin
h5:=ai;
p5:=Copy(TempLine,h4+1,ai-h4-1);
end;
if ss=6 then begin
h6:=ai;
p6:=Copy(TempLine,h5+1,ai-h5-1);
end;
if ss=7 then begin
h7:=ai;
p7:=Copy(TempLine,h6+1,ai-h6-1);
end;
if ss=8 then begin
h8:=ai;
p8:=Copy(TempLine,h7+1,ai-h7-1);
end;
if ss=9 then begin
h9:=ai;
p9:=Copy(TempLine,h8+1,ai-h8-1);
end;
if ss=10 then begin
h10:=ai;
p10:=Copy(TempLine,h5+1,ai-h9-1);
end;
end;
end;
finally
end;
addNewItem(fs);
end;
end;


 
msguns ©   (2004-11-11 14:54) [17]

Ух, щас придет ЮЗ ! ЧТО БУДЕТ !!!!!!!! Э8<O


 
sniknik ©   (2004-11-11 16:34) [18]

если много ифов с одной переменной подряд то правильнее будет использовать case
но в этом случае и это неправильно, т.к. может быть разное количество сравнений.
можно и поправить, если бы был понятен смысл манипуляций (обьясни его простыми словами), может быть будет полная замена логики (зачем тогда это оптимизировать?)

p.s. рановато за коммерческие проекты взялся, имхо. ;)


 
MetalFan ©   (2004-11-11 16:51) [19]


> ss:=0;
> TempLine:=f.Strings[ir];
> ...
> ...
> addNewItem(fs);
> end;
> end;

жуткий код! абсолютно нечитаемый(((
даже разбираться не хочется!


 
jack128 ©   (2004-11-11 18:28) [20]

officeman   (11.11.04 14:33) [16]
end;
end;
end;
finally
end;
addNewItem(fs);
end;
end;

вот за эти 7 строк - четвертовать через повешенье. Сначало учимся делать отступы, а потом выкладываем код в форум.


 
ЮЮ ©   (2004-11-12 03:58) [21]

Как "правильно" записать этот кусок кода for.......

Для особо внимательных, повторяю:
ЮЮ ©   (11.11.04 03:23) [13]
Надо начинать не с массивов, а с алгоритмов, изучить один из китов алгоритма - его велмчество ЦИКЛ :)

Ты ведь и так последовательно выполняешь одни и те же действия, количество которых, на сам деле, определяется содержимым TempLine. Продумай алгоритм, нолучишь нормальный код.


 
officeman   (2004-11-12 07:34) [22]

to MetalFan, прочитай мой пост номер 8, и тебе станет всё ясно!

to ALL. да конечно я сам его сделаю. Код будет мааааленький всмысле кломпактный и работать будет!

Я задал рабочий вопрос и никто не поддержал. залез на этот форум первый раз за посление полгода(год)... ладно ладно..

Officeman, сам дойдёт до истины!


 
officeman   (2004-11-12 08:03) [23]

родил.

procedure TForm1.Button1Click(Sender: TObject);
var
ai,h1:integer;
p1: string;

begin
h1:=0;
for ai:=1 to length(str.Caption) do begin
if str.Caption[ai]=";" then begin
p1:=Copy(str.Caption,h1+1,ai-h1-1);
h1:=ai;
try
with LV do
 begin
   NewColumn := Columns.Add;
   NewColumn.Caption := p1
end;
finally
end;
end;
end;


 
ЮЮ ©   (2004-11-12 08:26) [24]

Молодца!
Осталость учесть, что после последнего значения ";" не стоит

И убери, ИМХО,
 try
 finally
 end
т.к. не вижу здесь "опасного" кода

З.Ы. Почему все строки добавляются как Columns.Add, а не создается для каждой строки новый TListItem, а уже там TListItem.SubItems.Add


 
sniknik ©   (2004-11-12 08:33) [25]

уже лучше, понятнее, что делаеш (не совсем конечно, непоказаны типы используемых переменных, а догадки неравноценны знанию), но еще непонятно зачем. (от этого прямо зависит лучшее решение)

так понимаю на основе TListView пытаешся таблицу(оно же грид) сделать? совет в [6] видимо полностью проигнорировал. хм. ну чтож, на ошибках учатся. но только не надо разных обвинений, никто в здравом уме не будет повторять чужие ошибки чтобы разобратся и написаить их оптимизированный вариант... это твоя прерогатива.

p.s. надеюсь скажеш как твой коммерческий продукт будет называться? чтобы не дай бог не купить по ошибке. ;о))


 
officeman   (2004-11-12 10:33) [26]

Спасибо всем!

to ЮЮ.. ";"  он там необязателен так как дальше идёт end;
про TListItem я забыл! исправлюсь!

to sniknik! =) да неволнуйся! усё будет хорошо!
Да тема проста! Некоторая организация поросила сделать электронный каталог их продукции. ну я сделал его с использование Paradox.. установочный пак весит 12 метров.  прораммой пользуются организации по региону уже примерно пол-года. просто я решил её переписать чтобы можно было её с лёгкостью распростанять через интренет! и на основе разработок которые будут мной изучены - написать интернет магазин. в будущем. в настоящей базе пока что 400 позиций! каждая из которых имеет свою карточку в виде файла с описанием и фоткой.

да! задача написать компактный броузер для вкдкния таблиц источником которых являются текстовые файлы. Почему я выбрал текстовые файлы. на мой взгляд они гибки и удобны в работе. любой xls,doc,rtf документ за 2-3 минуты возможно перевести в текстовый файл с разделителями. который легко использовать дальше.

может у вас есть дельный совет.?


 
Anatoly Podgoretsky ©   (2004-11-12 10:49) [27]

officeman   (12.11.04 10:33) [26]
Некоторая организация поросила сделать электронный каталог их продукции. ну я сделал его с использование Paradox.. установочный пак весит 12 метров.

Как умудрился сделать так много, здесь должно быть всего 4-4 мб


 
sniknik ©   (2004-11-12 12:01) [28]

> может у вас есть дельный совет.?
бесполезно, ты же уже все решил, а я только за координальную смену логики. даже оставляя текст, что уже нехорошо, все одно делать нужно на основе рекордсета, иначе придется переписывать очень многое, что уже есть в стандартном дельфи и проверено не раз, а у тебя... не уверен что у тебя лучше чем у борланда получится.

кстати по поводу гибкости и удобства в работе, ... полностью несогласен, что это за удобство если для удаления одной записи в начале придется всю таблицу(txt файл) перезаписывать... разделители выпадают из символов пригодных к использованию в полях в базе(или сильно затрудняют разбор, если придумаеш "обходной маневр"), многопользовательского доступа не будет и в помине, ссылки на поля(быстрые) работать не будут т.к. записи переменной длинны, и чтобы сослаться на 2153ю строку/запись (например) нужно будет все до этого прочитать. или держать все в памяти (тоже вариант) но тогда тебе нужно на твоих 400-4000 записях и остановиться на большее не замахиваться. спорное "удобство". а индексы/сортировки/фильтры/связи/...? считаеш что это ненужные свойства баз? цифры/даты если понадобятся будеш держать в строке (а где же еще файл то текстовый) зничит или зависиш от локальных настроек или свой формат тчательно продуманый (сомнительно) или глюки непонятные от машины к машине.
... по мере написания сам сможеш добавить, разных "прелестей" текстового формата.


 
officeman   (2004-11-12 12:28) [29]

to Anatoly Podgoretsky
основной объем занимает библиотека товара: описание, фотка.
это около 6 мб., плюс екзешник программы и dll для работы под разными ОС ещё на 4,5 м., плюс установщик(от InstallShield)
гдето так всё и наберается 12. Наверно я с DLL перестарался.
Еслибы можно было работать с таблицами парадокс без использования DLL... я бы в жизни не подумал бы об своей реализации.
Midas - я тоже пробовал. полностью не разобрался! непонравилась её работа под некоторыми ОС.

to sniknik
конечно мой грид(и датасет) близко не стоят с реальными уже существующими.  хм. задача только представлять данные, которые пользователь будет получать в виде файла обновления, используя специальный встроенный клиент. (или по электронной почте).

только для представления данных. без редактирования и пр.
Логичнее написать свой (как это сделал я) или использовать существующий, в моей задаче?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.034 c
1-1100411021
pumberman
2004-11-14 08:43
2004.11.28
Помогите с xor разобраться


3-1098941559
Николай
2004-10-28 09:32
2004.11.28
DBGrid, Query и циклы


1-1100342513
S@lik
2004-11-13 13:41
2004.11.28
Доступ к нити


3-1099428289
Александр--
2004-11-02 23:44
2004.11.28
Доля выполнения запроса ADO?


8-1093707276
Anderson
2004-08-28 19:34
2004.11.28
Как сохранить TBitmap, как TIcon?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский