Графическое построение объектов в среде Delphi

Автор: Пользователь скрыл имя, 04 Ноября 2011 в 14:53, реферат

Описание работы

Графические средства позволяют воспроизводить на экране дисплея статические или динамические рисунки, отображающие действия программы или пользователя, манипулировать с изображениями или их фрагментами, сохранять рисунки в дисковых файлах или передавать их другим приложениям.
В системе Delphi существует более десятка компонентов и графических объектов, используемых для визуализации различных изображений, создаваемых программным путем или отображающих содержимое некоторых графических файлов. Их всех роднит свойство Canvas, которое собственно и обеспечивает компоненты поверхностью (канвой), способной хранить графические образы..

Работа содержит 1 файл

Реферат по ПРЗ.docx

— 184.65 Кб (Скачать)

    //Установка  цвета фона и построение залитых  квадратов

    Canvas->Brush->Color=clGreen;

    Canvas->Rectangle(0,0,100,100);

    Image1->Canvas->Brush->Color=clYellow;

    Image1->Canvas->Rectangle(0,0,100,100);

    PaintBox1->Canvas->Brush->Color=clBlue;

    PaintBox1->Canvas->Rectangle(0,0,100,100);

    StatusBar1->Canvas->Brush->Color=clRed;

    StatusBar1->Canvas->Rectangle(0,0,100,100);

    Fbmp->Canvas->Brush->Color=clAqua;

    Fbmp->Canvas->Rectangle(0,0,100,100);

    //Заполнение  квадратов случайными черными  точками

    for (j=0;j<10000;j++)

    x=random(100);

    y=random(100);

    Canvas->Pixels[x][y]=clBlack;

    Image1->Canvas->Pixels[x][y]=clBlack;

    PaintBox1->Canvas->Pixels[x][y]=clBlack;

    StatusBar1->Canvas->Pixels[x][y]=clBlack;

    Fbmp->Canvas->Pixels[x][y]=clBlack;

    Canvas->Draw(0,120,Fbmp); //Копирование Bitmap'a на форму

    Не  забудем при уничтожении формы  освободить ресурсы, выделенные под  Fbmp:

    void __fastcall TForm1::FormDestroy(TObject *Sender)

    if(Fbmp!=NULL)delete Fbmp; //Удаление Bitmap'a

    Вместо  копирования содержимого Bitmap мы могли бы поместить на форму объект, обладающий свойством Picture (например — Image2). Если это свойство приравнять к указателю на Fbmp, то собственником Bitmap'а становится видимый графический объект:

    Image2->Picture->Graphic = Fbmp;

    Это избавляет нас не только от прямого  копирования содержимого Bitmap'a, но и от его удаления из памяти. Последнее произойдет автоматически после разрушения собственника.

    Запустите приложение и понаблюдайте за процессом  построения изображений. После завершения работы (сигналом к этому будет  появление изображений, созданных  на Image1 и Fbmp) сверните форму в иконку и восстановите ее. Можно подвергнуть окно и другому испытанию, заслонив нашу форму каким-либо другим окном. На все эти манипуляции реагирует операционная система, которая пошлет нашему приложению сообщение WM_PAINT с информацией о координатах перекрытой части формы. Поскольку в первом варианте приложения обработчик события FormPaint не был предусмотрен, то после активизации нашей формы на ней пропадут перекрытые части изображений, сформированные на канве экранных компонент.

    Для восстановления пропавших изображений  подключим к нашему приложению обработчик события OnPaint, в котором следует повторить формирование содержимого канвы формы, объектов PaintBox1 и StatusBar1, а также процедуру копирования Fbmp. При этом необходимо учесть следующие детали. Сообщение операционной системы WM_PAINT трансформируется в событие визуальной среды OnPaint, и независимо от причины, вызвавшей это событие, управление будет передано обработчику FormPaint. Форма перерисует себя (точнее, ту часть, которая была повреждена) и выполнит все действия, запрограммированные в обработчике. Перед возвратом из функции FormPaint будут сгенерированы сообщения OnPaint, адресованные всем размещенным на форме компонентам. Один из моментов работы описанного приложения приведен на рис. 1.

    

    Рис.1. Восстановление изображения на разных объектах

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

    Объект  PaintBox, который не содержит никаких видимых элементов, перерисовку не выполняет, но сообщение OnPaint всем своим компонентам пошлет.

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

    void __fastcall TForm1::FormPaint(TObject *Sender)

    int j,x,y;

    Form1->Update(); //Перерисовка формы и всех ее компонент

    //Установка  цвета фона и построение залитых  квадратов

    //экранных компонент

    Canvas->Brush->Color=clGreen;

    Canvas->Rectangle(0,0,100,100);

    PaintBox1->Canvas->Brush->Color=clBlue;

    PaintBox1->Canvas->Rectangle(0,0,100,100);

    StatusBar1->Canvas->Brush->Color=clRed;

    StatusBar1->Canvas->Rectangle(0,0,100,100);

    //Заполнение  квадратов экранных компонент

    //случайными  черными точками

    for (j=0;j<10000;j++)

    x=random(100);

    y=random(100);

    Canvas->Pixels[x][y]=clBlack;

    PaintBox1->Canvas->Pixels[x][y]=clBlack;

    StatusBar1->Canvas->Pixels[x][y]=clBlack;

    Приведенный пример объясняет, почему авторы многих книг демонстрируют примеры графических  построений в составе обработчика  события FormPaint. Им не грозят никакие трансформации формы на экране, т.к. при поступлении сообщения WM_PAINT все построения повторяются заново.

Информация о работе Графическое построение объектов в среде Delphi