Как сделать кнопку очистить в делфи

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Есть TToolBar собранный визуально с кнопками (т.е. в самом редакторе Lazarus, например. А быть может и собранными кнопками runtime).

Хочу создаваемые/удаляемые кнопки runtime.

Начал с того, что бросил в визуальном редакторе на банальную ToolBar1 одну кнопку.

Затем хочу ее удалить runtime так:

Код: Выделить всё for i:=0 to ToolBar1.ButtonCount-1 do
begin
ToolBar1.Buttons[i].Destroy;
end;

Никаких ошибок не вижу.
Физически кнопка остается на своем месте runtime.

А вот при следующем проходе этого-же цикла я уже узнаю, что ToolBar1.ButtonCount уже равен 0.
Т.е. что-то все-же удалилось. Но визуально оно продолжает существовать (не проверял события, возможно они отвязываются у такого контрола).

Вопрос: что я делаю не правильно?
(Просто впервые озадачился таким мероприятием).

Странно, что нет ошибок. Убедитесь - с того ли тулбара Вы удаляете кнопки и не перехватываются ли у Вас Exception'ы?
Данный код корректно создал и удалил кнопки (fpc 2.6.0, linux, qt)
Код: Выделить всё Unit Unit1;

Uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
StdCtrls;

TForm1 = Class(TForm)
Button1: TButton;
ToolBar1: TToolBar;
Procedure Button1Click(Sender: TObject);
Procedure FormCreate(Sender: TObject);
Private
< private declarations >
Public
< public declarations >
End;

Var
Form1: TForm1;

Procedure TForm1.FormCreate(Sender: TObject);
Var
i: Integer;
Begin
For i := 0 To Random(5) + 1 Do
Begin
ToolBar1.ButtonList.Add(TToolButton.Create(Self));
ToolBar1.Buttons[ToolBar1.ButtonCount -1].Parent := ToolBar1;
End;
end;

Procedure TForm1.Button1Click(Sender: TObject);
Var
i: Integer;
Begin
For i := ToolBar1.ButtonCount - 1 DownTo 0 Do //

Brainenjii
спасибо. Код переписал. Заработало.
Странно, что с destroy тоже работает.

Ну да ладно. Тему считаю можно закрыть.

Ничего странного. Free - тот же Destroy, только с полубезумной проверкой (не является ли освобождаемый объект nil'ом, хотя как по мне - это явная ошибка).

Кто сейчас на конференции

У меня на форме расположено примерно 50 Edit'ов , 121 label и 36 Combobox . Как программно очистить их значения не перебирая каждый компонент по отдельности, ведь это очень глупо получиться ?

1 ответ 1

В принципе работает только одно НО. У меня на форме PageControl в них GroupBox. И очистилось только в первом боксе, т.е. в GroupBox1. Что не так ?

все разобрался, ты все правильно написал, я просто сам ошибся когда перепечатывал у меня форма 12-ая а не первая.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками delphi или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.26.41266

Школа программирования Delphi

Портал DelphiSchool является бесплатным проектом, обеспечивающим пользователям быстрый и легкий доступ к урокам программирования на Delphi. Сайт позволяет научиться программировать на Делфи любому, кто хочеть писать свои программы, игры, Android приложения, программы для MAC OC или IOS. Кроме уроков Delphi и статей Delphi, на сайте доступны также и видеоуроки. Практически к каждому уроку, пользователю доступен исходник, изучив который, он сможет наглядно посмотреть как работает та или иная программа, написанная на Делфи. Кроме того мы постараемся прилагать к каждому материалу (статье, уроку, видеоуроку) файлы Delphi, которые будут помогать изучить предоставленный материал.

Каждый кто решил написать свою программу, создать свое приложение, научиться программировать и т.д., найдет на DelphiSchool статьи Delphi, уроки Delphi, видеоуроки Delphi, исходники Delphi, файлы Delphi, изучит компоненты Delphi, посмотрит Delphi примеры и многое другое абсолютно бесплатно. Все о Delphi программировании теперь собрано на одном сайте.
DelphiSchool

В прошлом уроке Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 1. Свойства кнопки, мы рассмотрели основные свойства кнопки, и теперь пришло время рассмотреть события кнопки в Delphi и написать свой первый код программы. В конце статьи, если вам что-нибудь останется не понятным, вы можете скачать исходник Delphi и наглядно посмотреть где и как прописан код программы и как она работает.
Давайте откроем созданный нами ранее проект MyFistButton (File | Open | файл MyFistButton.dpr). Выделяем кнопку SendButton и переходим на вкладку Events (События), которая находится в окне объектного инспектора.Как мы уже знаем, за щелчок клавиши мыши отвечает событие OnClick. Поэтому давайте найдем это событие и дважды кликнем на нем левой кнопкой мыши. Delphi создает в редакторе кода процедуру – обработчик события OnClick.По умолчанию этой процедуре присваивается имя в виде имени компонента (в нашем случае имени нашей кнопки SendButton) плюс имя события без приставки On. Таким образом имя нашей процедуры будет SendButtonClick, а созданная Delphi процедура будет выглядеть так:

procedureTForm1.SendButtonClick(Sender: TObject);
begin

В объектном инспекторе, напротив события OnClick также появляется имя процедуры обработчика. Мы можем изменить это имя на любое другое, или же выбрать имя из ниспадающего списка. Но в нашем случае в ниспадающем списке ничего нет, так как мы ничего еще не делали, и похожих обработчиков события у нас нет.



Рисунок. Объектный инспектор в котором отображена процедура обработчика

Давайте теперь создадим обработчик события для кнопки CloseButton. Делаем все так же как и делали для кнопки SendButton, только внутри процедуры напишем команду Close:


Теперь, если мы запустим программу, сделаем кнопку "Закрыть приложение" активной и нажмем на нее, то программа закроется.
Close – это метод формы, поэтому мы могли бы написать немного по другому:

Между первым и вторым примером нет абсолютно никакой разницы.

Если в этом уроке вам что-нибудь не понятно, то ниже вы можете скачать исходник Delphi и наглядно посмотреть где и как прописан код программы и как она работает.

К уроку (статье) Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 2. События кнопки прилагается исходник, посмотрев который, вы можете ознакомиться с полным исходным кодом программы и посмотреть как работает созданная программа. Исходный код сопровождается комментариями, благодаря чему вы сможете легко в нем разобраться. Но я настоятельно рекомендую делать все самостоятельно. Так вы лучше и быстрее усвоите то, о чем говорилось в этом уроке

Для того чтобы получить возможность скачать исходник Delphi к этому уроку, необходимо посетить сайт рекламодателя. После этого, появится ссылка на исходник Delphi к уроку Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 2. События кнопки
Нажмите на эту ссылку Ссылка

Не забывайте писать свои отзывы об уроке Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 2. События кнопки. Ваша информация об уроке Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 2. События кнопки может помочь другим людям изучить программирование на Delphi. Также не забывайте проставлять рейтинг урока, ведь от этого зависит его попадание в список лучших уроков Delphi

Кнопки являются элементами управления и служат для выдачи команд на выполнение определенных функциональных действий. Существует несколько видов кнопок в Delphi:

Основным для кнопки событием является событие OnClick, возникающее при ее нажатии.

Свойство Default , если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.

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

Свойство Glyph определяет растровый рисунок кнопки (формат bmp). По умолчанию кнопка не содержит рисунок. Delphi поставляется большое количество изображений для кнопок. Они расположены в каталоге ImagesButtons, а сам каталог Images расположен в каталоге program filescommon filesborland shared.

Расположение изображения и надписи на кнопке определяется свойствами Margin , Layout и Spacing . Если свойство Margin равно -1 (значение по умолчанию), то изображение и надпись размещаются в центре кнопки. При этом положение изображения но отношению к надписи определяется свойством Layout , которое может принимать значения: blGlyphLeft (слева, это значение принято по умолчанию), blGlyphRight (справа), blGlyphТор (вверху), blGlyphBottom (внизу). Если же Margin > 0 , то в зависимости от значения Layout изображение и надпись смещаются к той или иной кромке кнопки, отступая от нее на число пикселей, заданное значением Margin .

Свойство Spacing задает число пикселей, разделяющих изображение и надпись на поверхности кнопки. По умолчанию Spacing = 4 . Если задать Spacing = 0 , изображение и надпись будут размещены вплотную друг к другу. Если задать Spacing = -1 , то текст появится посередине между изображением и краем кнопки.

Еще одно свойство BitBtn – свойство Kind определяет тип кнопки. По умолчанию значение этого свойства равно bkCustom – заказная. Но можно установить и множество других предопределенных типов: bkOK , bkCancel , bkHelp , bkYes , bkNo , bkClose , bkAbort , bkRetry , bkIgnore , bkAll . В этих типах уже сделаны соответствующие надписи, введены пиктограммы, заданы еще некоторые свойства.

Кнопки SpeedButton имеют возможность отображения пиктограмм и могут использоваться как обычные управляющие кнопки. Обычно они используются в качестве быстрых кнопок, дублирующих различные команды меню, и в инструментальных панелях, в которых требуется фиксация нажатого состояния.

У кнопок SpeedButton , как и у других кнопок, имеется свойство Caption – надпись, но в этих кнопках оно обычно оставляется пустым, так как вместо надписи используется пиктограмма.

Изображение на кнопке задается свойством Glyph . И точно так же свойство NumGlyphs определяет число используемых пиктограмм, свойства Layout и Margin определяют расположение изображения, а свойство Spacing – расстояние между изображением и надписью.

Кнопка может использоваться как переключатель. Поэтому, кроме обычного и нажатого состояний, она имеет третье состояние – утопленное, или выбранное (включенное). Включена кнопка или нет, определяет свойство Down (значение true – кнопка выбрана).

Все быстрые кнопки объединяются в группы. Принадлежность кнопки к группе определяет свойство GroupIndex. По умолчанию свойство имеет нулевое значение, и кнопка не относится к группе.

Если кнопка не входит в группу, то она не может работать как переключатель и находится в выбранном состоянии. Если есть несколько кнопок, имеющих одинаковое ненулевое значение GroupIndex , то они образуют группу взаимосвязанных кнопок из которых нажатой может быть только одна. Если одна кнопка находится в нажатом состоянии и пользователь щелкает на другой, то первая кнопка освобождается, а вторая фиксируется в нажатом состоянии. Поведение нажатой кнопки при щелчке на ней зависит от значения свойства AllowAllUp . Если оно равно true , то кнопка освободится, поскольку в этом случае возможно состояние, когда все кнопки группы отжаты. Если же AllowAllUp равно false , то щелчок на нажатой кнопке не приведет к изменению вида кнопки.

Если Grouplndex > 0 и AllowAllUp (разрешение отжатого состояния всех кнопок группы ) = true , то кнопка при щелчке пользователя на ней погружается и остается в нажатом состоянии. При повторном щелчке пользователя на кнопке она освобождается и переходит в нормальное состояние.

Читайте также: