Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

"Случайная" переменная?   Найти похожие ветки 

 
markers ©   (2006-10-19 10:26) [0]

Можно-ли реализовать и как %subj ? Заренее Спасибо!


 
DrPass ©   (2006-10-19 10:27) [1]

Это как? Закрыть глаза и ударить кулаком по клавиатуре?


 
Elen ©   (2006-10-19 10:28) [2]


> markers

В смысле случайное значение (Random)?


 
markers ©   (2006-10-19 10:30) [3]

to DrPass
Извиняюсь, что не уточнил! Мне нужно в run-time завести случайную переменную! В некоторых других языках это возможно!
Точней я скажу так, как создать и заюзать переменную хранящуюся в другой переменной?


 
Ketmar ©   (2006-10-19 10:31) [4]

>[3] markers(c) 19-Oct-2006, 10:30
>Точней я скажу так, как создать и заюзать переменную
>хранящуюся в другой переменной?
обалдеть уточнил. стало ещё непонятней.


 
Elen ©   (2006-10-19 10:38) [5]


> markers

Круто! Юзай тип Variant


 
markers ©   (2006-10-19 10:39) [6]

...
function catfill(parentid:string="0"; pnod : TTreeNode = nil):Boolean;
 var nod: TTreeNode;
     Rsname, Rsid: String; // Надо чтоб имена переменных были разными при вызове этой функции
 begin
  ResRow:=DB.exec("SELECT * FROM mag_categories WHERE parentid = "+onequote+
    parentid+onequote+" AND cattype <> "+onequote+"Deleted"+onequote+" ORDER " +
    "BY `name` ASC");
  Rsname:=VarToStr(ResRow[4]); // А здесь в переменную со случайным именем
  Rsid:=VarToStr(ResRow[0]); // нужно занести значение
  while not ResRow.eof do
   begin
    nod := Tree.Items.AddChild(pnod,Rsname); // И поюзать их
    nod.Data := Pointer(StrToInt(Rsid)); // И здесь
    catfill(Rsid,nod); // И тут
    ResRow.next;
   end;
  // А тут переменную со случайным именем можно освободить (если необходимо)
 end;


Просто у меня проблема, у меня при этой рекурсии перезаписываются переменные :( Я подумал ожет таким способом можно сделать?


 
markers ©   (2006-10-19 10:42) [7]

Просто в PHP такой код (Только написанный на PHP естественно) работает прекрасно без случайных переменных....


 
Elen ©   (2006-10-19 10:45) [8]


>  В некоторых других языках это возможно!

Это в каких?


 
Elen ©   (2006-10-19 10:47) [9]


> у меня при этой рекурсии перезаписываются переменные

Юзай глобальный массив


 
Джо ©   (2006-10-19 10:50) [10]

Вредное влияние PHP на рассудок начинающих программистов все еще до конца не оценено :o)


 
markers ©   (2006-10-19 10:55) [11]

Elen ©   (19.10.06 10:47) [9]
Можно поподробней? Плиз!


 
markers ©   (2006-10-19 10:58) [12]

Джо ©   (19.10.06 10:50) [10]
Я на самом деле давно уже в Дельфях пишу, но просто по работе оно надо редко, а дома лень что-то писать, по этому получается я в Дельфях набегами работаю. Естественно что-то забывается и т.д. (Тем более что я более полугода в PHP програмил после дельфей :) :( )


 
Плохиш ©   (2006-10-19 10:59) [13]


> markers ©   (19.10.06 10:39) [6]
> ...
> function catfill(parentid:string="0"; pnod : TTreeNode =
> nil):Boolean;
>  var nod: TTreeNode;
>      Rsname, Rsid: String; // Надо чтоб имена переменных
> были разными при вызове этой функции

При каждом вызове, они и будут разными переменными.


 
Elen ©   (2006-10-19 11:01) [14]


> Просто у меня проблема, у меня при этой рекурсии перезаписываются
> переменные

Ну и что? Зачем тебе старые данные если ты перед вызовом рекурсии их обрабатываеш.


 
markers ©   (2006-10-19 11:10) [15]

Elen ©   (19.10.06 11:01) [14]
просто у меня в БД лежат данные и мне нужно построить дерево вида
-кат1
--подкат1
--подкат2
---подподкат1
----...
--подкат3
--..
-кат1
-...

Берём первый корневой кат, проверяем нет ли у него детей (Вызовом самого себя)...... возвращаемся на первый вызов, Берём второй корневой кат ...... и т.д.


 
Ketmar ©   (2006-10-19 11:10) [16]

>[6] markers(c) 19-Oct-2006, 10:39
>Просто у меня проблема, у меня при этой рекурсии
>перезаписываются переменные
да? точно? прям-таки "перезаписывабтся"? гражданин соврамши. ошибка у тебя совсем в другом месте. а конкретно -- какого ангела ты ожидаешь, что внешняя переменная ResRow сохранит свое значение после возврата из рекурсивного вызова? ты её где-то сохраняшь?


 
Плохиш ©   (2006-10-19 11:16) [17]


> Ketmar ©   (19.10.06 11:10) [16]

Спокойно, он же ничего не читал и читать не собирается. Вот потопчет чуток кнопки и пойдёт займётся своими прямыми обязанностями ;-)


 
Elen ©   (2006-10-19 11:19) [18]


> markers

Помоему код в [6] вообще не годиться для такого. Зачем тебе постоянно делать Select?


 
Ketmar ©   (2006-10-19 11:19) [19]

>[17] Плохиш(c) 19-Oct-2006, 11:16
>Спокойно, он же ничего не читал и читать не собирается.
ну зачем так сразу? а вдруг просто не спал неделю? %-)


 
markers ©   (2006-10-19 11:21) [20]

Ketmar ©   (19.10.06 11:10) [16]
Блин! спасибо тебе!!!! Всё работает !!!!!!!
Всем спасибо!!!!!


 
markers ©   (2006-10-19 11:23) [21]

Просто говорю, уже давно не програмил позабыл всё на.... :( ПО этому я сразу и пошёл писать в раздел "начинающим"...... эх.....


 
Ketmar ©   (2006-10-19 11:32) [22]

>[21] markers(c) 19-Oct-2006, 11:23
>ПО этому я сразу и пошёл писать в раздел "начинающим"......
вот именно. умно. пошёл бы в другое -- получил бы по самое немогу. %-))


 
Ketmar ©   (2006-10-19 11:32) [23]

а пинок мой был, кстати, за то, что ты выдвигаешь совершенно кривые прдположения столь безапелляционным тоном. %-)


 
markers ©   (2006-10-19 12:10) [24]

Ketmar ©   (19.10.06 11:32) [25]
Ketmar ©

у меня было сделано кривым способом, пытался сделать на рекурсию но то что она глобальная не обратил внимание и ничего не помогало, воть я уже самые пародоксальные идеи выдвигал, хотя сам понимаю что сие полный изврат :) Просто очень хотелось рекурсию :)


 
Сергей М. ©   (2006-10-19 12:19) [25]


> Elen ©   (19.10.06 11:19) [18]
> Зачем тебе постоянно делать Select?


Все верно он делает, не смущай автора.
Автор визуализирует древовидную структуру, хранящуюся в БД.
Правильные результаты визуализации м.б. получены только так.


 
Palladin ©   (2006-10-19 12:23) [26]


> Правильные результаты визуализации м.б. получены только
> так.

да ну конечно только так...


 
Сергей М. ©   (2006-10-19 12:27) [27]


> Palladin ©   (19.10.06 12:23) [26]


К чему сарказм ?)

Если возражаешь - приведи контраргументы)...


 
Ketmar ©   (2006-10-19 12:41) [28]

>[27] Сергей М.(c) 19-Oct-2006, 12:27
>Если возражаешь - приведи контраргументы)...
есть ещё куча всяких способов. с ходу: получить всё скопом один раз и потом уже разгребать.


 
Elen ©   (2006-10-19 12:43) [29]


> Правильные результаты визуализации м.б. получены только
> так.

Не спорю, А скорость выполнения такого не упадет?


 
Сергей М. ©   (2006-10-19 12:45) [30]


> Ketmar ©   (19.10.06 12:41) [28]


Это частный случай.
Такая логика запросто даст сбой при определенных условиях.
Но это уже тема для обсуждения в "Базы".


 
Сергей М. ©   (2006-10-19 12:46) [31]


> Elen ©   (19.10.06 12:43) [29]


О скорости речи не идет, да и особый это разговор.


 
Palladin ©   (2006-10-19 13:02) [32]


> Такая логика запросто даст сбой при определенных условиях.

например?


 
Сергей М. ©   (2006-10-19 13:12) [33]


> Palladin ©   (19.10.06 13:02) [32]


> например?


Например, приведи текст того самого единственного "универсального" запроса, который , по-твоему мнению, заменит ту самую кучу запросов, в неоходимости которой ты засомневался в [26].

И я тебе распишу в подробностях конкретную ситуацию, при которой твой "универсальный" запрос окажется у кота под хвостом)


 
Palladin ©   (2006-10-19 13:16) [34]

хм...

select id,id_parent from tree


 
Сергей М. ©   (2006-10-19 13:22) [35]


> Palladin ©   (19.10.06 13:16) [34]


Так.

Приведи фрагмент НД, сформированный твоим запросом ... И обоснуй, что записи в этом НД должны следовать именно так и не иначе ...


 
Palladin ©   (2006-10-19 13:26) [36]


0 Null
1 Null
2 0
3 0
4 2
5 2



> И обоснуй, что записи в этом НД должны следовать именно так и не иначе ...


зачем? мне по барабану в каком порядке мне вернулся НД...


 
Сергей М. ©   (2006-10-19 13:48) [37]


> Palladin ©   (19.10.06 13:26) [36]
>
>
> 0 Null
> 1 Null
> 2 0
> 3 0
> 4 2
> 5 2
>


Теперь представь себе, что выглядит он иначе:

2 0
3 0
0 Null
1 Null

И ?


> мне по барабану в каком порядке мне вернулся НД


Я так и понял, что тебе по барабану)

А вот автору, к примеру, не по барабану. Он получил unidirectional-НД (содержимое см. выше) и движется по нему в порядке следования записей (а как быть иначе, если он однонаправленный ?).

Ну и о каком визуальном построении может идти речь, если первая же запись ссылается на родителя, который фигурирует лишь в 3-й записи в порядке следования записей в данном НД ?

думай)...


 
Palladin ©   (2006-10-19 14:13) [38]


> Теперь представь себе, что выглядит он иначе:
>
> 2 0
> 3 0
> 0 Null
> 1 Null
>
> И ?


что И? я помоему достаточно ясно выразился сказав что мне не принципиально наличие какого либо упорядочивания в НД... и я тоже буду двигаться только в одном направлении... если не веришь, то потерпи немного: я до дома дойду и напишу тебе великую тайну реализации...


 
Сергей М. ©   (2006-10-19 14:34) [39]


> Palladin ©   (19.10.06 14:13) [38]


Ради истины потерплю.


 
Palladin ©   (2006-10-19 17:15) [40]

момент истины


procedure TForm1.Button1Click(Sender: TObject);
Type
PItem=^TItem;
TItem=Record
 nID:Integer;
 strCaption:String;
End;

Var
theUnlinked,
theTree:TWRIntegerMap;
q:TADOQuery;

n,nID,nIDParent:Integer;
strCaption:String;

Function _CreateNode(p_theParent:TTreeNode;p_nID:Integer;Const p_strCaption:String):TTreeNode;
Var
 i,n:Integer;
Begin
 Result:=TreeView.Items.AddChild(p_theParent,p_strCaption);
 Result.Data:=Pointer(p_nID);
 If theUnlinked.Find(p_nID,n) Then
  Begin
   For i:=0 to TList(theUnlinked.ObjectData[n]).Count-1 Do
    Begin
     With PItem(TList(theUnlinked.ObjectData[n])[i])^ Do
      theTree.Add_Integer(nID,Integer(_CreateNode(Result,nID,strCaption)));
     Dispose(PItem(TList(theUnlinked.ObjectData[n])[i]));
    End;
   theUnlinked.Delete(n);
  End;
End;

Procedure _AddToUnlinked(p_nID,p_nIDParent:Integer;Const p_strCaption:String);
Var
 n:Integer;
 p:PItem;
Begin
 
 New(p);
 p.nID:=p_nID;
 p.strCaption:=p_strCaption;
 If Not theUnlinked.Find(p_nIDParent,n) Then n:=theUnlinked.Add_Object(p_nIDParent,TList.Create);
 TList(theUnlinked.ObjectData[n]).Add(p);
End;

begin
theTree:=TWRIntegerMap.Create;
theUnlinked:=TWRIntegerMap.Create;

q:=TADOQuery.Create(Nil);
q.Connection:=ADOConnection1;
vtQuickADOQuery(q);
q.sql.text:="select id, id_parent, caption from tree order by caption";
q.Open;
While not q.Eof Do
 Begin
  nID:=q.Fields[0].AsInteger;
  strCaption:=q.Fields[2].AsString;

  If q.Fields[1].IsNull Then theTree.Add_Integer(nID,Integer(_CreateNode(Nil,nID,strCaption))) Else
   Begin
    nIDParent:=q.Fields[1].AsInteger;
    If theTree.Find(nIDParent,n)
     Then theTree.Add_Integer(nID,Integer(_CreateNode(TTreeNode(theTree.IntegerData[n]),nI D,strCaption)))
     Else _AddToUnlinked(nID,nIDParent,strCaption);
   End;
  q.Next;
 End;
q.Close;
q.Free;
theTree.Free;
theUnlinked.Free;
end;


на все вопросы отвечу...


 
Palladin ©   (2006-10-19 17:17) [41]

это для не рекурсивного дерева, для рекурсивного немного сложней...


 
Palladin ©   (2006-10-19 17:22) [42]

краткий глоссарий

TWRIntegerMap - коллекция: ключ - данные (разных типов), с бинарным поиском

vtQuickADOQuery - всего лишь процедура выставляющая параметры исполнения TADOQuery на максимальную производительность


p.s. предполагая подобное "а если чтобы пункты нужны в определенном порядке?" сразу скажу - придирки, бо ничего сложного нет в: докрутить к вышенаписанному добавление элементов в дерево в определенном порядке...


 
Сергей М. ©   (2006-10-19 17:24) [43]


> q.sql.text:="select id, id_parent, caption from tree order  by caption"


Чтой-то вдруг именно по caption ? Зачем вообще здесь явно указанная сортировка ? Почему она не по ParentId, если уж на то пошло ?


> If q.Fields[1].IsNull Then


А если это условие ложно ? Где у тебя его обработка ?


 
Сергей М. ©   (2006-10-19 17:30) [44]


> "а если чтобы пункты нужны в определенном порядке?" сразу
> скажу - придирки


Нет, не придирки.

Это тот самый общий случай, при котором не делается никаких предположений о логическом порядке следования записей о существующих узлах в НД.

Твой код (как и авторский) отражает лишь частный случай - запись о дочернем узле (в порядке следования записей в результирующем НД) всегда ожидается позже, нежели запись о родительском узле.

В общем же случае запись о родителе не обязана фигурировать в НД раньше записи о его "чаде"


 
Palladin ©   (2006-10-19 17:30) [45]


> Чтой-то вдруг именно по caption ?

а просто так, что бы НД вернулся как в твоем примере, caption у меня там a b c d соответственно для каждой строчки, если глаза режет можешь order by убрать...


> А если это условие ложно ? Где у тебя его обработка ?

там Else в конце строки м/у прочим...


 
Palladin ©   (2006-10-19 17:31) [46]


> В общем же случае запись о родителе не обязана фигурировать в НД раньше записи о его "чаде"


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


 
Palladin ©   (2006-10-19 17:34) [47]


> Нет, не придирки.


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


 
Сергей М. ©   (2006-10-19 17:35) [48]


> там Else в конце строки м/у прочим


ну и влупишь ты при этом узел в корень, ибо родитель в TreeView не найден, потому что еще не добавлен, потому что он в НД фигурирует позже добавляемого в дан.момент чада.

В чем прелесть-то - исказить реальную иерархию ?


 
Palladin ©   (2006-10-19 17:36) [49]


> Сергей М. ©   (19.10.06 17:35) [48]


ай ай ай... ну в какой же корень то? не в корень, а в theUnlinked, то бишь временное хранилище беспризорников...


 
Palladin ©   (2006-10-19 17:38) [50]


В чем прелесть-то - исказить реальную иерархию ?


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


 
Palladin ©   (2006-10-19 17:42) [51]

вот серьезный косяк у себя нашел... строчка

theUnlinked.Delete(n);

ее нужно убрать, не нужна она.


 
Сергей М. ©   (2006-10-19 17:43) [52]


> Palladin ©   (19.10.06 17:34) [47]


вот смотри:

Было:

id, parent:

0 - Null
1 - 0

Запрос

select * from Treetable

вернет НД, по которому твой алгоритм построит совершенно корректное дерево, отражающее действительность.

Теперь я удалил запись с Id = 0 (почему я не вправе это сделать ? про нарушение целостности не будем - я админ и вправе отключить на время проверку) и вновь ее создал (в оригинальном виде).
В результате тот же запрос вернет:

id, parent:

1 - 0
0 - Null

И этот НД твой алгоритм изобразит в виде 2-ух корневых узлов , вместо того чтобы узел с Id=1 изобразить дочерним по отношению к узлу с Id = 0

Где я не прав ? Покажи ...


 
Palladin ©   (2006-10-19 17:47) [53]

нет не в виде двух узлов,
ладно: сейчас полностью откомментирую и запостю...


 
Сергей М. ©   (2006-10-19 17:53) [54]


> В результате тот же запрос вернет


Здесь - в предположении что индекс по перв.ключу при этом по каким-то причинам не использован, т.е. записи в рез. НД будут фигурировать в порядке их "физического" следования.

А если даже индекс по перв.ключу по умолчанию задействован, то ничто не мешает мне модифицировать исх.таблицу таким образом:

id, parent:

1 - 2
2 - Null

что тоже приведет к "краху" подобного алгоритма.


 
Наиль ©   (2006-10-19 17:59) [55]

Уверен, что в данном споре выиграет Palladin.
Нет ничего не возможного в том, чтобы загрузить нижний элемент, раньше верхнего.
Но спор пока вертиться вокруг дерьев.
Совсем другое дело, если база выдаст кольцо. Т.е. каждый элемент ссылается на следующий, а последний на первый.


 
Palladin ©   (2006-10-19 18:00) [56]

все комментировать не стал, только ключевые моменты

procedure TForm1.Button1Click(Sender: TObject);
Type
PItem=^TItem;
TItem=Record // описание записи для "безпризорника", дабы в TList ее хранить
nID:Integer;
strCaption:String;
End;

Var
theUnlinked, // безпризорники в виде
{
ID будущего родителя
 данные безпризорника 1
 данные безпризорника 2
как в твоем примере здесь будет содержатся
: +0
:   | 1

или как в примере выше из четырех записей
: +0
:   | 2
:   | 3
}

theTree:TWRIntegerMap; // основные данные (ключ - значение): ID записи - созданный и уже существующий TTreeNode

q:TADOQuery;

n,nID,nIDParent:Integer;
strCaption:String;

// рекурсивная функция создания TTreeNode в TTreeView"е :)
Function _CreateNode(p_theParent:TTreeNode;p_nID:Integer;Const p_strCaption:String):TTreeNode;
Var
i,n:Integer;
Begin
// создали узел
Result:=TreeView.Items.AddChild(p_theParent,p_strCaption);
Result.Data:=Pointer(p_nID);
// ищем по своему ID в списке безпризорников
If theUnlinked.Find(p_nID,n) Then
 Begin
  // нашли нашего(наших) потерявшегося (шихся)
  For i:=0 to TList(theUnlinked.ObjectData[n]).Count-1 Do
   Begin
    // добавляем каждого к себе в семью    
    With PItem(TList(theUnlinked.ObjectData[n])[i])^ Do
     theTree.Add_Integer(nID,Integer(_CreateNode(Result,nID,strCaption)));
    // удаляя запись о нем в детдоме
    Dispose(PItem(TList(theUnlinked.ObjectData[n])[i]));
   End;
 End;
End;

// процедура регистрации безпризорника в детдоме
Procedure _AddToUnlinked(p_nID,p_nIDParent:Integer;Const p_strCaption:String);
Var
n:Integer;
p:PItem;
Begin
// создаем для него в регистратуре запись
New(p);
p.nID:=p_nID;
p.strCaption:=p_strCaption;
// ищем а были ли в роддоме его сородичи по родителям
If Not theUnlinked.Find(p_nIDParent,n) Then n:=theUnlinked.Add_Object(p_nIDParent,TList.Create); // не было, ничего страшного создаем новый список братьев и сестер
TList(theUnlinked.ObjectData[n]).Add(p); // добавляем его туда
End;

begin
theTree:=TWRIntegerMap.Create;
theUnlinked:=TWRIntegerMap.Create;

q:=TADOQuery.Create(Nil);
q.Connection:=ADOConnection1;
vtQuickADOQuery(q);
q.sql.text:="select id, id_parent, caption from tree order by caption";
q.Open;
While not q.Eof Do
Begin
 nID:=q.Fields[0].AsInteger;
 strCaption:=q.Fields[2].AsString;

 If q.Fields[1].IsNull
  Then theTree.Add_Integer(nID,Integer(_CreateNode(Nil,nID,strCaption))) // еси вдруг товарисч ничей не ребенок, пихаем его в корень
  Else // иначе :)
  Begin
   nIDParent:=q.Fields[1].AsInteger;
   // пытаемся в уже существующих семьях найти родителя
   If theTree.Find(nIDParent,n)
    Then theTree.Add_Integer(nID,Integer(_CreateNode(TTreeNode(theTree.IntegerData[n]),nI  D,strCaption))) // нашли, отослали дитятко под его крыло
    Else _AddToUnlinked(nID,nIDParent,strCaption); // а иначе - определили в детдом
  End;
 q.Next;
End;
q.Close;
q.Free;
theTree.Free;
theUnlinked.Free;
end;


надеюсь так понятней...


 
Palladin ©   (2006-10-19 18:01) [57]

блин!!!! тэг забыл закрыть... ладно, флудить не буду, если все таки трудно с восприятием жирного, скажи, подправлю...


 
Сергей М. ©   (2006-10-19 18:01) [58]


> Нет ничего не возможного в том, чтобы загрузить нижний элемент,
>  раньше верхнего


При ограниченных возможностях навигации по НД (тот самый частный случай) шансы получить запись n+i (i > 0) раньше записи n оставляют желать лучшего)


 
Сергей М. ©   (2006-10-19 18:03) [59]


> база выдаст кольцо. Т.е. каждый элемент ссылается на следующий,
>  а последний на первый


Опять же - частный случай)

Рекурсия же с отдельным запросом по детям указанного конкретного родителя реализует именнго общий случай.


 
Palladin ©   (2006-10-19 18:22) [60]


> Сергей М. ©


ты все еще продолжаешь неверить своим глазам? хорошо

http://tiravi.narod.ru/send1.zip

компилируй, исполняй, выставляй НД как твоей душе угодно...


 
Palladin ©   (2006-10-19 18:23) [61]

правда под D6, если ее у тебя нет, то пришлю урезанные исходники dcu файлов


 
Palladin ©   (2006-10-19 18:39) [62]


> Наиль ©   (19.10.06 17:59) [55]

это да, это уже рекурсивное дерево, в этом случае структура данных меняется, банальная пара ключ - узел нервно курит в сторонке, а используются списки, и дети в контроле формируются динамически, а не махом... в случае рекурсии с точки зрения оптимизации скорости исполнения нужно использовать динамические запросы...


 
markers ©   (2006-10-20 01:11) [63]

не сорьтесь из-за меня!
Та поправка что была мне, благополучно поменяло ситуацию :) И вообще ИМХО енто один из самых лучших способов построить дерево с детьми! Всё работает прекрасно даже лучше чем не рекурсивный мой вариант (в другом топике опобликован, основанный на поиске родителя).


 
Сергей М. ©   (2006-10-20 08:11) [64]


> Palladin


Идея со списком "беспризорников" мне понятна. Можно, конечно, и ее реализовать, только вот вопрос об эффективности такой реализации довольно серьезен. Можно опять же говорить о частном случае, когда "двухпроходная схема" на кл.стороне (второй проход - привязка "беспризорников") будет эффективней, чем формирование нужных НД сразу на серв.стороне.



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

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.65 MB
Время: 0.055 c
11-1137687524
Boguslaw
2006-01-19 19:18
2006.11.05
Collapse - English docs ?


2-1161085423
L15
2006-10-17 15:43
2006.11.05
Создание Теста на Делфи


2-1161336939
Gloomer
2006-10-20 13:35
2006.11.05
Посоветуйте простую компоненту для ввода вещественных чисел


3-1157521219
Bwa_JO
2006-09-06 09:40
2006.11.05
Помогите, плиз с кодировкой!


15-1161001717
Rwer
2006-10-16 16:28
2006.11.05
Самое эффективное решение