Урок Delphi 2

Компоненты Delphi - основа визуального проектирования




Уроки Delphi
  1.  Первая программа
  2.  Использование компонентов
  3.  События Delphi
  4.  Типы данных Delphi
  5.  Создание своих типов данных
  6.  Выражения и операторы
  7.  Работа с файлами в Delphi
  8.  Дополнительные формы
  9.  Подпрограммы в Delphi
  10. Исключительные ситуации
  11. Взаимодействие приложения с пользователем
  12. Указатели в Delphi
  13. Обзор компонентов
  14. Работа со строками
  15. Создание интерфейса
  16. Графика в Delphi
  17. Многопоточность в Delphi
  18. Динамическое создание
        компонентов
Поиск по сайту




 Это важно:
   Метод Application.ProcessMessages;

 Это полезно:
   Параметр Sender в обработчиках событий;










Бояться не надо



   В пустой форме смысла нет. Наполнить её содержанием помогут компоненты Delphi. Они располагаются на соответствующих вкладках палитры компонентов на главном окне. Все основные компоненты Delphi находятся на первых четырёх вкладках:

  • Standard,
  • Additional,
  • Win32,
  • System.
    Компоненты Delphi
Их названия всплывают в виде подсказок при наведении мышки на пиктограммы. Чтобы перенести компонент на форму, нужно щёлкнуть его мышкой (при этом выбранный компонент выделяется), и затем щёлкнуть в том месте формы, где его предполагается разместить. В дальнейшем компоненты можно свободно перетаскивать по форме мышкой, "конструируя" нужный интерфейс. Если, щёлкнув по компоненту, вы захотите отказаться от его переноса на форму, щёлкните по стрелке, расположенной слева на вкладке. Выделение компонента снимется.

   Есть соответствующие справочники, где рассматриваются все компоненты Delphi. Но самые важные свойства компонентов Delphi и работу с ними мы рассмотрим.
   Рассмотрим компоненты отображения текста. Создайте новый проект (File -» New -» Application), и перенесите на форму компоненты Label, Edit, Memo и Button. Выбирая одним щелчком мышки или клавишей Tab нужный компонент, в Инспекторе Объектов мы можем получить доступ к его свойствам.
Прежде всего, у визуальных компонентов есть свойства, определяющие их положение на Форме:

  • Ширина компонента, Width
  • Высота компонента, Height
  • Расстояние до левого края формы, Left
  • Расстояние до верхнего края формы, Top
   Эти свойства получают значения в тот момент, когда компоненты попадают на форму. Примерно разместив на форме компоненты с помощью мышки, в Инспекторе объектов устанавливаем их точные размеры и координаты. В дальнейшем мы увидим, что их можно устанавливать и программно!
   За визуальное представление отвечают для компонентов:

  • Label и Button - свойство Caption,
  • Edit - свойство Text,
  • Memo - свойство Lines.

   При "конструировании" формы в Инспекторе объектов можно придать свойствам компонентов любые значения. Случайно можно задать такие размеры или координаты, что компонент "исчезнет" - сделается невидимым или спрячется за другими компонентами. Его легко найти с помощью того же Инспектора Объектов - все компоненты, находящиеся на Форме, перечислены в его выпадающем списке. Достаточно выбрать нужный компонент, и он или его контуры (если он заслонён" другими компонентами) появятся на Форме, а в Инспекторе объектов - его свойства.

      Теперь "запустите" программу (зелёная стрелка или F9). Видим, что компоненты "работают". Label является надписью (меткой) на форме, Button - кнопка нажимается, Edit - строка ввода и Memo - многострочный текстовый редактор позволяют вводить текст!

   А теперь давайте напишем маленькую программку! Она будет по нажатию кнопки отображать на форме то, что мы введём в строке ввода. Начните новый проект (File -» New -» Application).

  1. Расположите на форме компонент Edit (строка ввода). Свойство Text очистите.
  2. Далее - компонент Button (кнопка). В свойстве Caption напишите, например, "показать".
  3. Затем - компонент Label (метка). В свойстве Font для наглядности сделайте размер побольше, например 24, выберите шрифт и цвет. Свойство Caption также очистите.
  4. Щёлкните дважды по нашей кнопке. Произошла метаморфоза! Мы очутились в окне модуля, где система Delphi создала для нас заготовку обработчика события нажатия на кнопку!
  5. В обработчике пишите: Label1 и поставьте точку. Подождите секунду после ввода точки. Видите - выскочила подсказка!. Система Delphi предлагает нам выбрать из списка нужное свойство или метод. Нажмите "C", и строка "Caption" станет выделенной. Delphi пытается угадать, что мы хотим ввести. Дальше писать не обязятельно, достаточно нажать Enter.
  6. В результате получим: Label1.Caption. Таким образом мы видим, что точкой разделяются в Delphi объект и его свойства. Указанием на объект служит его имя (свойство Name). Имя компонента можно посмотреть в Инспекторе Объектов, а также наведя мышку на компонент и дождавшись появления подсказки.
  7. Далее присваиваем свойству Caption объекта Label1 значение. Знакомьтесь, оператор присваивания:
       :=
    Двоеточие перед знаком равенства обязательно!!!
  8. Получаем:
      Label1.Caption:=
    Подумайте сами, что писать дальше...
  9. ...а именно то, что мы хотим отобразить в метке - свойство Text объекта Edit1: Edit1.Text
  10. Далее то, чем завершается любая команда - оператор ";". Это именно оператор, хотя и не выполняющий никаких действий, и его иногда применяют именно в этом качестве.
   Вот что у нас получилось:

Label1.Caption := Edit1.Text;

Кому лень, просто скопируйте отсюда и вставляйте между begin и end. Ну всё, сохраняем и жмём F9.

   В дальнейшем программы будут куда сложнее. Что делать, если в результате ошибки в программе она зависнет? Естественно, можно воспользоваться комбинацией Ctrl+Alt+Del, но проще, нажав OK в окне предупреждения об ошибке, выполнить команду меню главного окна Delphi Run -» Program Reset или Ctrl+F2!


Главные окна Delphi           В начало урока           Знакомство с событиями Delphi

Уроки Delphi начинающим



Вопросы и комментарии (118)      Решение задач в Delphi

rombler69, добавлено 3.09.09, 14:34:06 
Все четко и доступно, замечательно))
Сергей, добавлено 16.09.09, 05:34:27 
Замечательно составлен учебник. Очень интересно читать и всё объяснено всё понятно. Понятно что для самых новичков, был бы ещё такой учебник для следующего уровня продвинутости и т.д. с описанием разных приёмов и команд.

олег, добавлено 15.12.10, 13:58:52 
Учусь програмировать в delphi. спасибо Вам за Ваш труд.
Кирил, добавлено 29.12.10, 00:55:47 
Подскажите, пожалуйста, не вожможно ли выводить текст в Edit справа? Делаю калькулятор, слева как-то не красиво.
Автор, добавлено 29.12.10, 11:33:48 
Это возможно, нужно лишь добавить перед числом некоторое количество пробелов. Проблема в том, что неизвестно, какое количество пробелов нужно добавить. Дело в том, что компонент Edit не обладает возможностью определить длину текста. Придётся определять количество знаков в числе, и добавлять некоторое количество пробелов, найденное экспериментально.
Кирил, добавлено 2.01.11, 16:21:21 
Спасибо, я нашел как это програмно:
.......
implementation

{$R *.dfm}


type
  TMEdit = class(TEdit)
  procedure CreateParams(var Params: TCreateParams); override;
  end;

{ TMEdit }

procedure TMEdit.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or ES_RIGHT;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  PPointer(Edit1)^ := TMEdit;
  A:=0;
  B:=0;
  C:=0;
end;

Кирил, добавлено 2.01.11, 16:30:06 
Проверил, работает. Но столкнулся с другой проблемой - как такой текст программы засунуть в процедуру или функцию:
begin
  k:=1;
  if v=0 then
  begin
  C:=StrTofloat(Edit1.Text);
  v:=1;
  end
  else
  begin
  B:=StrToFloat(Edit1.Text);
  if i=1 then C:=C+B;
  if i=2 then C:=C-B;
  if i=3 then C:=C*B;
  if i=4 then if B<>0 then C:=C/B;
  Edit1.Text:=FloatToStr(C);
  end;
  Edit1.Text:=FloatToStr(C);
  B:=0;
  i:=4;
end;
Это текст для калькулятора - операторы сложения, вычитания,... Меняется только i. пробовал сделать процедуру - не работает (не обрабатывает условия).
пробовал, разные варианты. Все переменные - глобальные. Приходится такой текст писать в каждой кнопке оператора. Дальше буду делать из него инженерный, придется везде дописывать - трудоемко и нерационально!
Может что-нибудь подскажете? Заранее спасибо за помощь!!!
Автор, добавлено 2.01.11, 18:00:51 
Кирилл, спасибо за информацию, а мне это и в голову не приходило! )))

Попробуйте так:

procedure TForm1.operation(var i, v: Integer;);
var B, C: Real;
begin
 ваш код
end;

То есть напрасно у вас переменные B, C глобальные, а перед i, v нужно ставить var, тогда их изменения в процедуре будут передаваться "наружу". А что за переменная k? Вроде в процедуре нигде не используется.
Кирил, добавлено 3.01.11, 00:26:34 
Большое спасибо,попробую - отпишусь. Переменная к используется для набора новой цифры после нажатия оператора
Выглядит так:
procedure TForm1.Button1Click(Sender: TObject); {кнопка 1}
  begin
  if k<>0 then
  begin
  Edit1.Text:='';
  k:=0;
  end;
  Edit1.Text:=Edit1.Text+Button1.Caption;
  end;
Евгений, добавлено 3.01.11, 18:51:40 
Спасибо большое, отличный сайт - дали с чего начать!
Кирил, добавлено 5.01.11, 00:27:24 
Автору:
Спасибо за помощь, долго ломал голову что не так - нашел.
Теперь все работает. Вот текст процедуры:

procedure operation(var B,C: real; var i,v,k: Integer);
  begin
  k:=1;
  if v=0 then
  begin
  C:=StrTofloat(Form1.Edit1.Text);
  v:=1;
  end
  else
  begin
  B:=StrToFloat(Form1.Edit1.Text);
  if i=1 then C:=C+B;
  if i=2 then C:=C-B;
  if i=3 then C:=C*B;
  if i=4 then if B<>0 then C:=C/B;
  end;
  Form1.Edit1.Text:=FloatToStr(C);
  B:=0;
end;

Процедура использует глобальные переменные, при обращении к компонентам формы
обязательно указывать Form.., иначе дает ошибку.
Кирил, добавлено 5.01.11, 00:30:15 
А!, да, кстати, при использовании процедуры надо указывать переменные и обязательно
 в том же порядке как объявляли!
procedure TForm1.Button13Click(Sender: TObject); {Ñëîæåíèå}
  begin
  operation(B,C,i,v,k);
  i:=1;
  end
Автор, добавлено 5.01.11, 05:04:51 
Ну я рад что всё получилось. Одно замечание. Чтобы не нужно было указывать Form1 каждый раз при обращении к объектам Формы внутри процедуры, саму процедуру нужно создавать как процедуру типа Формы. Иначе говоря, перед operation добавить TForm1

procedure TForm1.operation( ); - и прописать в секции описания процедур типа Формы:

type
  TForm1 = class(TForm)
  Button1: TButton;
  procedure FormCreate(Sender: TObject);
  procedure operation( ); - наша процедура
  private
  { Private declarations }
  public
  { Public declarations }
  end;
1111, добавлено 5.03.11, 21:38:22 
муть полная это описание.не сходится с самого начала-п.3=сначала вписать затем удалить. Для чего?
1111, добавлено 5.03.11, 22:23:47 
делаю как писано но п.5 должна быть подсказка... ничего
Автор, добавлено 6.03.11, 03:24:07 
Чего вписать, чего удалить... Где это написано? Давай проще. Ставим на Форму кнопку щёлкаем по ней дважды и в обработчике пишем
Form1 и ставим точку - немного подождём, и должен выскочить список свойств и методов, доступных для Формы в данный момент. Если этого нет, то я уже и не знаю, что у вас за система... Готов пообщаться OnLine.
юрий, добавлено 9.03.11, 08:05:42 
В делфи 7 не знаю почему но пример не работает. Все правильно сделал но при нажатии ctrl+f9 выдает errors=3 Вот так. Иеще у меня 15 дюймовый монитор старенький, так сайтик ваш на нем в ширину не умещается, приходится влево вправо таскать чтоб прочесть то что нужно, очень неудобно.
Автор, добавлено 9.03.11, 09:04:17 
Юрий, насчёт замечания о сайте спасибо...
А вот что в примере не работает??? Да там просто написано Label1.Caption:=Edit1.Text - что тут неправильного??? У меня кстати тоже D7.
Владимир, добавлено 28.03.11, 18:49:02 
У меня кстати тоже не работает, выдает ошибку.
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EClassNotFound with message 'Class TMemo not found'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Автор, добавлено 28.03.11, 19:15:10 
Владимир, в вашем случае используемый в уроке пример вообще ни при чём... В нём нет ничего про класс TMemo. Используются компоненты Label, Button и и Edit и соответствующие классы. Короче, если пример у вас не работает, у вас вообще ничего не работает. Переустановите Delphi. А если всё-таки какие-то приложения работают, то в этих приложениях и попробуйте воспроизвести данный пример. ДОбавьте компоненты на Форму и т.д.
Виталик, добавлено 3.04.11, 05:06:43 
Когда после lable1 ставлю точку, то снизу появляется вот такая надпись " [Pascal Error] Unit1.pas(1): Unable to invoke Code Completion due to errors in source code ". Если же дописать Label1.Caption:=Edit1.Text, а затем запустить программу, то выдаёт ошибку... Не подскажете в чем проблема?
Автор, добавлено 3.04.11, 10:24:27 
Вот у вас сначала написано Lable1, затем Label1.Caption... Чуете разницу? Именно если написать Lable1 и точку поставить, то и появляется сообщение об ошибке. Потому что нет такоко объекта как Lable1 а есть Label1.
Виталик, добавлено 3.04.11, 10:50:30 
Вот лох)) Сам опечатку не заметил...
Виталик, добавлено 3.04.11, 22:42:47 
Пробовал на другой машине, все норм было. Но на своей же ничего не поменялось. На компе паскаль должен быть установлен? У меня винда 7. Может еще из-за этого? Потому что на другой машине ХП стоит и паскаль установлен. А на 7 Паскаль не ставится.
Виталик, добавлено 3.04.11, 22:53:36 
Всё, вопрос исчерпан! Установил аналогичную версию дельфи и всё как по маслу! =) Спасибо за внимание!
артем, добавлено 5.04.11, 20:05:45 
да у меня такая же проблема как и у виталика пишу слово правильно,но выскакивает ошибка незнаю что делать(((
Автор, добавлено 5.04.11, 20:36:29 
Ошибка "Unable to invoke Code Completion due to errors in source code"? Она появляется, когда система не понимает, к какому объекту обращается оператор. И если Label1 (это правильно написано) и далее точка вызывает ошибку, то система не видит на Форме такой объект как Label1. А может, вы его забыли на Форму положить? И ещё, мы вообще, про Delphi говорим?
Артем, добавлено 6.04.11, 13:00:09 
да про delphi на форму все практически положил но вот ошибка выскакивает все равно((
Автор, добавлено 6.04.11, 16:40:04 
Артем, а другие приложения вообще работают? Или это первый опыт в Delphi?
артем, добавлено 6.04.11, 18:12:47 
это первый опыт в дельфи
все делаю правильно(
Автор, добавлено 6.04.11, 21:26:25 
А если просто выполнить File - New - Application, появится проект нового приложения, в котором только Форма. Нажмите F9. Приложение должно скомпилироваться, и окошко Формы должно появиться. Это из первого урока.
Артем, добавлено 7.04.11, 18:50:08 
да это все появляется но остальное все что не делаю все равно ощибка появляется(
Автор, добавлено 8.04.11, 10:33:25 
Я бы на всякий случай переустановил Delphi, и может быть даже другой дистрибутив попробовал. На tfile.ru их есть...
артем, добавлено 8.04.11, 12:32:31 
да только где можно нормальную скачать
Автор, добавлено 8.04.11, 14:08:10 
tfile.ru
артем, добавлено 13.04.11, 13:22:46 
все сделал правильно но нечего не работает всегда ошибку эту выдает эхх
Автор, добавлено 13.04.11, 19:58:56 
Хорошо, вместо Label1.Caption напиши Form1.Caption, что получится.
Назия, добавлено 18.04.11, 17:02:13 
Здравствуйте,подскажите,пожалуйста: объект TQuery не могу найти,хотела сделать выборку данных из существующей базы
Автор, добавлено 18.04.11, 21:55:21 
В Delphi7 на вкладке BDE. В других версиях наверное там же.
Цара, добавлено 22.05.11, 20:01:28 
unit yt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
  btn1: TButton;
  edt1: TEdit;
  lbl1: TLabel;
  procedure btn1Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
Label1.Caption := Edit1.Text;
end;

end.
-Подскажите где ошибка
Автор, добавлено 22.05.11, 21:18:40 
У вас нет объекта Label1, он у вас по-другому называется: lbl1, поэтому и писать нужно:

lbl1.Caption:=Edit1.Text;

Наверняка и Delphi вам об этом подсказывал, а вы читать не хотите.
Никита, добавлено 9.06.11, 19:40:46 
Автор, а что должно появиться?? а то у меня пустой экран или просто кнопка Button и Edit! =(
Автор, добавлено 9.06.11, 20:02:19 
Напишите что-нибудь в едите и нажмите кнопку.
Никита, добавлено 9.06.11, 20:02:40 
ааааа всё...)))) дошло до меня)) я тормоз) sorry
Алексей, добавлено 17.06.11, 20:12:03 
Здравствуйте, остановился я на вашем первом уроке точнее вот с этим Label1.Caption := Edit1.Text; Когда я так писал у меня появлялись ошибки,не понимал что не так,я новичок в дэлфи.Думал я долго и понял вроде=) вообщем так как у вас написано у меня не работает, зато работает если написать вот так lbl1.Caption := edt1.Text; Думаю дело в сборки дэлфи? Мне бы хотелось еще узнать какую сборку лучше всего использовать и чтоб к вашим урокам подходило. Заранее благодарен.Ps.У меня установлена такая сборка Delphi7 Lite Full Edition v7.3.4.2 [2011-05-01]
Автор, добавлено 17.06.11, 20:47:48 
Алексей, Label1 и Edit1 это имена компонентов, установленных на Форме, значения, которые содержатся в их свойстве Name - посмотрите в Инспекторе Объектов, что там написано. Неужели Delphi присваивает новому компоненту имя не Label1 а lbl1? Хотя я в сборках ничего не понимаю. Напишите, просветите - бросьте на Форму ещё одну метку и посмотрите сразу, какое значение в свойстве Name.
Алексей, добавлено 17.06.11, 21:36:42 
Все понял почему так получается попытаюсь объяснить,бросил метку появилось окошко
"Редактирование имени компонентов" в нем написано "Текущие имя Label1" "Новое имя lbl1" Так вот, если нажать не глядя на OK, то присваивается новое имя lbl1. Похоже на сокращенный вариант. Новые компоненты также сокращены будут, например, "mmo1, btn1, edt1" Вообщем чтоб этого не происходило, а было так, как у вас написано, то когда кидаешь новый компонент на Форму, в появившемся окошке "Редактирование имени компонентов" не надо жать сразу на OK, а сначала нажать на красную стрелку справа и будет все правильно, не lbl1 а Label1. Это ошибка моя от невнимательности=)
Автор, добавлено 17.06.11, 21:55:28 
Всё ясно. На самом деле, конечно, лучше и удобнее использовать более короткие имена компонентов, а то

StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] (например)

слишком длинно. Только придётся запоминать новые имена. Мне, например, непривычно. Предпочитаю в случае необходимости сам задать новое имя. Это несложно и ненавязчиво со стороны системы.
Ринат, добавлено 3.08.11, 09:37:01 
Как самостоятельно выписывать в label(через какой оператор?в паскале это вроде write)
Автор, добавлено 3.08.11, 10:00:01 
Ну, повторю для того кому лень читать урок:
За визуальное представление компонента Label отвечает свойство "Caption". Свойства записываются в Delphi после точки за именем компонента, т.е. Label1.Caption. Далее оператор присваивания ":=", затем значение. Для Label это будет текст, а текст в Delphi заключается в апострофы:

Label1.Caption:='Здесь будет текст метки';

Ринат, добавлено 3.08.11, 13:05:33 
В Уроке №7(задача на подсчитывания байтов) label1.caption:=inttostr(size);
Как добавить прификс Kb в тот же label
Автор, добавлено 3.08.11, 13:11:09 
Прибавить ко значению то, что хотите:

Label1.Caption:='Текст перед значением (с пробелом!)'+inttostr(size)+'(пробел) Текст после значения';

Влад, добавлено 6.08.11, 17:00:49 
а почему у меня после присваиванию кепшн лейбела := ничего не появляетсяв другом окне , ето надо самому писать?
Автор, добавлено 6.08.11, 17:53:06 
Ну в каком другом окне... Что "ето"? Ничего не понял.
Олег, добавлено 9.08.11, 02:32:41 
Сделал всё как по инструкции, не могу нажать Run, т.к. не активна опция. У меня стоит Borland Delphi Studio 2006. Подскажите незнающему. Заранее благодарен!
Автор, добавлено 9.08.11, 06:40:52 
Возможно, вы не создали проект, а только одну Форму. По идее, при старте Delphi проект создаётся сразу, в котором одна Форма. Куда девалась остальная часть от проекта, гадать не будем. Создайте новый: File - New - Application. А может, ещё проще, перезапустите Delphi.
Вадим, добавлено 27.08.11, 23:30:06 
хммм классно) не знал, что программирование это так легко) добавляю сайт в закладки)
Аноним, добавлено 14.09.11, 19:38:08 
Спасибо! Ваш сайт и уроки лучшие!
Арт, добавлено 18.09.11, 12:55:50 
В обработчике это где?
Автор, добавлено 18.09.11, 12:59:11 
Это там, где оказывается курсор после двойного щелчка по кнопке.
Давид, добавлено 23.09.11, 20:24:50 
Немного не хватает про поле "type")
Автор, добавлено 23.09.11, 22:24:08 
Про типы читайте в Уроке 4... Или задайте вопрос поточнее.
Влад, добавлено 24.10.11, 15:50:25 
Когда я вписываю команду "Label1.Caption := Edit1.Text;" между begin и and, появляется красная строка ошибки и программа не запускается. Не могли бы вы снять скрин с обработчика.
Автор, добавлено 24.10.11, 16:37:10 
Да не, муторное дело, скрины публиковать. Лучше вы полностью обработчик события скопируйте сюда (начиная прям от procedure...), я посмотрю.
Аноним, добавлено 7.11.11, 21:32:36 
я походу подсел на дельфи...
Автор, добавлено 7.11.11, 21:43:27 
Детям до 16 кайф ловить запрещается... :)
Дмитрий., добавлено 26.11.11, 03:08:38 
Так, все работает, но проблема вот в чем: если ввожу русский текст в Edit1, то в Label вместо ожидаемого появляются квадраты. Что за проблема? Руссификатор скачать? 7 стоит.
Автор, добавлено 26.11.11, 09:22:50 
Ясно, что дело в некорректной замене шрифтов на компьютере. Но тут я вам не помогу, ищите сами. Я порылся в инете, народ обсуждает, есть советы. Пробуйте.
Илья, добавлено 28.12.11, 14:35:56 
подскажите пжл, мне нужно создать элемент который будет выводить текст, и ГЛАВНОЕ чтобы текст можно было скопировать, в Label нельзя выделить текст, а в Edit юзверь может вводить символы, подскажите как либо разрешить выделение в Label либо запретить ввод символов (но не выделение) в Edit, либо м.б. есть какой то аналогичный компонент, с нужными свойствами, о котором я не знаю...
Автор, добавлено 28.12.11, 15:45:56 
Какие символы? То что вводит пользователь - всё только символы. Некоторые можно запретить в обработчике OnKeyPress того же компонента Edit:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const NoEnter: set of Char=['a'..'z', 'A'..'Z', 'а'..'я', 'А'..'Я'];//Добавить через запятую другие ненужные символы
begin
if Key in NoEnter then Key:=#0;
end;

Все символы латинские и кириллические попадут под запрет, а цифры можно будет вводить. А если вам вообще нужно запретить ввод, то просто

Key:=#0;
Илья, добавлено 28.12.11, 16:00:12 
куда это вставлять?)) что то куда ни вставлю ошибка...
Автор, добавлено 29.12.11, 00:39:44 
Это никуда не вставлять. Это обработчик OnKeyPress. Сначала нужно создать пустой обработчик - в Инспекторе Объектов щёлкнуть по нему дважды, на вкладке Events. Ну а затем добавить то, что у меня.
Илья, добавлено 1.01.12, 14:53:21 
подскажите пжл, почему при переименовании готового проекта русскими буквами, при запуске (приложения готового) в system menu какая то абракадабра написана? то есть внизу (куда кликаешь чтобы развернуть). Когда имя приложения английское все норм, а русскими буквами переименуешь и там че то не понятное...
Автор, добавлено 1.01.12, 17:09:27 
Берём, запускаем новый проект, компилируем. Потом exe-файл переименовываем из Project1 в Тест (по-русски!), и вместо Form1 в заголовке Формы надпись тарабарскими символами. А если вместо Form1 написать Форма (по-русски) то и выходит Форма. Почему? Проблема кодировки. Я особо в этом разбираться не хочу. На панели задач тоже тарабарские символы. Это заголовок окна приложения, не первой формы, а именно окна приложения, которое называется Application. Пока с ним работать не приходилось, но оно существует. Зайдите в Project - Options - вкладка Application. Там можно поменять заголовок окна приложения, и иконку заодно при желании.
павел, добавлено 19.01.12, 19:15:41 
отличный сайт
Аноним, добавлено 1.02.12, 18:29:59 
I BELIEVE IN ,IT IS FORWARD'' O'K
Артём, добавлено 7.02.12, 16:58:33 
Ошибку выдаёт
[Ошибка] Unit1.pas(31): Illegal character in input file: 'П' ($CF)
[Фатальная ошибка] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Автор, добавлено 7.02.12, 17:08:05 
Как говорит товарищ Жванецкий: "ТщательнЕЕ надо..."
Алексей, добавлено 19.02.12, 21:56:12 
Благодарю! Статьи наилучшие всех благ вам! Потихоньку учу Delphi =)
Константин, добавлено 14.03.12, 00:49:52 
На этот урок антивирус ругается. что это вирус Бутуз)))
Автор, добавлено 14.03.12, 06:42:05 
Спрашиваю из любопытства: какой антивирус?
Юра, добавлено 24.03.12, 17:26:07 
а := надо ставить в Label1 Caption?
Автор, добавлено 24.03.12, 17:34:12 
Чего-чего?
Юра, добавлено 24.03.12, 17:55:31 
куда нужно писать это Label1.Caption
  :=
  Edit1.Text;
чтобь получилось это Label1.Caption := Edit1.Text;
Автор, добавлено 24.03.12, 18:13:43 
Читаем: щелкаем по кнопке, попадаем в обработчик нажатия, и это пишем прямо там где будет курсор.
Юра, добавлено 24.03.12, 18:24:47 
Спасибо))))

Рустам, добавлено 14.04.12, 13:08:27 
Спасибо! Всё работает!
жорик, добавлено 20.04.12, 22:02:40 
пажалуста вылажыте на сайте как поставить иконку для ехе в делфы програмах

Автор, добавлено 21.04.12, 07:24:00 
Жорик, а это вы специально так слова коверкаете?

Иконку можно задать в пункте меню Project - Options - Application.
Влад, добавлено 27.04.12, 13:41:56 
Сильно не ругайте, помогите с ерундой, пишет ошибку "[Error] main_modul.pas(26): Undeclared identifier: 'Label1'", не могу разобраться в чем дело.



unit main_modul;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
  Label1: TLabel;
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

begin
  Label1.caption:='Hello';
end.



Автор, добавлено 27.04.12, 13:54:19 
Ваша ошибка в данном случае - нет ссылки, что это за Label1. Потому что это на самом деле Form1.Label1.

Но по-любому, будет ошибка. Выполняйте присваивание по какому-нибудь событию, вот например, OnCreate Формы. Форма и появится "с приветом" :)

В этом случае и Form1 будет не обязательно.
Влад, добавлено 27.04.12, 14:30:54 
Спасибо за оперативный ответ. Спасибо!.
алекс, добавлено 12.05.12, 19:51:57 
а можно как нибудь на Button поставить количество раз сколько будет выполнятся то или иное действие? т е я когда жму на кнопку то выполняется одно действие, а мне надо чтобы это же действие выполнилось три раза, не подскажите как это реализовать?
Автор, добавлено 12.05.12, 20:00:55 
Это делается в цикле. Почитайте про циклы: lesson6.php

for i:=1 to 3 do
  begin
  {Действия}
  end;

Действия повторятся 3 раза.
роман, добавлено 24.08.12, 15:50:45 
во втором уроке постоянно выдаёт ошибку при компиляции
Аноним, добавлено 24.08.12, 15:54:43 
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
  Button1: TButton;
  Label1: TLabel;
  procedure Button1Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Label1.Caption := Edit1.Text;
end;

end.

Автор, добавлено 24.08.12, 18:59:16 
В этом:

Label1.Caption := Edit1.Text;

ошибки нет. Скорее всего, вы неправильно организовали процедуру, не присвоили её кнопке.
Леонид, добавлено 27.09.12, 18:02:00 
С первым уроком всё нармально,а второй там где присваивать значение выдаёт ошибку.
Автор, добавлено 27.09.12, 20:05:06 
Если на Форму положить компоненты Edit, Label и Button, затем дважды щелкнуть по кнопке и там где окажетесь написать это присваивание, то ошибки не будет.
Эдуард, добавлено 22.03.13, 02:44:50 
сайт хорош но у меня проблема на данном уроке при создание простой программы пишет фатальная ошибка.Что делать?

Эдуард , добавлено 22.03.13, 02:53:02 
вот что за ошибка при нажатие F9 [Фатальная ошибка] Could not create output file 'C:\Windows\system32\Project1.exe'

Автор, добавлено 29.03.13, 06:52:52 
Мне не видно отсюда, что вы в программе написали. Давайте текст, посмотрим.
Эдуард, добавлено 13.04.13, 11:01:44 
после 12 раза понял что и как)))
Евгений, добавлено 21.04.13, 11:33:22 
Здравствуйте подскажите пожалуйста я пытаюсь чекбоксом сделать активными/ не активными несколько чекбоксов, но не выходит
procedure TRegistration1.CheckBox15Click(Sender: TObject);
begin
If CheckBox15.Checked then
CheckBox5.Enabled:=True
else
CheckBox5.Enabled:=False
and
CheckBox6.Enabled:=True
else
CheckBox6.Enabled:=False
and
CheckBox7.Enabled:=True
else
CheckBox7.Enabled:=False
and
CheckBox8.Enabled:=True
else
CheckBox8.Enabled:=False;
end;
Автор, добавлено 21.04.13, 15:20:47 
Потому что вы неправильно понимаете формат условного оператора. Надо так:

if CheckBox15.Checked then
  begin
  //здесь делаем всё доступным:
  CheckBox5.Enabled:=True;
  //и так далее
  end else
  begin
  //здесь делаем всё недоступным
  CheckBox5.Enabled:=False;
  //и так далее
  end;
Евгений, добавлено 21.04.13, 16:29:09 
Ещё учусь поэтому много ошибок.
Подскажите пожалуйста как в Shape цвет поменять пишу код выдаёт ошибку
так написал - ошибка
Shape3.Color:=$003C3C3C;
попробовал так - ошибка
Shape3.Brash.Color:=$003C3C3C;
Автор, добавлено 21.04.13, 18:52:21 
Вот есть такой фактор, называется - "человеческий". Поэтому, если вы будете всё делать "ручками", будут ошибки.

Delphi умная и удобная система, она подсказывает какие свойства и методы есть у объекта, и вставляет их вместо вас. Поставьте точку после Shape1, и введите несколько первых букв названия свойства, которое вы хотите. Появится постепенно сужающийся список, в котором будет (или не будет - если уже пишете неправильно) нужное вам свойство, причём в правильном написании. Остаётся только выбрать его в списке и щёлкнуть ENTER.

И тогда вы узнаете, что не Brash, а Brush. А остальное правильно.
Евгений, добавлено 22.04.13, 00:49:52 
Большое спасибо. Я не внимательный!
Подскажите пожалуйста я пишу функцию скрытия файла, а Delphi выдаёт предупреждение
SetFileAttributes('Project1.Log', faHidden);
[Предупреждение] Clock.pas(187): Symbol 'faHidden' is specific to a platform
что я не так пишу?
Автор, добавлено 22.04.13, 13:06:23 
Так это же предупреждение, а не ошибка! Всё так, но не на всех системах. Приложение в итоге же запускается? Но для полного исключения этого предупреждения нужно заменить faHidden на его значение - $02. Однако, писать

SetFileAttributes('Project1.Log', $02);

это внести непонятку, потом вспоминай, что такое это $02. Поэтому нужно объявить локальную константу, и всего делов:

const faHidden=$02;


и никаких проблем. Кстати, назвать можно и по-другому, как больше нравится.
Евгений, добавлено 22.04.13, 16:24:30 
Спасибо большое просто хотелось узнать почему предупреждение может чго не дописал, теперь я понял.
Евгений, добавлено 6.05.13, 16:24:38 
Здравствуйте. Подскажите пожалуйста как поставить на файл сразу два атрибута
SetFileAttributes('Тестовый1.txt', faHidden);
и
SetFileAttributes('Тестовый2.txt', faReadOnly);
Евгений, добавлено 6.05.13, 16:39:34 
Я нашёл ответы на все вопросы.
Евгений, добавлено 6.05.13, 17:50:43 
Ответы нашёл, однако при компиляции выдаёт ошибку
Ни так не получается
FileSetAttr('test.txt', faReadOnly or faHidden);
Ни так
var
  RdOnly, Hidden: integer;
begin
Memo1.Lines.SaveToFile('Тестовый1.txt');
if CheckBox1.Checked then RdOnly:= faReadOnly else RdOnly:= 0;
if CheckBox2.Checked then Hidden:= faHidden else Hidden:= 0;
FileSetAttr('Тестовый1.txt', RdOnly or Hidden);
[[Ошибка] Unit1.pas(239): Incompatible types: 'Integer' and 'TFieldAttribute',
а других вариантов не нашёл
Автор, добавлено 7.05.13, 11:06:09
Правильно так:

FileSetAttr('test.txt', faReadOnly or faHidden);

Сообщения системы в данном случае это не ошибки компиляции, а подсказки, что значения констант faReadOnly и faHidden могут отличаться в зависимости от платформы. Поэтому нужно объявить эти имена собственными локальными константами с соответствующими значениями:

const
  faReadOnly = 1;// Файл только для чтения
  faHidden = 2;// Скрытый файл
  faSysFile = 4;// Системный файл
  faVolumeID = 8;// Файл идентификатора объёма
  faDirectory = 16;// Файл директории
  faArchive = 32;// Архивный файл
  faSymLink = 64;// Ярлык

И усё.

Евгений, добавлено 10.05.13, 11:28:40 
Спасибо большое!
Динара, добавлено 7.12.13, 14:46:04 
Хочу запустить что бы посмотреть что получилось а вместо этого вылазиет такая штука:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {DataModule2: TDataModule},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4},
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6},
  Unit7 in 'Unit7.pas' {Form7},
  Unit8 in 'Unit8.pas' {Form8};

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {DataModule2: TDataModule},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4},
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6},
  Unit7 in 'Unit7.pas' {Form7},

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TDataModule2, DataModule2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm6, Form6);
  Application.CreateForm(TForm7, Form7);
  Application.CreateForm(TForm8, Form8);
  Application.Run;
end.
Автор, добавлено 7.12.13, 21:42:01 
Ну у меня в уроке нет этих восьми форм, и модуля данных. Откуда вы взяли этот проект...
Женя, добавлено 26.12.13, 00:07:27 
Хорошие уроки
Уважуха человеку который это написал
Оставить комментарий:

Имя  

Текст комментария

  





Интернет-магазин электрооборудования