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

Вниз

Определить тип данных   Найти похожие ветки 

 
Сергей   (2014-03-25 11:06) [0]

Var I:int64; B:Byte;W:word;
Procedure Proc1(e:int64); Begin {код}end;
Можно ли определить в коде самой процедуре что ей передаётся т.е. чиловое значение Proc1(34) или переменная какого типа Proc1(b);Proc1(w);Proc1(I);? Как это сделать ?


 
clickmaker ©   (2014-03-25 11:08) [1]

> Можно ли определить в коде самой процедуре что ей передаётся

нет


 
Германн ©   (2014-03-25 11:29) [2]

http://www.delphibasics.ru/Overload.php


 
sniknik ©   (2014-03-25 11:35) [3]

в коде можно определить тип у вариантов, а не у "жесткого" типа.
+ можно конечно сделать несколько "перекрытых" (overload)  процедур... но это не в коде будет определятся, а на этапе компиляции. какую процедуру подставить... ну весьма не надежно/не очевидно если хочешь писать так как написал - Proc1(34) .


 
Ega23 ©   (2014-03-25 11:37) [4]

Можно, но извращённо.

procedure TForm9.Button2Click(Sender: TObject);
var
 b: Byte;
 w: Word;
 i: Integer;
 i64: Int64;
begin
 Foo(b);
 Foo(w);
 Foo(i);
 Foo(i64);
 Foo("foo");
end;

procedure TForm9.Foo(Value: Variant);
begin
 case VarType(Value) of
   varByte   : ShowMessage("Byte");
   varWord   : ShowMessage("Word");
   varInteger : ShowMessage("Integer");
   varInt64  : ShowMessage("Int64");
   else
     ShowMessage("Unknown");
 end;
end;



 
Сергей   (2014-03-25 11:50) [5]

Ega23, спасибо это видимо то что нужно! попробую!
Вот только с числовыми жёсткими значениями как быть ? 2? 234? 34567? и т.д


 
Ega23 ©   (2014-03-25 11:53) [6]


> Вот только с числовыми жёсткими значениями как быть ? 2?
>  234? 34567? и т.д

ЕМНИП, они к ближайшему диапазону будут приведены.
Ну там, 2 - varByte, 234 - varWord и т.п.
Если только явно не приводить:
Foo(Integer(2));

Но на всякий ещё раз напоминаю: это - изврат, неоптимально, адъ и Израиль.


 
Сергей   (2014-03-25 11:58) [7]

Ega23, жаль! :-( Не то!
У меня вопрос стоит так:
"Жесткое" ли число (т.е. в виде чисел) или всё такие переменная? (типа int64).


 
clickmaker ©   (2014-03-25 12:05) [8]

> [7] Сергей   (25.03.14 11:58)

ты вообще представляешь, как параметры типа значение в функцию передаются?


 
Сергей   (2014-03-25 12:09) [9]

clickmaker, незнаю представляю или нет я вопрос задаю так как мне нужно.
=======================================
Попробую выразить еще так:
Const i64c:int64=0;
Var i64:int64;
{.....}
i64:=0;
Proc1(0); Proc1(i64); Proc1(i64c);
ноль “0” передавать в процедуру можно! Но если это переменная или константа то она не может быть нулём и нужно выдать ошибку. Реально ли такое сделать ?


 
Inovet ©   (2014-03-25 12:11) [10]

Можно. Нало пойти по стеку на адрес возврата и там поковырять на предмет константности переданного значения. Вот это будет уже полный
> изврат, неоптимально, адъ и Израиль.


 
Inovet ©   (2014-03-25 12:12) [11]

> [9] Сергей   (25.03.14 12:09)
> clickmaker, незнаю представляю или нет я вопрос задаю так как мне нужно.

А надо представлять. В хелпе всё описано. Дебагер имеется.


 
Ega23 ©   (2014-03-25 12:13) [12]


> У меня вопрос стоит так:


http://www.gunsmoker.ru/2008/10/x-y-z.html
Прочитай внимательно и подумай: не твой ли это случай?
Без обид.


 
Inovet ©   (2014-03-25 12:18) [13]

> [9] Сергей   (25.03.14 12:09)
> Но если это переменная или константа то она не может быть
> нулём и нужно выдать ошибку.

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

А вообще меняй подход, таких требований быть не должно, раз есть - значит что-то неправильно.


 
Сергей   (2014-03-25 12:20) [14]

Ega23, в 1 вопросе я получил ответ. Но не тот что нужно. Вот поэтому его поставил по другому.


 
Сергей   (2014-03-25 12:23) [15]

Inovet, ну хорошо! Бог с ней с константой. :) А переменную отличить от "страхомудия" типа числа (констаннты) можно?


 
sniknik ©   (2014-03-25 12:25) [16]

> делфийскую константу и извращёнными способами чаще всего не отловишь
+
"делфийская" типизированная константа в зависимости от настроек компиляции легко превращается в глобальную переменную.

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


 
clickmaker ©   (2014-03-25 12:31) [17]

> ноль “0” передавать в процедуру можно! Но если это переменная
> или константа то она не может быть нулём

Взаимоисключающие параграфы детектед


 
Inovet ©   (2014-03-25 12:33) [18]

> [15] Сергей   (25.03.14 12:23)
> А переменную отличить от "страхомудия" типа числа (констаннты) можно?

Ну вот сам подумай для чего нужна функция (подпрограмма) кроме того, чтобы не повторять один и тот же код в нескольких местах? А нужна она ещё и для того, чтобы работала одинакого независимо от способа вызова и способа передачи параметров. Ты же хочешь в точности обратного.


 
Сергей   (2014-03-25 12:34) [19]

clickmaker, не цепляйся к словам :-)
Ноль процедуре передавать можно, но если нулейвая переменная то процедура должна выдать что ПЕРЕМЕННАЯ НЕ МОЖЕТ БЫТЬ НУЛЕВОЙ, т.е. она считается "неопределена" для использования в программе (прецедуре). Так понятно ?


 
Inovet ©   (2014-03-25 12:35) [20]

> [17] clickmaker ©   (25.03.14 12:31)
> > ноль “0” передавать в процедуру можно! Но если это переменная
> > или константа то она не может быть нулём
>
> Взаимоисключающие параграфы детектед

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


 
Ega23 ©   (2014-03-25 12:44) [21]


> Ноль процедуре передавать можно, но если нулейвая переменная
> то процедура должна выдать что ПЕРЕМЕННАЯ НЕ МОЖЕТ БЫТЬ
> НУЛЕВОЙ, т.е. она считается "неопределена" для использования
> в программе (прецедуре). Так понятно ?


Это неправильная архитектура.
Процедура не должна ничего знать о природе входного параметра. У тебя вообще может быть в качестве входного параметра результат выполнения цепочки функций: Foo(Func1(Func2(Func3(Твоя_Константа))))
Как ты такое будешь отслеживать? Или геттер интерфейса, который реально реализован ХЗ где. В MSExcel каком-нибудь.


 
Сергей   (2014-03-25 12:47) [22]

Inovet. ДА!
И не только ноль для  неё бесмыслен но и другие числа диапазана Byte,word,Cardinal  и других всех доступных числел, КРОМЕ ЧИСЕЛ ДИАПАЗОНА Int64;
Можно выразить так:
Переменная должна быть Int64 и значение её должно быть
от -9223372036854775800 до (-9223372036854775800+100000), а если оно вне этих пределов, то это считается как обычное число(констанна), а не переменная Int64. НО БЕДА КОГДА "ЗАБЫВАЕШЬ" ПРИСВОИТЬ ПЕРЕМЕННОЙ ЗНАЧЕНИЕ НУЖНОГО ДИАПАЗАНА и она у тебя ноль или же 34 или 3455 нельзя ведь понять, что это переменная (int64),  а не просто чило или число другого типа (Byte, Word);


 
Inovet ©   (2014-03-25 12:47) [23]

> [21] Ega23 ©   (25.03.14 12:44)

Да много чего может быть. Элемент массива/структуры/класса в которых нельзя хранить 0, но мы будем хранить, а проверять в левой функции, ага.

Правильно проверять валидность там, где хранится/получается. Нельзя 0, значит сделать обёртку над этим и при присвоении поднимать исключение.


 
Inovet ©   (2014-03-25 12:50) [24]

> [22] Сергей   (25.03.14 12:47)

Когда забываешь присвоить, там будет чёрт лысый, а не ноль, кроме глобальных переменных, и то в самом начале.


 
Сергей   (2014-03-25 12:51) [25]

>обёртку над этим и при присвоении поднимать исключение.
поднимать исключение - Для меня это сложно. :-)
Я хотел проще:
В процедуре вписать: если Int64 не того диапазона что нужно ШовМессаг("неразмечаена переменная"). Типа того.


 
Inovet ©   (2014-03-25 12:56) [26]

> [25] Сергей   (25.03.14 12:51)

Поднять исключение не сложнее ШовМесаги, а толку значительно больше.


 
clickmaker ©   (2014-03-25 12:56) [27]

> если Int64 не того диапазона

ну и кто мешает написать?
if (param < min) or (param > max) then ШовМессаг("неразмечаена переменная")


 
Сергей   (2014-03-25 12:58) [28]

Inovet, но это если ты знаешь как это делать. а если я незнаю то с этим еще нужно разбираться.


 
Inovet ©   (2014-03-25 13:02) [29]

> [27] clickmaker ©   (25.03.14 12:56)
> if (param < min) or (param > max) then ШовМессаг("неразмечаена переменная")

Да, но для просто 123 не надо ШовМасаг делать. Вот ведь незадача.


 
Ega23 ©   (2014-03-25 13:04) [30]


> Inovet, но это если ты знаешь как это делать. а если я незнаю
> то с этим еще нужно разбираться.


Вот это и есть та самая классическая сага об XYZ.
Ты, когда задаёшь вопрос, описывай именно саму задачу, а не то, как ты считаешь, как её решать.


 
Сергей   (2014-03-25 13:06) [31]

clickmaker, КАК Я ПОЙМУ ЧТО В ПРОЦЕДУРУ ПЕРЕДАНА НЕРАЗМЕЧЕННАЯ ПЕРЕМЕННАЯ! ПОДЧЕРКИВАЮ ПЕРЕМЕННАЯ ТИПА int64, ЕСЛИ ОНА БУДЕТ НУЛЁМ ИЛИ ДРУГИМ ЗНАЧЕНИЕМ ? А самой процедуре передавать можно любые значения. А вот если это ИЗ(!) int64-переменной не того диапазона то она считается неразмеченной ("испорченной")
Summ1,Suuma2:int64;
Proc1(Summa1);
Если переменные размечены
Summ1 = -9223372036854775800+1
Suuma2 = -9223372036854775800+2
то можно понять что передалось соответсвующая переменная имеющая свой ИД, а не просто число какое нибудь. Или случайно битая Summ1 которая оказалась =0 или другого диапазона
Может так понятно ?! :-)


 
clickmaker ©   (2014-03-25 13:08) [32]

> то можно понять что передалось соответсвующая переменная
> имеющая свой ИД, а не просто число какое нибудь

так это и есть эти самые min и max
может, так понятно?)


 
sniknik ©   (2014-03-25 13:09) [33]

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

однако есть разница.


 
sniknik ©   (2014-03-25 13:12) [34]

> Если переменные размечены
переменные не размечены, тип это не метка данных (если не вариант), а "трафарет" как на эти данные смотреть...
один и тот же байт может быть и отдельным и частью интеджера/ворда/... даже строки, причем в одно и то же время, в зависимости через какой "трафарет" на него смотрят.


 
Inovet ©   (2014-03-25 13:13) [35]

> [31] Сергей   (25.03.14 13:06)
> то можно понять что передалось соответсвующая переменная
> имеющая свой ИД, а не просто число какое нибудь. Или случайно
> битая Summ1 которая оказалась =0 или другого диапазона

Чем случайная последовательность битов отличается от неслучайной, если они находяться в одном разрешённом диапазоне?

Не занимайся ерундой - это тупиковый путь.


 
Ega23 ©   (2014-03-25 13:15) [36]


> clickmaker, КАК Я ПОЙМУ ЧТО В ПРОЦЕДУРУ ПЕРЕДАНА НЕРАЗМЕЧЕННАЯ
> ПЕРЕМЕННАЯ! ПОДЧЕРКИВАЮ ПЕРЕМЕННАЯ ТИПА int64


Никак.

var
 a,b: Int64;
begin
 a := ...;
 b := ...;
 // Типа, "разметили" обе.
 Proc(a+b);
end;


Это не на уровне процедуры нужно определять.


 
Inovet ©   (2014-03-25 13:16) [37]

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


 
Сергей   (2014-03-25 13:19) [38]

sniknik, а мне нужно чтобы Int64 иммела свой ИД нужного диапазона и далее их использовать как метки т.е если
Summ1 = -9223372036854775800+1
Suuma2 = -9223372036854775800+2
и в процедуру приходит  "первое значение" то программа "понимает" что это "первое" значение и другие процедуры тоже будут понимать эту привязку (метку). но беда если их забыть "разметить" нужным диапазоном или они будут =0 то как отличить Summ1 от Suuma2 от чилового значения ?


 
turbouser ©   (2014-03-25 13:19) [39]


> Сергей

А какая цель преследуется? Т.е. зачем надо определять тип данных?


 
sniknik ©   (2014-03-25 13:20) [40]

+
Procedure Proc1(a: word); Begin {код}end;
и
Procedure Proc1(a, б: byte); Begin {код}end;
не отличаются в стиле передачи параметра, и там и там будет задействован регистр AX, т.е. если подменить формальное описание при работе с dll например, то можно задать для первого 2мя переменным а для второго наоборот одной... для компа без разницы.
просто это МЫ ПРИНИМАЕМ что в первом случае с ним работаем как с целым, а во втором как с двумя половинками... НАМ, людям, так удобнее.


 
sniknik ©   (2014-03-25 13:21) [41]

> sniknik, а мне нужно чтобы Int64 иммела свой ИД нужного диапазона и далее их использовать как метки т.е если
а мне нужен дворец на багамах и гарем из 365 наложниц... но реальность она несколько иная.


 
Ega23 ©   (2014-03-25 13:22) [42]

type

 TMyInt64 = record
   ID: Int64;
 end;

procedure Foo(Value: TMyInt64);
begin
 if Value.ID - размеченная then
   Proc1(Value.ID)
 else
   ShowMessage(неразмечаена переменная)
end;


И теперь сама Proc1 может принимать любые значения Int64, а вот Foo - уже только то, что ты туда осознанно передал.


 
Ega23 ©   (2014-03-25 13:24) [43]


> и гарем из 365 наложниц


Выходные только по високосным годам?


 
clickmaker ©   (2014-03-25 13:26) [44]

> Выходные только по високосным годам?

одна из наложниц по двойной ставке работает


 
Inovet ©   (2014-03-25 13:33) [45]

> [42] Ega23 ©   (25.03.14 13:22)
> TMyInt64 = record
>   ID: Int64;
> end;

Тогда уж класс MyID с конструкторами, сетерами и гетерами. Хм, 365 штук, да.


 
clickmaker ©   (2014-03-25 13:34) [46]

> Тогда уж класс MyID с конструкторами, сетерами и гетерами.
> Хм, 365 штук

с блэкджеком и шлюхами. 365 штук


 
Сергей   (2014-03-25 13:47) [47]

Ega23, ты знаешь мысль очень хорошая(!) сделать через  TmyInt64. Спасибо большое!
Вот только...
Например вот так у меня получится...
 TMyInt64 = record    ID: Int64;   end;
Procedure Proc1 (Value:: Variant)
begin
case VarType(Value) of
   TMyInt64   :  ShowMessage("Это переменная TmyInt64 проверить размеченность Value.ID  и т.д.");
   else      ShowMessage(“Обычное Числовое значение НЕ TmyInt64 ”);
 end;
ПРАВИЛЬНО ЛИ Я НАПИСАЛ? (еще не проверял)
Будут ли “хаваться” и определяться при:
Var   I64:TMyInt64;
Proc1( I64);
Proc1(56234);


 
clickmaker ©   (2014-03-25 13:54) [48]

> Будут ли “хаваться”

не будут. Потому что для Variant не определен TMyInt64.
Если TMyInt64 сделать классом, то можно юзать if (Value is TMyInt64)


 
Ega23 ©   (2014-03-25 13:59) [49]


> Сергей   (25.03.14 13:47) [47]
>
> Ega23, ты знаешь мысль очень хорошая(!) сделать через  TmyInt64.
>  Спасибо большое!
> Вот только...


Блин. Ну ты опять через задницу всё переиначил.

Давай с самого начала: какая стоит задача? Глобальная.


 
Сергей   (2014-03-25 14:07) [50]

Ega23,
Так... :-) Первый шаг сделан: TMyInt64 = record    ID: Int64;   end; размечаем глобально.
Нужно сделать процедуру Proc1 (а таких процедур будет не одна) которая будет “хавать” обычные числа и данные типа TmyInt64! внутри Proc1  чтобы можно было разобраться - это данные  типа TmyInt64 или это другие данные (числовые других переменных, (не особо важно))
Вот так теперь стоит вопрос.


 
Сергей   (2014-03-25 14:20) [51]

clickmaker, ну вот пробы сделал через  Class а не через record вот только число оно "хавать" не хочет

Type TlvLabel=Class ID:int64;end;
Var m1:TlvLabel;

Procedure Proc1(Value:TObject);
Begin
    if (Value is TlvLabel)  then Begin end;//  ShowMessage("Это переменная TmyInt64 проверить размеченность Value.ID  и т.д.");
   //else      ShowMessage(“Обычное Числовое значение”);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Proc1(m1);
Proc1(2333);
end;


 
brother ©   (2014-03-25 14:21) [52]

те с миру по нитке и накодишь?


 
Сергей   (2014-03-25 14:27) [53]

brother, ну раз так получается...    дак шож делать :-)


 
Jeer ©   (2014-03-25 14:35) [54]

>дак шож делать :-)

Брось дурью маяться - есть места на замену гастарбайтеров.
Адресок могу подсказать.


 
clickmaker ©   (2014-03-25 14:38) [55]

> только число оно "хавать" не хочет

ну сделай боксинг, если уж знаешь толк в извращениях
Proc1(TObject(2333));


 
MBo ©   (2014-03-25 14:39) [56]

Про проблему X-Y-Z уже вспоминали?


 
Inovet ©   (2014-03-25 14:41) [57]

> [56] MBo ©   (25.03.14 14:39)
> Про проблему X-Y-Z уже вспоминали?

А то. В самом начале ещё.


 
Сергей   (2014-03-25 14:43) [58]

Причем тут извращения...
Можно ли сделать чтобы процедура «хавала» данные (числовые) и типы мной созданные ? А внутри процедуры их отличать ?


 
brother ©   (2014-03-25 14:52) [59]

> процедура «хавала»

я думал разговор там про пипл... а тут (


 
Ega23 ©   (2014-03-25 15:04) [60]


> Ega23,
> Так... :-) Первый шаг сделан: TMyInt64 = record    ID: Int64;
>    end; размечаем глобально.
> Нужно сделать процедуру Proc1 (а таких процедур будет не
> одна) которая будет “хавать” обычные числа и данные типа
> TmyInt64! внутри Proc1  чтобы можно было разобраться - это
> данные  типа TmyInt64 или это другие данные (числовые других
> переменных, (не особо важно))
> Вот так теперь стоит вопрос.


Нет. Вопрос стоит не так. Это - твоё видение решения некой задачи. Следствие, так сказать.
Я же тебя спрашивал про задачу. Какова причина "размечания"?


 
RWolf ©   (2014-03-25 15:13) [61]


> [60]

я так понял топикстартера, что это банально переменная, которой никто ничего не присвоил. Решение в лоб — Variant.


 
Ega23 ©   (2014-03-25 15:16) [62]


> я так понял топикстартера, что это банально переменная,
> которой никто ничего не присвоил. Решение в лоб — Variant.


Было уже. Он чего-то другого хочет.


 
clickmaker ©   (2014-03-25 15:23) [63]

да уже практически всё было
- variant
- tobject
- max, min
Осталось предложить индусский народный метод: переводить число в строку и проверять длину


 
Сергей   (2014-03-25 17:26) [64]

Ega23, причина размечания в том, что каждая переменная должна быть как метка (на таблицу) и каждая из процедур Proc1, Proc2 и т.д. должна принимать числовое значение и метку,  а также "понимать", что  это числовое значение или метка. И вот если сделать Var a, b:int64; и забыть присвоить им уникальный ИД, (нужного диапазона) запустить в Proc1,Proc2 и т.д. то процедуры не будут видеть разницу между a и b и "0". Вот почему я изначально задал вопрос: Можно ли прицедуре понимать что это Int64, а не просто числовое значение.
Type TlvLabel=Class ID:int64;end; Var A:TlvLabel - идея хорошая! тем более,что случано не присвоишь A:=234; - Это очень даже к стати! Но теперь вопрос как добиться что-бы в процедуру можно было "заганять" TlvLabel и числовые значения ? а внутри процедур определять  мол это TlvLabel или просто число.


 
RWolf ©   (2014-03-25 17:35) [65]

в [2] ответ прозвучал уже.


 
Inovet ©   (2014-03-25 17:40) [66]

> [64] Сергей   (25.03.14 17:26)

Не надо разные сущности через одну дырку в процедуру пропускать а вней потом определять что там пришло.

Должны быть вместе ID : TMyID и Val : Int64 к нему привязанное - делай класс с двумя такими полями, может, и рекорд хватит. Его и передавай в процедуру. О чём тебе всю ветку с разных сторон пытаются объяснить. Всё, ничего постороннего в процедуру не попадёт, а непротиворечивость ID и Val отслеживай в самом классе. А может окажется, что и этой обсуждаемой процедуре самое место в этом самом классе.


 
Сергей   (2014-03-25 18:00) [67]

Всем спасибо за внимание и участие. Но это всё не ТО что нужно. У меня всё работает нормально и всё процедуры,а их более 200 построены на этом. Беда только в том что переменной забываешь делать GetID(Val) чтобы ей Val присваивался уникальный ИД в (нужном диапазоне) и получаешь "коварный удар", что процедуры её воспринимают как число, как ноль и нет разницы между переменными Val1 и Val2 если они равны нулю. Да и как я вас понял, понять, что это не ноль, а переменная тоже невозможно. Надоело получать такие "удары". Я думал может это как-то можно решить т.е. так как хотелося-бы.
Еще раз всем спасибо за внимание.


 
Sha ©   (2014-03-25 21:00) [68]

опиши задачу на уровень выше, что надо сделать, а не то как ты это делаешь


 
Сергей   (2014-03-25 22:35) [69]

Да всё уже! - Не нужно! Спасибо! Тема закрыта.
Я уже свои мысли перестроил! т. е. действительно верно было сказано, что разные типы данных нужно и «толкать» разным процедурам, а не в смесь в одну! тем более не так уж их и много процедур которые надо будет переделывать, да и не сложно . А с этим проблем нет.
В будущем понадобится разобраться с конструкторами если можно киньте ссылку на простейший пример. т. е. нужно будет Proc1 использовать как Proc1(a:int64); Proc1(a,b:int64); Proc1(a,b,c:int64);
т.е. Чтобы одну процедуру можно было использовать с разным количеством одинаковых параметров. Такое сложно сделать ? Через конструктор как-то ?


 
Sha ©   (2014-03-25 22:43) [70]

"Overload" F1 "Overloading procedures and functions"


 
Сергей   (2014-03-25 23:13) [71]

Sha, СПАСИБО!
Хм... неужели всё так просто, т.е. дописуй к процедуре overload; и всё будет в порядке!



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

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

Наверх




Память: 0.66 MB
Время: 0.158 c
15-1412355165
Dennis I. Komarov
2014-10-03 20:52
2015.09.10
Родительский контроль ++


15-1416605402
Юрий
2014-11-22 00:30
2015.09.10
С днем рождения ! 22 ноября 2014 суббота


15-1413405004
Юрий
2014-10-16 00:30
2015.09.10
С днем рождения ! 16 октября 2014 четверг


15-1418318045
Fox
2014-12-11 20:14
2015.09.10
Англоязычная озвучка карт


2-1395227743
Вова
2014-03-19 15:15
2015.09.10
нужен исходник простого форматтера кода