Как очистить форму в лазарусе

Работа с формами 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 при скрытии формы и открытии формы
Здравствуйте! Подскажите, мне нужно чтоб при скрытии формы 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. Теперь, переходим к завершающему этапу программы – оформлению.

Установите данные значения в инспекторе объектов:

КомпонентСвойствоЗначение
Form1CaptionРисовалка
Label1CaptionЦвет пера:
Panel1Caption*пусто*
Panel2Caption*пусто*
Button1CaptionФон
Button2CaptionОчистить

10. Графический редактор готов. Запустите программу, выберите цвет линий и цвет фона и можно рисовать.

Оруджов Эльвин, ученик 10 «А» класса СОШ №23, город Экибастуз.

Источник

Очистить Canvas

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

Как очистить Canvas, чтобы не пропал цвет фона?
Здравствуйте! Подскажите как правильно очистить Canvas, что бы не пропал цвет фона.

Как очистить форму в лазарусеМожно ли одной процедурой рисовать на Image.Canvas и Printer.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 html5, как разместить черный пискель в центре canvas’a?
как разместить черный пискель в центре canvas’a?

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *