www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 
Рэй Конопка является одним из очень
способных учителей, и я горд тем, что
"открыл" его на страницах PC TECHNIQUES,
который вскоре родится вновь как
Visual Developer Magazine
Джефф Дантеманн, Аризона, 1995

Культура программирования
  • Имена классов всегда начинаются с буквы T, а внутренние поля хранения данных с буквы F.
  • Разделы объявления класса определяются в следующем порядке: private, protected, public и published. К счастью, запомнить это легко, так как директивы идут в алфавитном порядке!
  • Методы доступа по чтению начинаются с Get, за которым идет имя свойства, тогда как методы доступа по записи начинаются с Set, за которым следует имя свойства. Например, методы доступа для свойства Height должны называться GetHeight и SetHeight.
  • Типы обработчиков событий объявляются как процедуры. Хотя компилятор и поддерживает объявление типов методов, являющихся функциями, функции для обработчиков событий использоваться не должны. Поскольку пустая функция возвращает неопределенный результат, то пустой обработчик события, определенный как функция, не всегда может быть допустимым.
  • Свойства событий начинаются со слова On, за которым следует имя события. Например, название свойства для события Paint будет OnPaint.
  • Используйте панели для автоматического выравнивания элементов управления в форме. Например, WizardDataForm использует четыре панели: одну, окружающую поле редактирования, установленую в alTop; одну, окружающую сетку, установленную в alClient; одну у основания, установленую в alBottom; и одну вокруг кнопки внутри панели. Эта вложеная панель установлена в alRight. При изменении размеров формы сетка заполняет форму, и кнопки остаются выравненными по правому краю.

Правила и рекомендации
  • Объектные типы BP7 можно использовать в 16-разрядной версии Делфи, употребляя ключевое слово object. В дополнение к поддержке совместимости, это дает возможность сосуществовать классам и объектным типам. Хотя употреблять оба варианта в одном и том же модуле не рекомендуется, приложение может состоять из модулей, использующих классы, и модулей, использующих объектные типы. Однако обратите внимание на то, что объектные типы недоступны в 32-разрядной версии Делфи и, что еще важнее, объектные типы нельзя использовать для создания компонентов.
  • Во избежание неоднозначности всегда определяйте директивы видимости. В Object Pascal нет формального воплощения классов из friend C++. Но то, как работает директива private, делает все классы, объявленные в одном и том же модуле, дружественными (friend) друг к другу.
  • Так ка свойство можно использовать внутри методов класса, то очень легко попасть в ситуацию бесконечной рекурсии. Например, следующий метод SetHeight является бесконечно рекурсивным, поскольку новое значение присваивается значению свойства, что приводит к новому вызову SetHeight и так далее.
  • procedure SetHeight(Value : Integer);
    begin
    if Value <> FHeight then
    begin
    Height := Value; //Присваивание нового значения СВОЙСТВУ!!!
    Invalidate
    end;
    end;
    Во избежание подобной проблемы присвойте новое значение внутреннему полю данных FHeight.
  • Имея дело со строковымисвойствами, задавайте параметр нового значения в методе записи свойства как параметр-константу. Когда методу в качестве значения параметра передается строка, то для использования в методе создается локальная копия строки. Когда передается строка с использованием ключевого слова const, то в метод передается только ссылка на строку (то есть указатель). Однако содержимое строки нельзя модифицировать. В результате код получается более эффективным и защищенным.
  • Не ставьте точки в конце сообщения особой ситуации. Делфи делает это автоматически, при отображении сообщения.
  • Ни в коем случае не устанавливайте для графического элемента управления свойство ControlStyle в csAcceptsControls. Хоть это и возможно, но если Вы попытаетесь поместить какой либо компонент поверх этого элемента, Делфи попытается вставить помещаемый компонент в окно графического элемента управления. Так как подобное не возможно без идентификатора окна, то возникнет жесткая GPF.
  • Никогда не добавляйте, не удаляйте и не модифицируйте каких-либо полей, появляющихся выше директивы private в классе формы Делфи. Эта область управляется Проэктировщиком форм, и поля, которые в ней появляются, согласовываются с компонентами, запомненными в файле фрмы. Модификация полей может сделать форму некорректной.
  • Для определения идентификатора прозрачного цвета в растровом изображении служит нижний левый пиксел.
  • Имея дело с записями TRect и TPoint, полезно использовать функции Rect и Point из модуля Classes, которые возвращают соответствующую запись, заполненную значениями, переданными функции. Например:

  • PolyLine([Point(10, 10), Point(100, 10)]);
  • Для посылки компоненту сообщения используют метод Perform. Этот метод может послать компоненту любое сообщение. Если сообщение является сообщением Windows, то метод Perform ведет себя также, как функция SendMessage в API. Например, следующий оператор высчитывает текущую позицию строки в компоненте Memo1, посылая сообщение em_LineFromChar:

  • CurrentLine := Memo1.Perform(em_LineFromChar, Memo1.SelStar, 0);
    Perform обходит очередь сообщений Windows и посылает сообщение непосредственно оконной процедуре компонента.
  • Для предотвращения мерцания при отображении компонентов, вместо использования метода Invalidate обратитесь к методу Repaint. Этот метод не очищает область компонента перед рисованием, как это делает Invalidate. Например, так как свойство Percent меняется очень часто, то для отображения нового процента метод SetPercent непосредственно вызывает Repaint. Единственное требование для того, чтобы Repaint вел себя подобным образом, заключается в том, что свойство ControlStyle компонента должно включать csOpaque.
  • Найболее распространенной ошибкой, случающейся при копировании образа с одного полотна на другое, является пропуск установки розмера образа на результирующем полотне. В методе TRzGlyphStatus.Paint, до того как вызвать метод CopyRect, свойства Width и Height об'екта DestBmp должны устанавливаться в ненулевые значения.
  • Перечисляйте константы case в восходящем порядке. Это предоставит возможность компилятору оптимизировать оператор case в серию переходов в противоположность последовательности независимых (и медленых) вычислений. Например, в методе TRzTrackBar.KeyDown виртуальные коды клавиш перечислены в цыфровом порядке.
  • Переопределяя методы деспетчеризации, подобные Click и MouseDown, обязательно вызовите унаследованый метод для того, чтобы запустить соответствующее событие. Без такого вызова пользователи Вашего компонента не смогут добавлять к событию свой код.
  • Массив символов должен начинатся с нулевого индекса. Массивы символов могут быть использованы везде, где требуется параметр PChar. Это упрощает выделение памяти для ограниченых нулями строк. Например, следующие две процедуры эквиваленты:
  • procedure TForm1.Button1Click(Sender: TObject);
    var
    Msg : PChar;
    begin
    Msg := StrAlloc(255);
    StrPCopy(Msg, Edit1.Text);
    MessageBox(Handle, Msg, 'Tip', mb_Ok);
    StrDispose(Msg);
    end;
    procedure TForm1.Button2Click(Senter: TObject);
    var
    Msg : array[0..255] of Char;
    begin
    StrPCopy(Msg, Edit1.Text);
    MessageBox(Handle, Msg, 'Tip', mb_Ok);
    end;
  • Никогда не создавайте обьектный экземпляр TStrings, так как TStrings является абстрактным классом. Это означает, что некоторые из его методов только обьявляются. Вызов одного из неопределенных методов приводит к созданию особой ситуации. В обьязаности порожденных классов входит замещение этих методов "реальными", которые превращают абстрактный класс TStrings в что-либо полезное, на пример TStringList.

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


57
Используются технологии uCoz
Используются технологии uCoz

Rambler's Top100 Rambler's Top100
Используются технологии uCoz

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz