Как очистить форму в лазарусе
Работа с формами Lazarus
Эта статья врядли будет интересна тем, кто раньше программировал в Delphi. Она в большей степени рассчитана на программистов VB, MS Access и других средств быстрой разработки. В каждой системе существуют свои правила и подходы, касающиеся программного открытия экранных форм, а также передачи и возврата пареметров. Вот я и хочу рассказать о том, как это сделано в Lazarus. При этом я предполагаю, что читатель достаточно хорошо понимает принципы ООП и уже знаком с синтаксисом языка Free Pascal.
Открытие форм в модальном режиме
Наиболее очевидным применением программного открытия дополнительной формы является выбор или поиск какого-либо значения в справочнике с последующим возвратом, например, кода найденного элемента в основную форму. Такую форму надо открывать модально, так как нет смысла продолжать выполнение основной программы, пока не сделан выбор и форма не закрыта. Попробуем это реализовать.
В качестве примера создадим новый проект и на главную форму поместим пару полей ввода и кнопок:
В качестве тестовой задачи будем открывать дополнительную форму с полем ввода, в котором первоначально должен содержаться текст из соответствующего поля ввода главной формы. Далее предусмотрим изменение этого текста и возврат обновленного значения в главную форму. Для этого сначала создадим дополнительную форму примерно такого вида:
В качестве программного интерфейса для передачи параметра будем использовать свойство TestValue, которое определим в секции public класса формы. Также определим и реализуем более чем очевидные методы для установки и считывание значения свойства, а также обработчик события нажатия на кнопку, в котором свойству формы ModalResult присваивается значение mrOK, что и приводит к закрытию (но не уничтожению!) формы.
Однако, самый большой интерес представляет функция RunTestForm. Как можно заметить, она определена вне класса формы, хотя и в том же модуле. Это может показаться странным программистам VB, где модуль класса полностью отождествляется с самим классом. Как и в Delphi, в Lazarus это не так. Хотя в одном модуле можно определить только одну форму (иначе визуальный дизайнер форм не сможет работать), другие элементы приложения не обязательно реализовывать отдельно. В нашем случае функция RunTestForm содержит код, необходимый для создания формы, передачи ей начального значения поля ввода и возврата отредактированного значения. Очевидно, что RunTestForm по смыслу связана с классом формы, поэтому будет разумно (хотя и вовсе не обязательно) расположить её в модуле формы.
Теперь посмотрим, как использовать всё это в основной форме. Добавим в обработчики событий нажатия на кнопки вызовы функции RunTestForm, в результате чего раздел реализации модуля главной формы приобретёт такой вид:
Вот и всё. Только не забудьте в свойствах проекта удалить дополнитетьную форму из списка автоматически создающихся форм. Теперь можно потестировать, то, что у нас получилось. Запустите программу и понажимайте кнопки на главной форме. Обратите внимание, что пока дополнительная форма присутствует на экране, Вы не можете перевести фокус на какую-либо другую форму, как и положено для модального режима. И наверняка Вы подумаете, что такое поведение не всегда является подходящим. Вот это и обсудим далее.
Открытие форм в немодальном режиме
Обратите внимание, что мы задекларировали новый метод FillWindowsList, который как раз и выполняет заполнение списка форм приложения. Его реализация не слишком сложна: Здесь есть некоторый интересный момент. Дело в том, что объект Application содержит единый список всех компонент, которыми владеет, поэтому приходится проверять, что очередной компонент является именно TForm.
Однако, что толку просто выводить список форм. Нужно сделать так, чтобы можно было переключиться на любую из них. В реальном приложении это, конечно, лучше сделать с помощью меню, но код получится несколько более громоздким, поэтому в нашем простом примере во-первых будем использовать список, а во-вторых опустим необходимые в реальном приложении проверки. Ниже представлен весь код секции реализации модуля основной формы. Обратите внимание, что вызывая метод RunTestForm мы уже не ждём возвращаемого значения, но зато вызываем процедуру заполнения списка окон приложения.
Теперь создадим дополнительную форму, которую будем открывать из главной формы в немодальном режиме. Внешне она ничем не будет отличаться от рассмотренной в предыдущей главе модальной формы, а вот код несколько изменится. Обратите внимание, что свойство TestValue теперь только для записи, а метод RunTestForm стал процедурой вместо функции.
Реализация тоже довольно сильно изменилась. Показ формы теперь производится вызовом метода Show, а не ShowModal, поэтому выполнение программы не передаётся в создаваемую форму до её закрытия, а продолжается. О закрытии и освобождении ресурсов теперь должна заботиться сама форма. Для этого в процедуре обработки события закрытия формы мы присвоим переменной CloseAction значение caFree. Нажатие на кнопку теперь вызывает не установку значения ModalResult, а явное обращение к методу Close.
Если Вы не просто читали эту статью, а создавали попутно описанную тестовую программу, самое время её запустить. Только снова не забудьте убрать дополнительную форму из списка автоматически создающихся при старте приложения.
Создать две кнопки в Лазарус, очистить и добавить пробелы к строкам

Дано число. Вывести цифры исходного числа через пробел. Найти минимальную цифру, используемую в.
Создать две кнопки
Как будет выглядеть например 2 кнопки, которые нажимаешь одну один цвет потом другую и в окошке.
Как в список множественного выбора добавить две кнопки проиграть mp3 и остановить?
Как в список множественного выбора добавить две кнопки проиграть mp3 и остановить? 11
Решение
есть форма, там создан оконный иттерфейс, могу откыть текстовый документ например, там будет текст, и нужны кнопки, одна из которых удалит пробел в начале кажой строки этого текста и кнопка, которая очищает выделенный текст, если он выделен, если нет, то весь текст
Добавлено через 1 минуту
спасибо)
Как создать две кнопки?
Нужно в форме создать кнопку ввода массива и там же кнопку вывода массива. Чтобы при нажатии первой.

Создать форму: текстовое поле и две кнопки. При нажатии на первую кнопку в текстовое поле заносятся.
Создать две кнопки, которые бы при нажатии менялись местами
работаю в лазарусе с формами, мне надо создать две кнопки, при нажатии они менялись местами.
Создание кнопки «добавить»,»очистить» на свободной форме
Нужно создать кнопку на свободной форме добавить,которая будет вносить все данные в таблицу.И.
Создать две кнопки и прикрепленные к ним формы, для добавления данных
Ребята, нужна помощь, стоит задача сделать макрос, который бы реализовал след требования: нужно.
Динамические деструкторы. Очистка формы
Здравствуйте дорогие форумчане.
Задача состоит в том что имеется класс методы которого создают различные виды меню.
Проблемма в том что при вызове одного из методов данного класса (один вид меню накладывается поверх другово.)
Чтобы этого избежать нужно обьявить уничтожение предыдущих экземпляров.(но вызывать такое колличество деструкторов не представляется возможным т.к некоторые влеженые методы создают сами себя).
Либо полностью очистить форму от всех уже имеющихся экземпляров.
Хотелось бы узнать можно ли
И как это реализовать.

Как можно очистить скажем нажатием кнопки все что было нарисовано Canvas. как-то нужно сделать.
Пересоздание формы (очистка)
Как программно очистить все изменения на форме? Т.е я так понимаю нужно пересоздать форму и.
Очистка графика + очистка формы
Есть две программы: Прямо на форме (через Canvas) рисую правильный многоугольник, но после.

Здравствуйте! Подскажите, мне нужно чтоб при скрытии формы checkedlistbox очищался, а при открытии.
Урок 12. Графические методы и процедуры
Основой графической системы Lazarus является класс TCanvas. Канва не является компонентом, но она входит в качестве свойства во многие другие компоненты, которые должны уметь нарисовать себя и отобразить какую-либо информацию.
Работа с графикой в Lasarus предполагает обращение к свойству Canvas компонентов, на которых вы хотите выводить изображение. Для программиста Canvas – это холст, который дает доступ к каждому пикселю.
При работе с графикой у вас в распоряжении находятся холст (свойство Canvas того компонента, на котором мы собираемся рисовать), кисть (свойство Brush объекта Canvas), перо (свойство Pen объекта Canvas). Кроме того, в нашем распоряжении будут и графические методы объекта Convas, которые позволяют рисовать не только пикселями, но и с помощью графических примитивов, что существенно упрощает работу с графикой в Lasarus.
Свойства объекта Pen (Перо)
| Свойство | Описание |
| Color | Цвет линии |
| Width | Толщина линии(задается в пикселах) |
| Style | Стиль пера. Задается следующими именованными константами: ![]() |
Свойства объекта Brush (Кисть)
Основные свойства класса TFont
| Свойство | Назначение |
| Charset | кодировка символов. Для шрифтов с русскими буквами — это PC-1251, КОИ-8 |
| Name | Вид шрифта. Например Arial. |
| Size | Размер шрифта |
| Style | Начертание символов. Задается с помощью констант:fsBold (полужирный), fsItalic (курсив), fsUnderline (подчеркнутый), fsStrikeOut (перечеркнутый).Свойство Style является множеством, что позволяет комбинировать необходимые стили. Например, инструкция, которая устанавливает стиль «полужирный курсив» выглядит так:Font.Style := [fsBold, fsItalic] |
Свойства объекта Canvas
| Свойство | Описание |
| Pen | Перо. Определяет цвет, стиль и ширину линии рисования. |
| Brush | Кисть. Определяет цвет, текстуру заполнения фигур или фона. |
| Font | Шрифт. Определяет вид и характеристики шрифта: цвет, размер, стиль и т.д. |
Графические методы объекта Canvas
| Метод | Описание |
| Arc (X1, Y1, X2, Y2,XЗ, Y3, X4, Y4) | Рисует дугу. Параметры X1,Y1, X2,Y2 задают эллипс, частью которого является дуга, параметры X3,Y3, X4,Y4 – начальную и конечную точку дуги. |
| Chord(X1, Y1, X2, Y2,XЗ, Y3, X4, Y4) | Рисует хорду и отсекаемую ею часть эллипса. Эллипс, начальная и конечная точки определяются, как в методе Arc. |
| Ellipse(X1, Y1, X2,Y2) | Рисует эллиспс (окружность). Параметры X1, Y1 указывают координаты верхней левой точки, X2, Y2 координаты нижней правой точки прямоугольника в который вписана окружность. |
| MoveTo(X, Y) | Перемещает текущее положение пера в точку (X,Y). |
| LineTo(X, Y) | Рисует линию из текущей точки в точку с координатами (X,Y). |
| Rectangle(X1, Y1, X2,Y2) | Рисует прямоугольник. Параметры X1, Y1 указывают координаты верхней левой точки, а X2, Y2 координаты нижней правой точки. |
| RoundRect(X1, Y1, X2,Y2,X3, Y3) | Рисует прямоугольник со скругленными углами. Параметры X1,Y1 указывают координаты верхней левой точки, X2, Y2 координаты нижней правой точки, а X3, Y3 — радиус скругления. |
| FillRect(X1, Y1, X2,Y2); | Производит заливку прямоугольника (текущей кистью). |
| Draw(X, Y, Graphic); | Добавляет на холст рисунок, указанный в параметре Graphic, в место, определяемое координатами (X, Y). |
| FloodFill(X, Y, Color, FillStyle) | Производит заливку области текущей кистью. Процесс начинается с точки (X,Y). Если режим FillStyle равен fsSurface, то он продолжается до тех пор, пока есть соседние точки с цветом Color. В режиме fsBorder закрашивание, наоборот, прекращается при выходе на границу с цветом Color. |
| Polygon( Points); | Строит многоугольник, используя массив координат точек Points. При этом последняя точка соединяется с первой.Polygon ([Point(10,10), Point(30,30),Point(20,40)]) |
| Polyline(Points); | Строит ломаную линию, используя массив координат точек Points. |
| TextOut(X, Y, Text) | Производит вывод строки Text начиная с точки (X,Y). |
Вычерчивание графических примитивов на графической поверхности, например компонента Image (Вкладка Additional), выполняют соответствующие методы класса TCanvas.
Объект — это объект, на поверхности которого нужно нарисовать графический элемент. В качестве объекта можно указать компонент Image.
Метод – это имя метода, который обеспечивает рисование нужного графического элемента.
Параметры, в большинстве случаев, определяют положение графического элемента на графической поверхности и его размер.
Например в результате выполнения инструкции
в поле компонента Image1 будет нарисован прямоугольник шириной 50 и высотой 20 пикселей, левый верхний угол которого будет находиться в точке(10,20).
При записи инструкций, обеспечивающих вывод графики, удобно использовать инструкцию with, которая позволяет сократить количество набираемого кода. Например, вместо:
Image1.Canvas.Rectangle(20, 20, 46, 70);
Можно написать вот так:
With Image1.Canvas do
Rectangle(20, 20, 46, 70);
Задание. Создать проект, реализующий возможности простейшего графического редактора, позволяющего рисовать произвольные линии при нажатой клавише мыши.
Для создания простейшей программы для рисования нам потребуются
следующие основные компоненты: TImage, TPanel, TColorDialog, TButton.
Ход выполнения проекта
1. Для начала разместите на форме данные компоненты примерно в таком виде:
2. В инспекторе объектов выберите компонент Panel1 и установите значение bnLowered для свойства BevelOuter
Привяжите Image1 к Panel1, переместив его на Panel1 в инспекторе объектов.
При этом Panel1 должна быть немного больше чем Image1
3. Откройте вкладку “события” для Image1 в инспекторе объектов, найдите вкладки OnMouseDown и OnMouseMove, нажмите кнопки “…” напротив них, чтобы получились данные строки:
Проделайте ту же операцию с событием OnCreate для Form1
4. Теперь, в редакторе исходного кода найдите строку
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Вписываем данный код. Он нужен для установки позиции пера
5. Далее, найдите строку
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState;X,Y: integer);
Впишите в эту процедуру данный код
Таким образом, будет рисоваться линия, если нажата левая кнопка мыши
6. После этого необходимо реализовать выбор цвета с помощью второй панели.
Для этого щелкните 2 раза по второй панели и в редакторе исходного кода
Пропишите данные строки
7. Далее мы реализуем кнопку “Фон”. 2 раза щелкните по Button1 и впишите код:
8. Вторую кнопку мы используем для функции очищения изображения
Практически тот же самый код мы используем для очищения изображения при запуске программы
9. Теперь, переходим к завершающему этапу программы – оформлению.
Установите данные значения в инспекторе объектов:
| Компонент | Свойство | Значение |
| Form1 | Caption | Рисовалка |
| Label1 | Caption | Цвет пера: |
| Panel1 | Caption | *пусто* |
| Panel2 | Caption | *пусто* |
| Button1 | Caption | Фон |
| Button2 | Caption | Очистить |
10. Графический редактор готов. Запустите программу, выберите цвет линий и цвет фона и можно рисовать.
Оруджов Эльвин, ученик 10 «А» класса СОШ №23, город Экибастуз.
Очистить Canvas
Подскажите, как очистить канву, чтобы не пропали динамически созданные на ней элементы. При перемещении элементов по панели я делаю отрисовку связей, но старые остаются, как их убрать?
Как очистить Canvas, чтобы не пропал цвет фона?
Здравствуйте! Подскажите как правильно очистить Canvas, что бы не пропал цвет фона.

Здравствуйте, пожалуйста, подскажите можно ли одной процедурой рисовать на Image.Canvas и.
построить функцию y=kx+b (линейная функция) с помощью Vcart или canvas (form.canvas)
Надо построить функцию y=kx+b (линейная функция) с помощью Vcart или canvas (form.canvas)
Как добиться одинакового размера шрифта при выводе на Image.Canvas и Printer.Canvas
Здравствуйте! Подскажите, пожалуйста, как добиться одинакового размера шрифта при выводе на.
Вложения
![]() | 1.rar (3.00 Мб, 10 просмотров) |
попробовал пересобрать на XE7
тут у TPanel canvas не в паблике, так что не взлетело
krapotkin, но зачем мне все переделывать, если по сути уже все готово, осталось только решить проблему с очисткой холста? Дальше поставить проверки, чтобы не пересекались элементы проводами этими и чтобы при множественной связи подключение было на нужный вход.
Я уже гору постов перечитал, но никак не могу найти компромиссного решения: либо стирает все, либо стирает только связи, но и не создает их нормально, как сейчас, например.
Вложения
![]() | 1.rar (3.00 Мб, 6 просмотров) |
вот делал образец про кинотеатр в соседней теме
добавил 30 строк, получилось для тебя
правда, запустить в лазаре не удастся, только смотреть исходники
но exe я приложил
ну гораздо проще замуток с TImage
Вложения
![]() | Cinema.rar (6.41 Мб, 9 просмотров) |
Решение
Mazanton,
Да что ж вы такие беспомощные?
Вложения
![]() | thread1395781.7z (66.9 Кб, 28 просмотров) |
volvo, я чувствую себя полным нубом) Вот эта строка для меня вообще загадка
Как очистить canvas?
Если в коде использовать Offset (сдвиг экрана), то предыдущий кадр анимации остается на том месте.
Есть способ очистить Canvas?
Собственно нужно коим-то образом очистить канву.Все линии которые построены на форме через.

как разместить черный пискель в центре canvas’a?
Canvas привязать к другому Canvas
Здравствуйте. Подскажите пожалуйста, как реализовать следующее: имеются две WPF формы с.












