Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  22:44[Войти] | [Зарегистрироваться]
Обсуждение темы:
Можно, но не нужно.


Последнее время я не программирую, а рaзгpебаю зaвалы которые оставили до меня покoления программистов. Чтобы внести минимальное декоративное изменение требуется исправить несколько модулей и потратить несопоставимую по сложности работу по выискиванию всех мест, в которые надо внести изменения.
Дело в том, что тем методы, которые допустимы в примерах, олимпиадах и лабах по программированию, совершенно неприемлемы при создании крупных и долгоживущих прикладных программ.
Предлагаю в этой теме публиковать примеры, как не надо программировать на Delphi, что бы потом не было мучительно больно от встречи с теми, кто исправлял твой код.

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 421 сообщение

Добавить свое сообщение

Отслеживать это обсуждение
<<<... | 181—172 | 171—162 | 161—152 | ...>>>
Всего сообщений в теме: 421; страниц: 43; текущая страница: 26


№ 171   27-02-2008 14:51 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 170« (panda)
___________________________

Правда становится важным порядок элементов в массиве.
Ну это и в варианте с try-except было, так что подходит. Так и сделаю, только массив константный.

Всем спасибо.


№ 170   27-02-2008 14:33 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 169« (bems)
___________________________

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


№ 169   27-02-2008 11:51 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 167« (Cepгей Poщин)
___________________________
Спасибо, идея ясна.
Как это переделать чтобы функция возвращала обработчик для ближайшего по иерархии класса?


№ 168   27-02-2008 11:38 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 167« (Cepгей Poщин)
___________________________

Если входной класс является ошибкой, как я понял, то она должна генерироваться?Нет, это для ошибок в конструкторе


№ 167   27-02-2008 11:34 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 166« (bems)
___________________________
Загнать все классы и соответствующие им события в массив.
Если входной класс является ошибкой, как я понял, то она должна генерироваться?

function TfrmMain.FindGetTextEvent(ClassRef: TClass): TNotifyEvent;
type
  TClassRefEvent = record
    ClassRef: TClass;
    Event: TNotifyEvent;
  end;
var I: integer;
    E: Exception;
    ClassRefEvents: array of TClassRefEvent;
begin
  result := Button2Click; // Это значение по-умолчанию
  if ClassRef = nil then Exit;
  // Формируем массив. Это может происходить в конструкторе, сколько угодно раз
  SetLength(ClassRefEvents, 1);
  ClassRefEvents[0].ClassRef := TForm;
  ClassRefEvents[1].Event := Button2Click;
  //......
  // Если входной параметр — ошибка, то генерируем её
  if ClassRef.InheritsFrom(Exception) then
  begin
    E := Exception(ClassRef.Create);
    E.Message := 'Ошибочка вышла';
    raise E;
  end
  else
  begin // иначе ищим соответствующее событие
    for I := 0 to Length(ClassRefEvents) - 1 do
      if ClassRefEvents[I].ClassRef = ClassRef then
      begin
        result := ClassRefEvents[I].Event;
        Exit;
      end;
  end;
end;

 Cep


№ 166   27-02-2008 11:20 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 164«
___________________________

Кроме того простая проверка на равенство тут не подходит, потому что нужно предусмотреть случаи когда ClassRef наследуется от класса, для которого у меня есть обработчик


№ 165   27-02-2008 10:57 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 164«
___________________________

это и написано чтобы избежать сложного if
Одно другого стОит


№ 164   27-02-2008 10:31 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 163« (bems)
___________________________

А в чем проблема? Переписывается это набором IF'ов.
if ClassRef = TBlobField then result:=MemoOnGetText else
//не знаю сколько классов полей придется сюда добавить
  result:=DefaultGetText


№ 163   27-02-2008 09:52 Ответить на это сообщение Ответить на это сообщение с цитированием
Я написал вот такое. Я знаю, что так не нужно. Подскажите как переписать без большого многоэтажного if


function TDBGridEx.FindGetTextEvent(ClassRef: TClass): TFieldGetTextEvent;
begin
try raise ClassRef.Create;
except
on Exception do raise;
on TBlobField do result:=MemoOnGetText;
//не знаю сколько классов полей придется сюда добавить
else result:=DefaultGetText
end;
end;



№ 162   27-02-2008 04:14 Ответить на это сообщение Ответить на это сообщение с цитированием
Ой да прям-таки!

Разгильдяйство - принцип нашего общества!

Вышел человек на работу - унюхал запах мусорника.
Потому что дворник поленился утром встать и попшикать
дезиком. Сел в автобус. А там тетя не так улыбнулась.
Потому что ей вечером пришлось. Человек вышел из
автобуса - надо дорогу переходить. А крутелык на
иномарке тоже вчера горчёного пива выпил. Дошел
человек до работы - а там - начальник!!! А у
начальника сын вчера двойку получил. И т.д.

Потому у "них" - мерседесы, а у "нас" - жиклеры
вместо Windows CE. У "них" дорожки по-диагонали, а
у "нас" - два квартала обходить, чтобы попасть во
двор.

Но, судя по всему, в Редмонде тоже жизнь не сахар!
Эмансипация, или дискриминация по цвету штанов - не
знаю. А может, Билли Затворщик просто слишком жадный!


<<<... | 181—172 | 171—162 | 161—152 | ...>>>
Всего сообщений в теме: 421; страниц: 43; текущая страница: 26


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования