ShortDayNames — Переменная Delphi

ShortDayNames — Переменная Delphi

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

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

Прежде чем производить различные операции с переменной, ее надо создать, т.е. объявить. Для создания переменных в Delphi или Pascal существует специальный раздел var, в котором при помощи специальных инструкций можно объявлять переменные и задавать им типы. Пример раздела var:

В данном случае, Delphi по умолчанию всегда создает var в начале файла с программным кодом. Переменные указанные в разделе Var, объявленном в начале файла с программным кодом (обычно перед ключевым словом implementation) называются глобальными. Особенность глобальных переменных заключается в том, что их можно использовать в любых обработчиках событий, практически в любом месте данного программного кода. Стоит отметить, что в глобальном разделе var delphi уже создает переменную form1, которая и есть наша форма. Поэтому под переменной в Delphi подразумевается достаточно широкие возможности. Переменной можно назвать кнопку, любой элемент интерфейса, однако тут тоже существуют свои особенности, которые мы рассмотрим в следующих уроках.

Но переменные можно объявлять и внутри обработчиков событий (а также процедур, функций, которые мы разберем в следующих уроках). Такие переменные называются локальными. Локальные переменные объявляются здесь:

Видно, что я создал раздел для объявления переменных в обработчике события OnClick у Button1. Делается это добавлением слова var перед begin.

Теперь разберемся, как объявлять такие переменные. Перед объявлением переменных всегда надо указывать var. После var идет список переменных. Переменные должны иметь название, которое может состоять из латинских букв, цифр и знака подчеркивания, например: my, i, my_1_variable. Запомните, что переменные не могут начинаться со знака цифры. Теперь пора разобраться с тем, какие же существуют типы переменных. На самом деле их существует огромное количество, но мы рассмотрим с вами только самые необходимые для изучения Delphi. Далее я привожу таблицу:

integer Этот тип представляет собой целочисленные числа, находящиеся в диапазоне от -2147483648 до 2147483647.
byte Числа в диапозоне от 0 до 255.
double Числа с плавающей запятой, имеющие до 15 цифр точности.
char Символ (будет подробно разобрано в следующих уроках).
string Набор символов, т.е. строка (будет подробно разобрано в следующих уроках).
boolean Логический тип данных, который может хранить в себе 2 значения: правда или ложь (будет подробно разобрано в следующих уроках).

Теперь я покажу как создавать, т.е. объявлять переменные в Delphi:

[cc lang=’delphi’]var a,b:integer;
c:byte;
d:string;
e:boolean;
[/cc]

При создании переменных нужно помнить, что каждая переменная должна иметь свое собственное уникальное название. Если же существует несколько переменных с одинаковым именем, то при компиляции программы delphi выдаст ошибку.[/warning]

В данном примере мы создали следующие переменные: a и b типа целочисленного числа, с — число в диапозоне от 0 до 255, d — строку и e — логическая переменная. Далее я привожу примеры создания локальных переменных и глобальных.

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

Функции и процедуры Delphi. Справочник.

Функция FormatDateTime(
const Format: string;
DateTime: TDateTime ): string;

Описание
Функция преобразовывает значение даты и времени типа TDateTime в строку заданного формата. Исходное значение передается в параметре DateTime. Формат результирующей строки определяется параметром Format, который использует следующие элементы форматирования:

Элемент Описание
c Дата и время. Для значения даты используется формат определенный глобальной переменной ShortDateFormat, а для значения времени, формат определенный глобальной переменной LongTimeFormat. Если значение DateTime не содержит дробной части, то время не отображается
d День без нуля впереди (1-31).
dd День с нулем впереди (01-31).
ddd Сокращенное название дня недели (‘вс’, . ‘сб’). Строковые значения определяются глобальной переменной ShortDayNames.
dddd Полное название дня недели (‘Воскресенье’, . ‘Суббота’). Строковые значения определяются глобальной переменной LongDayNames.
ddddd Дата. Формат определяется глобальной переменной ShortDateFormat.
dddddd Дата. Формат определяется глобальной переменной LongDateFormat.
m Месяц без нуля впереди (1-12).
Если данный символ следует за h или hh, то отображается не месяц, а минуты.
mm Месяц с нулем впереди (01-12).
Если данный символ следует за h или hh, то отображается не месяц, а минуты.
mmm Сокращенное название месяца (янв, . дек). Строковые значения определяются глобальной переменной ShortMonthNames.
mmmm Полное название месяца (‘Январь’ — ‘Декабрь’). Строковые значения определяются глобальной переменной LongMonthNames.
yy Год двумя цифрами (00-99).
yyyy Год четырьмя цифрами (0000-9999).
h Час без нуля впереди (0-23).
hh Час с нулем впереди (00-23).
n Минуты без нуля впереди (0-59).
nn Минуты с нулем впереди (00-59).
s Секунды без нуля впереди (0-59).
ss Секунды с нулем впереди (00-59).
t Время. Формат определяется глобальной переменной ShortTimeFormat.
tt Время. Формат определяется глобальной переменной LongTimeFormat.
am/pm Выводит ‘am’ для любого часа до полудня, и ‘pm’ для любого часа после полудня. Обозначения ‘am/pm’ могут быть указаны в верхнем, нижнем и в смешанном регистре. Регистр символов результирующей строки будет соответствовать регистру символов строки формата.
a/p Выводит ‘a’ для любого часа до полудня, и ‘p’ для любого часа после полудня. Символы ‘a/p’ могут быть указаны в верхнем, нижнем и в смешанном регистре. Регистр символов результирующей строки будет соответствовать регистру символов строки формата.
ampm Выводит значение глобальной переменной TimeAMString для любого часа до полудня, и значение глобальной переменной TimePMString для любого часа после полудня.
/ Разделитель полей даты. Результирующий символ разделителя определяется глобальной переменной DateSeparator.
: Разделитель полей времени. Символ разделителя определяется глобальной переменной TimeSeparator.
‘xx’ «xx» Символы, заключенные в двойные или одиночные кавычки, не форматируются и выводятся один к одному, как есть.
Илон Маск рекомендует:  Fcvt преобразовать double в строку с фиксированной точкой

Символы форматирования могут быть указаны как в верхнем, так и в нижнем регистре. Если в параметре Format определена пустая строка, то выполняется форматирование, аналогичное формату при использовании значения строки форматирования ‘с’.

Пример
var
S: string;
begin
S:= FormatDateTime( ‘Сегодня dddd dd mmm yyyy г.’, Date);
MessageDlg( S, mtInformation, [mbOk], 0);
end;

Переменные в среде программирования Delphi

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

Любая создаваемая процедура или функция может обращаться к общедоступным переменным. Единственное исключение из этого правила — глобальная переменная, объявленная в разделе реализации модуля. В этом случае переменная остается глобальной, но доступна только в том модуле, в котором она объявлена.

Компилятор автоматически инициализирует глобальные переменные как «пустые». Целочисленные значения устанавливаются равными О. строковые значения равными ‘ ‘. а булевские — равными False. Глобальные значения можно также инициализировать вручную при их объявлении: var х: Integer = 101;

Локальные переменные — это переменные, которые объявлены в процедуре или функции. Объявление локальной переменной выглядит подобно показанному ниже:

procedure Имя Процедуры; var

локальная Переменная_1: Тип Данных;

локальная Переменная_n: Тип Данных; begin end;

Локальные переменные существенно отличаются от глобальных. Локальные переменные существуют только в течение короткого периода времени. Они создаются при вызове процедуры или функции и уничтожаются немедленно по завершении ее выполнения. Локальные переменные могут использоваться только в процедуре или функции, в которой они объявлены. В отличие от глобальных переменных, локальные переменные не инициализируются компилятором автоматически, и они не могут быть инициализированы во время объявления. Их всегда нужно инициализировать вручную в теле процедуры до их использования, поскольку до инициализации они содержат случайные значения.

Если указать глобальную переменную в качестве счетчика цикла for, компилятор выведет предупреждение.

Глобальные переменные никогда не следует использовать в качестве счетчика цикла for, поскольку это ведет к снижению скорости выполнения цикла. Если же в качестве счетчика цикла for применяется локальная переменная, компилятор получает возможность использовать для подсчета регистры процессора (наиболее быстродействующий вид памяти компьютера), что обеспечивает наивысшую производительность.

Наилучший механизм передачи определенных пользователем значений функциям и процедурам — список параметров. В процедурах можно использовать также глобальные переменные, но этого следует стараться избегать. Delphi поддерживает несколько типов параметров: значения, переменные, константы и параметры типа out.

Объявление параметров-значений выглядит следующим образом: procedure Имя Процедуры <Имя Параметра: Тип Данных);

При вызове процедуры и передаче ей значения как параметра-значения процедура получает только копию исходного значения.
4. Разработка программного продукта для предметной области «Работники образовательной организации» с применением языка программирования Delphi

Создаем форму и изменяем необходимые свойства главной формы в окне свойств:

Height — ширина формы;

Width — длина формы;

Caption — название формы.

Добавляем на главную форму необходимые элементы управления:

Button – запуск вычислений, открытие окна графика, выход из программы;

StringGrid – отображение таблицы значений x, y, s.

Label – отображение не редактируемого текста;

Edit – ввод данных для формирования массивов и вывода полученных числовых рядов.

Изменяем свойства добавленного элемента управления StringGrid:

Пишем для кнопок алгоритмы, которые будут выполнять различные действия.Прописываем действие на открытие формы на главной форме работы. Запускаем программу с целью проверки ее работоспособности. Сохраняем проект.

Кибер-Сайт

Приветствую Вас Гость | RSS
Главная » 2013 » Апрель » 5 » Переменные Delphi. Объявление и инициализация переменных. Урок-7

Переменные Delphi. Объявление и инициализация переменных. Урок-7

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

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

Чтобы сообщить компилятору о том, что мы собираемся объявить переменную, существует специальное ключевое слово var.

var
Имя переменной : Тип данных ;

После ключевого слова var следует: имя переменной (служит для идентификации переменной и обращения к ней), знак двоеточия (сообщает, что дальше следует тип данных переменной), тип данных (сообщает компилятору о количестве выделяемой памяти и характере переменной (число, строка, пользовательский тип данных и т. д, точка с запятой (сообщает об окончании описания переменной). Более конкретный пример использования переменных смотрите ниже.

А сейчас рассмотрим следующий пример.

var
VInt: Integer; // Описание переменной VInt типа Integer (целочисленный тип данных)
VFloat: Single; // Описание переменной VFloat типа Single (вещественный тип данных (число с плавающей точкой))
VStr: String; // Описание переменной VStr типа String (строковой тип данных)

После объявления переменной её нужно инициализировать (присвоить начальное значение). Следует отметить, что при выделении памяти под переменную в ней остается «мусор» (данные, оставленные в памяти другими программам). Важно: инициализация переменных и дальнейшие действия над ними осуществляется между двумя ключевыми словами begin и end (в подпрограммах) и в специальных разделах модуля (таких, как initialization и finalization). Присваивание выглядит следующим образом:

Имя переменной := Присваиваемое значение ;

Рассмотрим небольшой пример, который демонстрирует объявление и инициализацию переменной.

procedure UseVar;
var
V1: Integer; // Объявляем переменную
begin
V1 := 30; // Обращаемся к переменной и присваиваем ей значение 30
// Дальнейшие действия…
end;

Здесь мы объявляем переменную V1: Integer, затем присваиваем ей значение 30. Дальше мы можем использовать переменную в различных арифметических и логических операциях, присваивать ей разные значения или обращаться к переменной для присваивания ей значений других переменных.

Категория : Delphi | Просмотров : 12667 | Добавил : Admin | Теги : Delphi для чайников, Object Pascal, Delphi Справочная информация, Уроки Delphi, Delphi | Рейтинг : 0.0 / 0

Похожие материалы

  • Синтаксис Delphi. Урок-3
  • Интерфейс Delphi. Знакомство с Delphi-7. Урок-1
  • Модуль Delphi. Знакомство с модулями. Урок-6
  • Модуль Delphi. Полное описание
  • Настройка Delphi. Урок-2
  • Программа в Delphi. Урок-5
Всего комментариев : 1

Привет.
Приглашаю Вас на Лучший High Five сервак
Сервак подойдет тем кто приветствует долгую игру с расчетом на настоящее доминирование.
Совершенно не подойдет предпочитающим ворваться и всех нагнуть.
Скользящим мимо любителям попрыгать по сервакам переоткрывашкам, ловить мало, т.к. старики их быстренько уделают :)

ShortDayNames — Переменная Delphi

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

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

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

С помощью переменных этого типа очень удобно строить логику. Переменная булева типа может принимать только одно из двух значений – true или false. Лучше и понятнее булевы переменные называть логическими переменными. Для объявления логических переменных используется слово Boolean. Рассмотрим пример работы с такими типами переменных:

В этом примере объявляются две переменные: b (логическая) и str (строковая). Потом происходит присваивание переменной b значения true. Дальше требуются пояснения, потому что идет логическая конструкция if … then, которая до этого момента не изучалась.
Слово if переводится как «если». Слово then переводится как «то». В результате получается конструкция «если условие выполнено,то» В программе она выглядит как if условие выполнено then. Частым случаем этой конструкции является запись if . then . else. Слово else переводится как «иначе». То есть если условие выполнено, то выполнится то, что написано после then, иначе выполнится то, что написано после else.
Все операторы в Delphi заканчиваются точкой с запятой. Это нужно делать, чтобы отделить команды друг от друга, ведь одна команда может быть записана на две строки или две команды в одной. Так вот после оператора, идущего перед else, никогда не ставится точка с запятой. Это правило нужно запомнить.
В примере ниже проверяется условие, если переменная b равна true, то переменной str присваивается значение «Истина», иначе значение «Ложь».

Таймер Delphi и переменная

У меня есть таймер delphi, который выполняет код в 200 мс. Он будет хранить переменную под названием CurrentShots. Что мне нужно сделать, это сохранить другую переменную с именем OriginalShots, чтобы определить, уменьшилось ли CurrentShots в том же таймере.

Это возможно? Я не могу выработать способ сделать это без того, чтобы обе переменные были одного и того же числа.

Я понимаю, что не инициализировал OriginalShots, но я не уверен, как это сделать. В принципе, для начала с CurrentShots будут равны OriginalShots, пока CurrentShots не уменьшится на 1.

Так, например, мы начинаем с 50. Обе переменные имеют 50. Сделан снимок. Теперь текущие снимки теперь показывают 49, а у OriginalShots все равно 50, поэтому я знаю, что выстрел был уволен. Теперь, если выстрел другого выстрела, текущие кадры становятся 48, а OriginalShots — 49.

Я читаю CurrentShots из памяти, что означает, что OriginalShots также считывается из памяти.

Надеюсь, я объяснил сам.

Во-первых, я задаюсь вопросом об использовании array of char для значений, которые — если ваша проблема точно определена — являются простыми целыми числами.

Аналогично, если значения действительно являются массивами char, то прямое сравнение, вероятно, не будет работать так, как вы ожидаете и намереваетесь. Если они представляют собой строковые представления чисел, я бы преобразовал их в фактические целочисленные значения перед любым сравнением, чтобы обеспечить правильное числовое сравнение, а не сравнение строк.

Я предполагаю, что это ваше намерение.

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

Просто переместите объявление OriginalShot в какое-то место за пределами обработчика событий, где он может удерживать значение независимо от обработки в самом событии таймера (переменная/поле формы, которая содержит таймер, была бы хорошим кандидатом) и инициализировать его с соответствующим значением перед запуском вашего таймера:

В вашем случае вы затем сравниваете целочисленное значение CurrentShots с членом формы fOriginalShots и обновляете fOriginalShots только тогда, когда есть изменение:

Кроме того, я замечаю, что ваше событие таймера отключает таймер, но, похоже, не активирует его и не задается вопросом, является ли это преднамеренным?

Объявить общедоступную глобальную переменную в Delphi

предположим, у меня есть две формы в проекте delphi, я хочу иметь доступ к переменным form1 из form2. Есть ли кто-нибудь, чтобы объявить, скажем, «публичную» переменную в form1, которая может быть прочитана из всех форм?

Я попытался поместить переменную в публичное объявление

и в форме 2 у меня есть

затем я поместил «Unit1» в раздел uses на Form2, но, похоже, я не могу этого сделать из-за круговой ссылки. Я бы хотел воздержаться от использование указателей, если это возможно.

3 ответов

во-первых, если вы должны использовать глобалы (вероятно, лучше не использовать глобалы, как мудро указал Крейг), то вы должны поместить глобалы, которые вы хотите поделиться в SharedGlobals.pas:

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

вторая идея, так как ваши два блока, которые у вас уже есть зависимости друг от друга, вы также можете обойти свою круговую зависимость, используя блок, который создаст круговую зависимость, из раздела реализации вместо интерфейса:

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

глобальные опасны потому что:

  • они обеспечивают связь между единицами, которые их разделяют (концепция называется жесткая связь)
  • эта ссылка скрыта в том смысле, что не очевидна точная природа ссылки без изучения деталей кода.
  • ваш код будет завален побочные эффекты, то есть, когда вы делаете что-то в методе, происходят и другие неожиданные вещи. Это увеличивает возможность и сложность тонких ошибок.
  • вы быстро обнаружите, что даже средних проектов стало очень трудно поддерживать.

Циклические Ссылки

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

в вашем случае вам просто нужно переместить Unit1 С interface использования implementation использует.

обмен данными без глобалс

вы заметите, что технически вы все еще используете globals; хотя и созданные Delphi, а не ваши собственные. Вот метод, который вы можете использовать для обмена данными более контролируемым образом.

затем в Form1 добавить следующее:

затем в Form2 вы делаете что-то немного другое, потому что хотите использовать общие данные Form1, а не свои собственные «общие данные».

наконец, после создания формы, вы даете Form2 в другой крупный к Form1 С общие данные:

в выше показано, как легко вы можете избавиться даже от глобальных переменных Delphi.

отказ от ответственности: некоторые из кода идет agaisnt общепринятые принципы инкапсуляции, но только для иллюстративных целей.

Глобальная переменная в Delphi

Есть программа с авторизацией. Мне необходимо каким то образом запомнить значение id работника и потом использовать его на формах в программе, причем формы программы являются отдельными DLL библиотеками.

1 ответ 1

Для передачи глобальных переменных (данных, значений), рекомендуют использовать БД, как вариант sqlite или на крайний случай использовать сохранение в файл (пример: json), а DLL пускай от туда считывают, записывают или удаляют. вроде таким образом решали эту проблему. и завтра может понадобиться не только одну глобальную переменную передавать :-)

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

Похожие

Подписаться на ленту

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

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.11.35402

ShortDayNames — Переменная Delphi

Вот такая задачка по динамическим переменным из учебника. Не могу понять — где ошибка.

procedure TForm1.Button1Click(Sender: TObject);
type
PInteger=^Integer;

p1,p2,p3: ^Integer; // указатели на переменные типа integer

New(p1);
New(p2);
New(p3);
p1:= 5;
р2:= 3;
р3 := р1 + р2;
ShowMessage(‘Сумма чисел равна ‘ + IntToStr(р3));

Dispose(p1);
Dispose(р2);
Dispose(р3);

[Error] Unit1.pas(41): Incompatible types: ‘Integer’ and ‘Pointer’
[Error] Unit1.pas(42): Illegal character in input file: ‘р’ ($F0)
[Error] Unit1.pas(43): Illegal character in input file: ‘р’ ($F0)
[Error] Unit1.pas(43): Illegal character in input file: ‘р’ ($F0)
[Error] Unit1.pas(44): Illegal character in input file: ‘р’ ($F0)
[Error] Unit1.pas(49): Illegal character in input file: ‘р’ ($F0)
[Error] Unit1.pas(50): Illegal character in input file: ‘р’ ($F0)
[Fatal Error] Project1.dpr(5): Could not compile used unit ‘Unit1.pas’

Автоматическая инициализация переменных в Delphi

Переменные в Delphi можно разделить на три типа

Разные типы имеют свои особенности инициализация по умолчанию. Глобальные переменные — переменные которые объявлены в теле модуля всегда инициализируются автоматически. Например, числовые типы всегда будут равны нулю.

Локальные переменные — переменные объявленные внутри функций, процедур или методов не инициализируются автоматически. Их значение можно считать случайным. Например, следующий код будет выводить разное сообщение при каждом запуске программы

Опаснее всего ситуация с объектными типами.

В переменной находится случайны адрес, следовательно вызов методов и изменение полей приведёт к непредсказуемым результатам.

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

Выводы

Глобальные и локальные перемеренные обязательно нужно инициализировать в явном виде, это позволяет избежать большого количества проблем и повышает читаемость.

Поля объектов можно инициализировать в конструкторе. Это обязательно нужно делать для некоторых типов, например, для Variant, так как по умолчанию они равны Unassigned. Для строк и чисел особого смысла в инициализации нулями и пустыми строками нет, возможно, для унификации.

Ссылки

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL