Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/41: Рейтинг темы: голосов - 41, средняя оценка - 4.85
-3 / 0 / 0
Регистрация: 09.11.2019
Сообщений: 114

Создать программу Градусник

08.12.2019, 15:41. Показов 8345. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
https://www.cyberforum.ru/atta... 1575808777
Есть код,но нужно сделать это задание так,чтобы было несколько форм.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Рис. 59.
Рис. 60. 
90
 Dialogs, StdCtrls, ExtCtrls;
type
 TForm1 = class(TForm)
 Edit1: TEdit;
 Edit2: TEdit;
 Button1: TButton;
 Button2: TButton;
 Button3: TButton;
 Button4: TButton;
 Image1: TImage;
 Image2: TImage;
 Label1: TLabel;
 Label2: TLabel;
 procedure FormCreate(Sender: TObject);
 procedure Button2Click(Sender: TObject);
 procedure Button1Click(Sender: TObject);
 procedure Button3Click(Sender: TObject);
 procedure Button4Click(Sender: TObject);
 
private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
 Edit1.Text := '';
 Edit2.Text := '';
 Image1.Canvas.Pen.Color := clRed;
 Image1.Canvas.Brush.Color := clWhite;
 Image1.Canvas.Rectangle(10,1,23,360);
 Image2.Canvas.Pen.Color := clBlue;
 Image2.Canvas.Brush.Color := clWhite;
 Image2.Canvas.Rectangle(10,1,23,360);
end;
procedure TForm1.Button2Click(Sender: TObject);
var a, b, c : real;
begin
 a := StrToFloat(Edit1.Text);
 if (a > 0) or (a < 100) then b := 1.8 * a + 32;
 i
f a > 100 then b := 212;
 i
f a < 0 then b := 32;
 Edit2.Text := FloatToStr(b); 
91
 Image1.Canvas.Pen.Color := clRed;
 Image1.Canvas.Brush.Color := clWhite;
 Image1.Canvas.Rectangle(10,1,23,360);
 Image1.Canvas.Pen.Color := clRed;
 Image1.Canvas.Brush.Color := clRed;
 Image1.Canvas.Rectangle(10,round(360-a),23,360);
 Image2.Canvas.Pen.Color := clBlue;
 Image2.Canvas.Brush.Color := clWhite;
 Image2.Canvas.Rectangle(10,1,23,360);
 Image2.Canvas.Pen.Color := clBlue;
 Image2.Canvas.Brush.Color := clBlue;
 Image2.Canvas.Rectangle(10,round(360-b),23,360);
end;
procedure TForm1.Button1Click(Sender: TObject);
var a, c, d : real;
begin
 c := StrToFloat(Edit2.Text);
if (c > 32) or (c < 212) then d := ( c - 32)/1.8;
 if c < 32 then d := 0;
if c > 212 then d := 100;
 Edit1.Text := FloatToStr(d);
 Image2.Canvas.Pen.Color := clBlue;
 Image2.Canvas.Brush.Color := clWhite;
 Image2.Canvas.Rectangle(10,1,23,360);
 Image2.Canvas.Pen.Color := clBlue;
 Image2.Canvas.Brush.Color := clBlue;
 Image2.Canvas.Rectangle(10,round(360-c),23,360);
 Image1.Canvas.Pen.Color := clRed;
 Image1.Canvas.Brush.Color := clWhite;
 Image1.Canvas.Rectangle(10,1,23,360);
 Image1.Canvas.Pen.Color := clRed;
 Image1.Canvas.Brush.Color := clRed;
 Image1.Canvas.Rectangle(10,round(360-d),23,360);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
 Edit1.Text := '';
 Edit2.Text := '';
 Image1.Canvas.Pen.Color := clRed;
 Image1.Canvas.Brush.Color := clWhite;
 Image1.Canvas.Rectangle(10,1,23,360);
 Image2.Canvas.Pen.Color := clBlue;
 Image2.Canvas.Brush.Color := clWhite;
 Image2.Canvas.Rectangle(10,1,23,360);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
 Close;
end; 
92
procedure TForm1.Edit1Enter(Sender: TObject);
begin
 Button2.Visible := true;
 Button1.Visible := False;
end;
procedure TForm1.Edit2Enter(Sender: TObject);
begin
 Button1.Visible := True;
 Button2.Visible := False;
end;
end.
Изображения
 
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2019, 15:41
Ответы с готовыми решениями:

Градусник. Перевод температуры по Цельсию в температуру по Фаренгейту
Создать программу, которая переводит значение температуры по Цельсию в значения температуры по Фаренгейту. Поместите графический объект...

Реализовать приложение "Градусник" (в Delphi 7)
мне нужно составить градусник в delphi 7,с тремя кнопками одна из них нагрев,при нажатии которой полоса на градуснике ползет вверх ...

USB-градусник
Собственно, хочется градусник, воткнул в Usb, программу запустил и вот она температура :) Где такой купить в России? Я нашел в штатах...

23
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
10.12.2019, 02:08
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Lorrrd Посмотреть сообщение
А как нормально?
В первую очередь нормально никогда не использовать в реальных проектах глобальные переменные создаваемые в модулях форм по умолчанию.
Типа
Delphi
1
Form1 : TForm1;
0
 Аватар для mr-Crocodile
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
10.12.2019, 10:28
Цитата Сообщение от northener Посмотреть сообщение
В первую очередь нормально никогда не использовать в реальных проектах глобальные переменные создаваемые в модулях форм по умолчанию.
Delphi
1
Form1 : TForm1;
Почему? И как надо поступать в реальных проектах?
0
 Аватар для Flip
335 / 173 / 67
Регистрация: 25.02.2018
Сообщений: 616
11.12.2019, 15:10
Лучший ответ Сообщение было отмечено qwertehok как решение

Решение

Цитата Сообщение от Craizi8 Посмотреть сообщение
Есть код,но нужно сделать это задание так,чтобы было несколько форм.
Это код не градусника, и не термометра, а код двух цветных столбов на форме... Понятно что задача учебная конечно, и код то вы содрали по одной из ссылок, которых не мало в сети.
Что касаемо реализации самой задачи. Сделал небольшой проект, может кому-то в будущем пригодится, дабы не пихать преподавателям лабуду из стартового топика, а сделать действительно графический термометр. В задаче выдержано условие нескольких форм - их в данном проекте три. Основная форма с данными и две формы с визуальными термометрами в градуса Цельсия и Фаренгейта.
На первой форме происходит вычисление (конвертация/преобразование) данных температуры по шкалам Цельсия и Фаренгейта в прямом и обратном направлении. Подробно описывать не буду, всё указал в комментариях. Две другие формы - это графические термометры, которые и отображают визуально данные о температуре, используя для этого глобальные переменные из первой (главной) формы.
Код первого юнита, главной формы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, ComCtrls, Buttons, XPMan;
 
type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    FarToCel: TBitBtn;
    CelToFar: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Clean: TBitBtn;
    procedure CelToFarClick(Sender: TObject);
    procedure FarToCelClick(Sender: TObject);
    procedure CleanClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  // Глобальные переменные для передачи значения температуры на формы с термометрами.
  CelsiusThermValue, // температура в градусах Цельсия.
FahrenheitThermValue: Integer; // температура в градусах Фаренгейта.
 
implementation
 
uses
  // Подключаем две дополнительные формы, на каждой из которой расположен термометр
  // в определённых единицах измерения температуры.
  Celsius, Fahrenheit;
 
{$R *.dfm}
 
// Процедура перевода градусов Фаренгейта в градусы Цельсия.
procedure TForm1.FarToCelClick(Sender: TObject);
var
  // Переменная, для получения данных о температуре в градусах Фаренгейта,
  // тип Extended, является типом числа с плавающей запятой, используется
  // когда требуются самая высокая точность и/или самая высокая экспонента.
  // (Описание можно найти тут - http://www.delphibasics.ru/Extended.php).
  Fahrenheit: Extended;
begin
  // Пересчёт градусов производится по формуле - (0°C * 9/5) + 32 = 32 °F.
  // Высчитываем значение температуры в градусах Фаренгейта и заносим его в переменную.
  // Значение градусов Цельсия берётся из SpinEdit1.
  Fahrenheit := (SpinEdit1.Value * 1.8) + 32;
  // В ходе выполнения операции получится результат с знаками после запятой.
  // Например, 11 °C будут равны 51,8 °F. Визуально на шкале Фаренгейта тяжело определить
  // десятые доли градуса, поскольку шкала, используемая в стандартных термометрах очень
  // крупная. Ввиду этого округляем полученное значение температуры до целого числа с
  // использованием функции Trunc, которая возвращает целочисленную часть числа с плавающей
  // запятой. Она возвращает эту часть как Целочисленное значение.
  // (Описание можно найти тут - http://www.delphibasics.ru/Trunc.php).
  FahrenheitThermValue := Trunc(Fahrenheit);
  // Отображаем полученное и округлённое значение в SpinEdit2.
  SpinEdit2.Value := FahrenheitThermValue;
  // Запускаем форму с термометром в градусах Фаренгейта.
  ThermoFahrenheit.ShowModal;
end;
 
// Процедура перевода градусов Цельсия в градусы Фаренгейта.
procedure TForm1.CelToFarClick(Sender: TObject);
var
  // Переменная, для получения данных о температуре в градусах Цельсия (тип Extended).
  Celsius: Extended;
begin
  // Пересчёт градусов производится по формуле - (32°F - 32) /  5/9 = 0 °C.
  // Высчитываем значение температуры в градусах Цельсия и заносим его в переменную.
  // Значение градусов Фаренгейта берётся из SpinEdit2.
  Celsius := (SpinEdit2.Value - 32) / 1.8;
  // В ходе выполнения операции получится результат с множественными знаками после запятой.
  // Например, 25 °C будут равны -3,8888888888888888888888888888889 °F. Визуально на шкале
  // Цельсия как и в предыдущем случае тяжело определить десятые, а тем более сотые и т.д.
  // доли градуса. Ввиду этого округляем полученное значение температуры до целого числа с
  // использованием функции Trunc.
  CelsiusThermValue := Trunc(Celsius);
  // Отображаем полученное и округлённое значение в SpinEdit1.
  SpinEdit1.Value := CelsiusThermValue;
  // Запускаем форму с термометром в градусах Цельсия.
  ThermoCelsius.ShowModal;
end;
 
// Процедура очистки значений SpinEdit 1, 2 для проведения новых расчётов.
procedure TForm1.CleanClick(Sender: TObject);
begin
  SpinEdit1.Value := 0;
  SpinEdit2.Value := 0;
end;
 
end.
Код второй формы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
unit Celsius;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, Gauges;
 
type
  TThermoCelsius = class(TForm)
    Image1: TImage;
    Gauge1: TGauge;
    // У компонента Gauge свойство MaxValue = 100, MinValue = 0, Progress = 50.
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  ThermoCelsius: TThermoCelsius;
 
implementation
 
uses
  Unit1;
 
{$R *.dfm}
 
 
// Процедура отображения графического термометра в градусах Цельсия.
procedure TThermoCelsius.FormShow(Sender: TObject);
begin
  // Для реализации данного проекта был использован компонент Gauge, который является
  // стандартным компонентом в среде Delphi/
  // (Описание можно найти тут - http://delphi-prg.ru/komponent-delphi-gauge).
  // На форму помещен компонент Image (свойство Align - alClient), в который загружено
  // графическое изображение шкалы с градусами Цельсия.
  // Шкала разрабатывалась специально для этого в ручную и хорошо откалибрована.
  // Интервал температур в шкале от - 50 до 50 °C.
  // То есть 0 градусов соответствует 50 свойству Progress компонента Gauge, его и выставляем.
  // Можно было реализовать и по другому в реальном интервале температур, но и так вполне
  // точно работает.
  Gauge1.Progress := 50;
  // Если значение, которое было получено на первой форме при работе с данными,
  // больше 0, то...
  if CelsiusThermValue > 0 then
  begin
    // прибавляем его к нулевой отметки шкалы (50), и...
    Gauge1.Progress := 50 + CelsiusThermValue;
    // поскольку температура положительная сделаем цвет столбика термометра красным.
    Gauge1.ForeColor := clRed;
  end
  // Если значение, которое было получено на первой форме при работе с данными,
  // меньше 0, то...
  else if CelsiusThermValue < 0 then
  begin
    // также прибавляем его к нулевой отметки шкалы (50), поскольку оттуда оно придёт
    // со знаком минус, соответственно вычитание выполнится автоматически, и...
    Gauge1.Progress := 50 + CelsiusThermValue;
    // поскольку температура отрицательная сделаем цвет столбика термометра синим.
    Gauge1.ForeColor := clSkyBlue;
  end
  // А если в переменной приходит нулевое значение, то....
  else if CelsiusThermValue = 0 then
  begin
    // делаем цвет столбика термометра зелёным.
    Gauge1.ForeColor := clLime;
    // Вычислять значение в Gauge не нужно, поскольку он по умолчанию в дизайн-тайме
    // выставлено в 50, то есть на нулевую отметку. 
  end;
end;
 
end.
Код третьей формы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
unit Fahrenheit;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, Gauges;
 
type
  TThermoFahrenheit = class(TForm)
    Image1: TImage;
    // У компонента Gauge свойство MaxValue = 140, MinValue = -60, Progress = 0.
    Gauge1: TGauge;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  ThermoFahrenheit: TThermoFahrenheit;
 
implementation
 
uses
  Unit1;
 
{$R *.dfm}
 
// Процедура отображения графического термометра в градусах Фаренгейта.
procedure TThermoFahrenheit.FormShow(Sender: TObject);
begin
  // Использован также компонент Gauge. На форму помещен компонент Image
  // (свойство Align - alClient), в который загружено графическое изображение шкалы
  // с градусами Фаренгейта. Однако шкала отличается от шкалы Цельсия. Также
  // разрабатывалась и калибровалась в ручную. Интервал температур в шкале от - 60 до 140 °C.
  // Здесь реализовал немного по другому, с отрицательным начальным значением
  // в компоненте Gauge.
  // Если значение, которое было получено на первой форме при работе с данными,
  // больше 0, то...
  if FahrenheitThermValue > 0 then
  begin
    // прибавляем его к нулевой отметке шкалы, и...
    Gauge1.Progress := 0 + FahrenheitThermValue;
    // поскольку температура положительная сделаем цвет столбика термометра красным.
    Gauge1.ForeColor := clRed;
  end
  // Если значение, которое было получено на первой форме при работе с данными,
  // меньше 0, то...
  else if FahrenheitThermValue < 0 then
  begin
    // прибавляем его к нулевой отметки (вычитание произойдёт автоматически), и...
    Gauge1.Progress := 0 + FahrenheitThermValue;
    // поскольку температура отрицательная сделаем цвет столбика термометра синим.
    Gauge1.ForeColor := clSkyBlue;
  end
  // Если в переменной приходит нулевое значение, то....
  else if FahrenheitThermValue = 0 then
  begin
    // делаем цвет столбика термометра зелёным.
    Gauge1.ForeColor := clLime;
    // Значение не меняем, оно установлено на нулевой отметке по умолчанию.
  end;
end;
 
end.
Выглядит и работает как-то так:

Проект (Delphi7) - Thermometer.ZIP
-----
В папке с проектом находится файл, с векторным изображением шкалы Цельсия и Фаренгейта, которые использовались в приложении. При необходимости диапазон температур можно расширить. Файл - VectorScale.CDR, выполнен в графическом редакторе CorelDraw X3.
0
 Аватар для Flip
335 / 173 / 67
Регистрация: 25.02.2018
Сообщений: 616
11.12.2019, 15:19
P.S. При работе с различными величинами нужно хотя бы минимально что-нибудь почитать. 0 градусов Цельсия и Фаренгейта никогда не совпадали и не совпадут. А теперь посмотрите ваш скрин...
Вот так выглядит нормальная шкала Цельсий/Фаренгейт:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.12.2019, 15:19

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

Модуль GraphABC. Нарисовать градусник
Разработать алгоритм и программу решения задач:необходимо при помощи процедур и функций модуля GraphABC нарисовать градусник.Вывести девять...

Анимация.Градусник должен доходить до 30
Анимация.Градусник должен доходить до 30, а доходит до 26.....И как сделать, чтобы он сначала поднялся до 30 и потом опустился до -30? ...

Перменная + Контроллер + Сайт + Градусник
Доброго времени суток! Я создаю сайт мониторинга холодильного оборудования. Никогда раньше с таким не сталкивался. Можете подсказать с...

При помощи процедур и функций модуля Graph нарисовать градусник
Разработать алгоритм и программу решения задач:необходимо при помощи процедур и функций модуля Graph нарисовать градусник.Вывести девять...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru