Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Attributes, и их применение 
:(
    Опции темы
drkot
Дата 24.7.2014, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(PointerToNil @  24.7.2014,  19:45 Найти цитируемый пост)
число допускаемых средним программистом ошибок

 smile и температура у них 36.6 по ходу получилась

Цитата(PointerToNil @  24.7.2014,  19:45 Найти цитируемый пост)
не понятно в атрибутах?

Применение! Как? Где? Зачем?


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
PointerToNil
Дата 24.7.2014, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 17.6.2013

Репутация: 3
Всего: 6



ок, последний оффтопик: старое уже (2000) эмпирическое сравнение семи языков программирования: 
http://www.osp.ru/os/2000/12/178361/
PM MAIL   Вверх
Illusion Dolphin
Дата 24.7.2014, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

Вы только забыли привести пол километра кода который реализует данный механизм.

А разве это плохо? Конечный код лаконичен и прост, это самое главное. Я вам даю пример, то количество кода, которое стоит за примером - это никогда не волновало пока всё работает просто и быстро. Изменение поведения через аттрибут очень удобно.

Цитата

надо ещё иметь Emit

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

Вместо критики попробуйте попытаться понять, что вам пытаются донести. Именно тут я дал пример как можно использовать аттрибуты и указываю, что (скорее всего) в делфи ещё нет механизмов, которые расширят возможности использования аттрибутов в делфи. Создавать классы "на лету" вроде как нельзя в делфи (поправьте если что), а это расширят возможности, в том числе и аттрибутов.

Цитата

Т.е. добавив атрибут метод начинает работать

А что ООП уже не круто? Как же? Ведь пару лет назад специально ввели статические классы чтобы подтянуть к ним свободные функции, которые особо упрямые программисты не хотели включать в обычные классы. Где логика?

ООП это не панацея, а инструмент, у него есть область применения и задачи. Я дал пример, в котором использовать наследование крайне не удобно - переписывать классы ради добавление кэша в один метод - неее, спасибо. Другое дело, что такая реализация требует IoC + возможность на лету создавать классы обёртки по интерфейсам, в делфи пока что вроде нельзя (поправите - был бы рад).

Цитата

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

Вы имеете в виде директивы? Если да, то это разное. Директивы - это попадает ли код в сборку или нет, атрибуты - могут работать в и сборке и более того их поведение можно изменять в runtime, а также добавляют коду аннотации, которые доступны в runtime. Есть ли альтернатива добавдению аннотаций?

Цитата

3) CharSet - вот тут уже в делфи нету - можно указать как конвертировать кодировки, удобно, блин

Ну да... попытка подпереть мега баг языка кривым костылем... Конечно этого нет в Delphi! Работа со строками там интегрирована на уровне языка и проблем с конвертацией в априори не существует.

К чему этот холивар? Если хотите похоливарить - так и скажите. Я вам даю пример, а вы включайте мозг:
Код

   [LoadAtStartUp]
   public void DoSomethingAtStartUp(); //никаких регистрыций, просто берётс яметод и вызывается, вся магия - где-то там уже написано раз и всё

   [OnConfigurationChange]
   public void DoSomethingAfterConfiguration();

   public void DoCriticalCode([Encrypted]string login, [Encrypted]string password); //освобождаемся от шифрования, т.к. оно сделано до нас экосистемой, SOLID ведь

додумать можно ещё - было бы желание.

Цитата

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

Пожалуйста, не разводите холивар - судя по всему карты не на вашей стороне.

Цитата

Дальше пример с enum (не знаю, работает ли в делфи

как ни странно но оно работало и до этого и еще 20 лет назад... Интересно наблюдать как происходит процесс "пере открытия" давно известных истин и механизмов. 

Вы про http://theroadtodelphi.wordpress.com/2009/...g-using-delphi/ ? Так там есть большая проблема - я хотел бы называть вещи используя как минимум пробелы и спец. символы.

Цитата

Тема подсветки кода конечно тоже интересна, хотя пока не знаю как ее практически реализовать

Посмотрите на jetbrains code annotations

P.S. Ещё раз просьба - ближе к теме, без нападок на языки.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
drkot
Дата 25.7.2014, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(Illusion Dolphin @  24.7.2014,  22:08 Найти цитируемый пост)
классы "на лету"

поясните термин
Цитата(Illusion Dolphin @  24.7.2014,  22:08 Найти цитируемый пост)
на лету создавать классы обёртки по интерфейсам

понятие классы обертки тоже
Так понимаю "на лету"  - это реал тайм? 
Цитата(Illusion Dolphin @  24.7.2014,  22:08 Найти цитируемый пост)
Вы имеете в виде директивы?

насколько я могу судить, то нет. Это не про них. Скорее вы, спутали с другим активистом темы.
Если не изменяет память, то я про старое доброе статическое линкование динамических библиотек которое тянется еще со времен процедурного программирования. И мне не понятно чем оно мозолит глаза...

Цитата(Illusion Dolphin @  24.7.2014,  22:08 Найти цитируемый пост)
а также добавляют коду аннотации, которые доступны в runtime

Ну наконец то, первая светлая мысль в топике! Атрибуты это описания классов доступные в RT!
Только вот зачем они в Delphi? Прекрасно понятно, зачем они в сях всех мастей, зачем они в скриптовых языках, тоже не вызывает вопросов, а вот как их применять в Delphi?

Цитата(Illusion Dolphin @  24.7.2014,  22:08 Найти цитируемый пост)
додумать можно ещё - было бы желание.

Додумать что? Вы приводите шарповский код, с его "особенным" построением и вшитыми механизмами. Что додумывать?
Раздел форума Delphi, в вопросе четко обозначена среда, а Вы даете вырезки из синтаксически не совместимого языка, да еще и с использованием не опознанных фейерверков. Так кто холиварит? У меня нет претензий ни к каким языкам и платформам. Но какой смысл разбирать инвалидность шарпа в форуме посвященном Delphi, давайте лучше разбирать инвалидность Delphi, имхо пользы будет больше. 

Цитата(Illusion Dolphin @  24.7.2014,  22:08 Найти цитируемый пост)
я хотел бы называть вещи используя как минимум пробелы и спец

Это понятно, и полностью согласен. Но механизм то есть, хотя и с ограничениями, как и все в этом мире.

Еще раз хочу сказать, что интересно применение именно в Delphi. Как и для чего атрибуты используются в других языках понятно.
Механизм есть, значит надо понять куда его применять. Если выяснится, что этот механизм (как и анонимные функции) внедрили "лишь бы соответствовать трэнду", то будем прописывать в виде атрибутов авторство и версии классов.




--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
drkot
Дата 25.7.2014, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Извините, если погорячился.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Illusion Dolphin
Дата 25.7.2014, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

классы "на лету"

поясните термин

Да, именно в runtime. Не только классы, а и сборки (dll - аналог). Без него надо использовать рефлексию (RTTI в делфи), а это медленно.

Цитата

Только вот зачем они в Delphi? Прекрасно понятно, зачем они в сях всех мастей, зачем они в скриптовых языках, тоже не вызывает вопросов, а вот как их применять в Delphi?

Вы можете пересмотреть тему - что с ними делают в других языках и применять с учётом delphi ограничений. Ваше непонимание вызвано малом распространением атрибутов в исходных кодах делфи, в сторонних библиотеках, и, что ещё вероятно, ограничениями языка, которые не позволяют делать достаточно динамичный код в зависимости от атрибутах на объектах. Я RTTI убирал из проектов своих т.е. это помогало уменьшить размер бинарников, а применение оных имеет смысл когда есть много готовых решений, которые упрощают жизнь уже сейчас без придумывания своих велосипедов. 

Цитата

Атрибуты это описания классов доступные в RT!

Смотрите шире. Даже в делфи это не только классы (каюсь - весь список не знаю), а в других языках это:
1) Описания для сборок
Код

[assembly: AssemblyTitle("My Project Title")]
[assembly: AssemblyDescription("Blabla")]
[assembly: AssemblyConfiguration("bla")]
...

2) Описания для модулей
3) Для конструкторов, методов
4) Свойств + Филдов
6) Интерфейсов
7) Параметров методов

Цитата

Додумать что? Вы приводите шарповский код, с его "особенным" построением и вшитыми механизмами. Что додумывать?

Придумывать как это можно использовать в приложениях на делфи с учётом его специфики. Я даю код на шарпе т.к. там у меня есть примеры, а делфи примеров нету. В конце концов программирование это искусство, а атрибуты это ещё один инструметн художника, дальше уже всё зависит от художника.

Цитата

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

Например тут пример из разряда фабрики классов, когда фабрика использует атрибуты в свойствах для их автозаполнения. Удобно при тестировании когда вам надо 10 пользователей и вы пишите:
Код

TUser = class
    [RandomName()]
    property Name : Integer read FName write FName;
    [RandomInt(1, 100)]
    property Age: Integer read FAge write FAge;
end;

Это как кажется можно сделать и без атрибутов, а смысл появится когда таких классов много и писать отдельный код для заполнения полей для каждого типа - это будет менее удобно, чем написать один наз фабрику которая создаёт объекты как:
Код

tenUsers = randomObjects.Get<TUser>(10);


Также ликвидаторы объектов:
Код

TUser = class
    [Required()]
    property Name : Integer read FName write FName;
    [maxMin(1, 100)]
    property Age: Integer read FAge write FAge;
end;

Код

isValid= objectValidator.Validate(userInstance);

Код один для всего, нет нужды писать везде свои валидаторы для каждого типа.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
drkot
Дата 25.7.2014, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(Illusion Dolphin @  25.7.2014,  17:06 Найти цитируемый пост)
Да, именно в runtime. Не только классы, а и сборки (dll - аналог)

по всей видимости это виртуализация и вряд ли появится в Delphi.

Цитата(Illusion Dolphin @  25.7.2014,  17:06 Найти цитируемый пост)
Смотрите шире.

Да ошибся, под классами имел ввиду описатель RTTI, а они есть для всех типов. тоесть атрибут можно прицепить к любому типу.

Цитата(Illusion Dolphin @  25.7.2014,  17:06 Найти цитируемый пост)
randomObjects.Get<TUser>(10);

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

В целом я согласен с Вами. Примеров реализаций практически нет, толковых вообще нет. Стратегия применения не описана... В базовом наборе исходных кодов атрибуты не найдены. Поэтому понять как разработчики видят применения атрибутов для меня остается загадкой.
Почему то вводя дженерики добавили аж три модуля с примитивами, под 10к строк кода... а с атрибутами полный глухарь...




--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Illusion Dolphin
Дата 25.7.2014, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

если не сложно можете привести содержимое метода Get. Хочу понять насколько правильно его понимаю.

Псевдокод:

Используя http://stackoverflow.com/questions/8355456...ed-generic-type + http://habrahabr.ru/post/85509/

Код

function Get<T>(Number: Integer): TList<T>();
var
  Obj: T;
  I: Integer;
  RN: RandomName; //attribute
  RI: RandomInt; //attribute
  ctx: TRttiContext;
  RType: TRttiType;
  p: TRttiProperty;
  a: TCustomAttribute;
begin
  Result := TList<T>.Create();
  ctx := TRttiContext.Create;
  for i := 1 to number do
  begin
     obj := CreateInstance<T>();
     RType := ctx.GetType(T);
     for p in RType.GetProperties do
       for a in p.GetAttributes do
       begin
         if a is RandomName then
         begin
             p.SetValue(obj, MyFunctionThatCreatesRandomNameMaybeUsingDictionary());
         end;
         if a is RandomInt then
         begin
             RI := RandomInt(a);
             p.SetValue(obj, a.Min + Random(a.Max - a.Min));
         end;
      end;
      Result.Add(obj);
  end;
end;


Цитата

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

Увы - приоритеты.

Это сообщение отредактировал(а) Illusion Dolphin - 25.7.2014, 23:03


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
drkot
Дата 26.7.2014, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Спасибо. Именно так и представлял.

только эту стороку интереснее было бы реализовать
Код

p.SetValue(obj, MyFunctionThatCreatesRandomNameMaybeUsingDictionary());

вот так
Код

p.SetValue(obj, a.MyFunctionThatCreatesRandomNameMaybeUsingDictionary());




--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Illusion Dolphin
Дата 26.7.2014, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

вот так
Выделить всёкод Pascal/Delphi
1:
    
p.SetValue(obj, a.MyFunctionThatCreatesRandomNameMaybeUsingDictionary());

Я бы не согласился, т.к. задача атрибута - это сделать пометку, а не генерировать имя. 2 задачи на один объект это нарушает принцип single responsibility. Именно поэтомк всё "самое интересное" не сами атрибуты обычно, а код, который их использует. 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
drkot
Дата 26.7.2014, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



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


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
drkot
Дата 26.7.2014, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Код

TRawVirtualClass

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

в исходном коде поставляемом в delphi используется два атрибута [Stored] и [Default] это заменители одноименных ключевых слов. Судя по коду внутренних изменений механизм не претерпел. 

Часто используемые возможности (stored, default, index) изначально были реализованы и появление атрибутов (как отдельного механизма) не привело к разительному росту возможностей. Разве что появилась возможность, как бы, создавать свои под структуры в Rtti. 

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

Это сообщение отредактировал(а) drkot - 26.7.2014, 18:10


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Illusion Dolphin
Дата 26.7.2014, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

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

Цитата

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

Это вопрос не по теме, но раз уже поднят... Есть такая вещь (это уже из области паттернов) как SOLID. Первая буквочка в этом - (S)ingle responsibility означает, что класс должен делать 1 (одну) задачу. Задача аттрибута - сделать пометку, которая может содержать данные (это по сути - данные RanomInt(1,100)). Если вы туда всуните генерацию данных, то просто нарушите принцип SOLID. Я винить вас за это не буду, но хотя бы на собеседованиях такого не делайте ;)

Цитата

оказывается поддержка создания классов "на лету" тоже имеется...

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


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
drkot
Дата 27.7.2014, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(Illusion Dolphin @  26.7.2014,  20:30 Найти цитируемый пост)
сделает наконец-то всё то многообразие библиотек

Ключевой вопрос: а оно надо? Если кому не хватает RTL + VCL, то он их просто не умеет готовить.

Цитата(Illusion Dolphin @  26.7.2014,  20:30 Найти цитируемый пост)
данные RanomInt(1,100)

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

type
  TCustomRandomAttribute = class(TCustomAttribute)
  public
    procedure Init(Value: TValue); virtual;
  end;

  TIntegerRandomAttribute = class(TCustomRandomAttribute)
  public
    constructor Create(const Min, Max: integer);
    procedure Init(Value: TValue); override;
  end;

  TFloatRandomAttribute = class(TCustomRandomAttribute)
  public
    constructor Create(const Min, Max: Double);
    procedure Init(Value: TValue); override;
  end;

  TStringRandomAttribute = class(TCustomRandomAttribute)
  public
    constructor Create(const Dict: TClass);
    procedure Init(Value: TValue); override;
  end;

...

    for LAttr in AAttr do
      if LAttr is TCustomRandomAttribute then
        TCustomRandomAttribute(LAttr).Init(Value);

...

Такое применение ничем не противоречит SOLID и ООП.
Также для подключения новых типов и способов генераций, достаточно написать аттрибут наследник с нужным функционалом. При этом никаких изменений в ядре обработчика (фреймверка) не потребуется.
В то время как Ваш пример потребует постоянной доработки ядра обработки.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Illusion Dolphin
Дата 27.7.2014, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

А согласно того же ООП класс объединяет данные и методы работы с этими данными

Цитата

Такое применение ничем не противоречит SOLID и ООП.

Буду краток:
1) Не согласен
2) 1 тема один вопрос


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.