Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80

"Пнуть" компонент при запуске программы

18.11.2017, 20:06. Показов 2878. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме есть TrackBar с предустановленным значением Position и есть Label, Caption которой принимает значение Position по событию Change
Delphi
1
2
3
4
procedure TForm1.TrBrZChange(Sender: TObject);
begin
  lb2.Caption := IntToStr(TrBrZ.Position)
end;
при запуске программы происходит событие OnAction главной формы.
Что туда (в обработчик события OnAction) можно записать, чтобы у TrackBar'a произошло событие Change?
Если присвоить позиции определённое значение, то оно произойдёт.
Но без явного присваивания значения как ещё можно пнуть один раз компонент, чтобы не нарушить значение, заданное изначально при написании программы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.11.2017, 20:06
Ответы с готовыми решениями:

При запуске программы компонент panel делает кнопки и все остальные компоненты не активными
При запуске моей программы компонент panel делает кнопки и все остальные компоненты не активными, как это можно решить?(не убирая panel) ...

Что надо сделать, чтобы при запуске программы и при первом запуске SaveDialog открывался заданный по умолчанию каталог?
Здравствуйте ВСЕ ! Проблема следующая. 1) При первом запуске SaveDialog открывается каталог с файлами. 2) Изменяешь каталог,...

Компонент Image некорректно отображается при запуске на другом ПК
Компонент Image некорректно отображается, при запуске на другом ПК. То как отображается на моем ПК То как отображается на...

48
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
14.12.2017, 05:32  [ТС]
Студворк — интернет-сервис помощи студентам
раз никак, то будем пробовать...

а тогда уточняющий вопрос.

если у нас три линии и один объект Dim, например
типа
Delphi
1
2
3
4
5
  TDim = record
    l1, l2, l3 :TLine;
    с :Tcolor;
    w:integer;
  end;
если мы "спрячем" Line в класс, то как быть тогда с Dim?

Ведь он теперь не сможет содержать линии?
Тогда и его как-то надо в класс заворачивать?
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
14.12.2017, 05:38
Сможет, почему нет?
0
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
14.12.2017, 06:29  [ТС]
но Line теперь у нас не record, а class

как может record Dim содержать класс Line?

тут вдобавок рисовать Line не нужно (они не должны иметь метода рисования), а вот Dim должен иметь метод рисования нескольких линий

может я опять думаю/рассуждаю неграмотно, не по-программистски?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
14.12.2017, 08:24
не нужно объекту рисование себя. это плохая архитектура
пусть хранит свои данные, а отрисовывает все объекты пусть другой класс, обычно это форма

класс лучше записи именно потому, что все структуры создаются динамически, а динамическое создание записей это геморрой с указателями.
у классов есть всякие удобные TObjectList и вообще много разных нужных вещей
0
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
14.12.2017, 11:10  [ТС]
дельфи ругается на propety

Delphi
1
2
3
4
5
6
7
8
9
10
11
  T_Line = class
    private
    public
//                ....
//                свойства
    property A:Extended read ReadA write WriteA;
//                ....
                Cnv:TCanvas;
                constructor Create;
//                procedure Draw;
  end;
говорит поле или метод требуется. И курсор ставит после ReadA
в хелпе не могу найти разъяснения
помогите, пожалуйста
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
14.12.2017, 11:43
тут написано - когда читаем брать переменную или функцию ReadA а когда пишем - WriteA
а где же эти процедуры/функции??
0
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
14.12.2017, 20:00  [ТС]
вот после перестановки строк методом подобия и методом тыка получилось избавиться от ошибки...


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
 T_Line = class
    o, b, f, A: TPoint;
    db, df : integer;
//    Ae: extended;
    procedure WriteA(A:extended);
    function  ReadA:Extended;
  private
  public
    // свойства
    property Ae:Extended read ReadA write WriteA;
    //                ....
    constructor Create;
    //                procedure Draw;
  end;{}
 
 
 
implementation
 
{$R *.dfm}
 
//******************************************************************************
 
procedure T_Line.WriteA(A:extended);
begin
  Ae := A;
end;
function T_Line.ReadA:Extended;
begin
  Result := Ae;
end;
но он (она/оно) теперь требует конструктора
насколько я понимаю, все переменные описаны и конструктору делать-то нечего. Пустым его сделать в виде процедуры?
подскажите где почитать

Добавлено через 10 минут
только тут имя property Aa, а не Ae...
если имя свойства совпадает с именем объявленной переменной - ошибка возникает

Добавлено через 7 минут
5 минут на редактирование сообщения маловато будет... )))
Дописка неактуальна - заработало.
А конструкор - нет. Нет образца для подражания и нет понимания для успешного творения.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
14.12.2017, 20:17
если ничего не меняете, не нужен свой отдельный конструктор

программе все равно, переменная или файл, или тип, главное, чтобы все идентификаторы были уникальными

а вот названия геттеров и сеттеров - методов, которые скрывают реализацию property
обычно выглядят как Getxxx и Setxxx
Delphi
1
property MyProperty : integer  read GetMyProperty write SetMyProperty;
1
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
14.12.2017, 20:46  [ТС]
krapotkin, спасибо

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

Получилось так:

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 Line_class;
 
interface
 
uses
//  Windows, //  Messages,//  SysUtils,//  Variants,//  Classes,
  Types,
  Math;
 
type
 
 T_Line = class
    o, b, f, A_: TPoint;
    db, df, d3 : integer;
//    Perspective: boolean;
//    Ae: extended;
  private
  public
    // свойства
    procedure SetA(Ap: TPoint);
    function  GetA: TPoint;
    property A: TPoint read GetA write SetA;
 
    procedure SetAe(Ap: Extended);
    function  GetAe: Extended;
    property Ae:Extended read GetAe write SetAe;
 
    procedure SetPersp(persp: boolean);
    function  GetPersp: boolean;
    property Perspective: boolean read GetPersp write SetPersp;
  end;
 
 
 
implementation
 
function T_Line.GetA: TPoint;
begin
  Result := A;
end;
 
procedure T_Line.SetA(Ap:TPoint);
begin
  A := Ap;
end;
 
function T_Line.GetAe:Extended;
begin
  Result := Ae;
end;
 
procedure T_Line.SetAe(Ap:extended);
begin
  Ae := Ap;
end;
 
function T_Line.GetPersp: boolean;
begin
  Result := Perspective;
end;
 
procedure T_Line.SetPersp(Persp: boolean);
begin
  Perspective := Persp;
end;
 
end.
достаточно такого описания или что-то надо добавить? Дельфи вроде проглатывает такое без ругани.

может сгруппировать процедуры/функции отдельно в описании, а свойства отдельно? а то какая-то каша получается - не видно списка свойств из-за описания их методов.

2. и куда добавить метод рисования? (который будет вызываться косвенно через изменения разных property
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
14.12.2017, 20:56
Обычно делается так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type Txxx=class
               private
               FProp1:...
               FProp2:...
               ..........
               public
               property Prop1:... read GetProp1 write SetProp1;
               property Prop2:... read GetProp2 write SetProp2;
               ..........
               function GetProp1:...
               procedure SetProp1(...);  
               function GetProp2:...
               procedure SetProp2(...);  
               ...........
               end;
Добавлено через 1 минуту
Delphi
1
2
3
4
5
6
7
8
9
10
function Txxx.GetProp1:...
begin
Result:=FProp1;
end;
 
procedure Txxx.SetProp1(...)
begin
FProp1:=...
//------Какие-то ещё действия
end;
0
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
14.12.2017, 20:59  [ТС]
Massaraksh7, дельфи ругается, если function и procedure стоят после property...
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
14.12.2017, 21:02
FProp1 - это внутренняя переменная, где хранится значение
Prop1 - это свойство
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
14.12.2017, 21:06
Ну, значит, до:
Миниатюры
"Пнуть" компонент при запуске программы  
1
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
14.12.2017, 21:18  [ТС]
да, в таком порядке работает
спасибо
Будем копать дальше.

Добавлено через 4 минуты
вопрос ещё.
Вот изменили какую-то переменную (свойство), другую, третью
Но т.к. они взаимосвязаны, то изменения касаются всех (почти всех)
Тогда и перерасчёт получается по факту один и тот же.
Можно нескольким свойствам назначить один метод перерасчёта/обработки?
Или это делается как-то иначе?
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
14.12.2017, 21:34
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type Txxx=class
                .....
                procedure Calculate;
                .....
                end;
.....
procedure SetProp1
...........
Calculate;
........
end;
 
.....
procedure SetProp2
...........
Calculate;
........
end;
1
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
14.12.2017, 21:56  [ТС]
Massaraksh7, сенкс
так получается, да, красиво ))
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
14.12.2017, 22:38
хм. не соглашусь. как раз ОБЫЧНО не так))
геттеры и сеттеры прячут либо в private или protected
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
TMyClass=class
private
  FProp1:integer;
  FProp2:string;
  function GetProp1:integer;
  procedufre SetProp1(value:integer);
  function GetProp2:string;
  procedure SetProp2(value:string);
public
  property Prop1 : integer read GetProp1 write SetProp1;
  property Prop2 : string read GetProp2 write SetProp2;
end;
Добавлено через 2 минуты
Цитата Сообщение от карандаш ТМ Посмотреть сообщение
нескольким свойствам назначить один метод перерасчёта/обработки?
нужна конкретика, но в сеттере вы можете для всех вызывать все что угодно, например

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TMyClass.SetProp1(value:integer);
begin
  FProp1:=Value;
  init;
end;
procedure TMyClass.SetProp2(value:string);
begin
  FProp2:=Value;
  init;
end;
1
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
14.12.2017, 22:52
Цитата Сообщение от krapotkin Посмотреть сообщение
геттеры и сеттеры прячут либо в private или protected
Да, соглашусь.
0
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
16.12.2017, 00:35  [ТС]
И снова здравствуйте!
Вроде как всё написал. как советовали, но...
Что-то наверное надо делать с конструктором?

При запуске прога вылетает по ошибке обращения к памяти, а отладчик показывает на первую же строку в процедуре-обработчике объекта Ln (объявленного как Ln: T_Line), где внутренней переменно присваивается 0.

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
type
 
 T_Line = class
  private
    // координаты: центра, начала, конца, угла, угла
    fO, fB, fF, fA, fA_: TPoint;
    // длины: начала, конца, третьей точки (?)
    fdB, fdF, fd3 : integer;
    fPersp: boolean; // режим перспективы/искажения или нет (перпендикуляры)
    fAe: extended;  // угол поворота в радианах
  protected
    // методы свойств
    function  GetA: TPoint;
    procedure SetA(Ap: TPoint);
    function  GetAe: Extended;
    procedure SetAe(Ap: Extended);
    function  GetPersp: boolean;
    procedure SetPersp(persp: boolean);
 
    procedure RotateA;
    procedure Calculate;
  public
    procedure Init;
    // свойства
    property A: TPoint read GetA write SetA;
    property Ae:Extended read GetAe write SetAe;
    property Persp: boolean read GetPersp write SetPersp;
 
  end;
вот процедура

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure T_Line.Init;
begin
    fO.X := 0; fO.Y := 0;
    fB.X := 0; fB.Y := 0;
    fF.X := 0; fF.Y := 0;
    fA.X := 0; fA.Y := 0;
    fA_.X:= 0; fA_.Y:= 0;
    fdB := cdB;
    fdF := cdF;
    fd3 := 0;
    fPersp:= false;
    fAe := 0;
end;
видать таки память ей дельфи не отводит по умолчанию...

подскажите, как намекнуть Дельфи, чтобы память отводил согласно объявленной структуре переменной.
0
 Аватар для карандаш ТМ
2 / 2 / 0
Регистрация: 13.11.2017
Сообщений: 80
16.12.2017, 00:39  [ТС]
это картинки
Миниатюры
"Пнуть" компонент при запуске программы   "Пнуть" компонент при запуске программы  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2017, 00:39

При запуске ОС устанавливаются сторонние программы,а при запуске браузера Chrome расширения
Здравствуйте, При запуске ОС устанавливаются сторонние программы,а при запуске браузера Chrome расширения

Как мне сделать так, чтобы данный текстовый файл был открыт один раз при запуске программы и закрыт при закрытии программы?
Привет! Возник следующий вопрос. Программа состоит из основного окна Form1 и нескольких Unit. По таймеру в Form1 запускается один из...

При запуске любой программы MS Office происходит псевдо установка программы
Приветствую. Беда с пакетом. Он нелицензионный, поломаный, может оттого, но на других компах отлично работает. Дело в том, что...

Ошибки при запуске программы из другой программы - неверная рабочая директория
Вот у меня есть несколько программ написанных под VisualBasic.net. После чего, я создаю спец программу, которая по нажатию кнопок...

при запуске любой программы выскакивает окно ВЫБОР ПРОГРАММЫ
Что делать или как удалить вирус У меня при запуске любой программы выскакивает окно ВЫБОР ПРОГРАММЫ Я даже не могу установить...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты 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, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru