Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
1

Ошибка Position Range Overflow в Лазарусе

21.09.2022, 02:39. Показов 1565. Ответов 16

Author24 — интернет-сервис помощи студентам
Доброй ночи! Программа выдала "Вызван класс исключений External, Position Range Overflow со ссылкой на файл customform.inc, следом появились ещё несколько предупреждений со ссылкой на wincontrol.inc
Появилось это после создания глобальной переменной UniversalLength, чтобы по таймеру изменять положение компонентов в некоторых пределах. Код:
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
procedure TMainWindow.CloseAccountButtonClick(Sender: TObject);
begin
  UniversalLength:=388;
  AccountTimer.Enabled:=true;
end;
 
procedure TMainWindow.AccountTimerTimer(Sender: TObject);
begin
  if UniversalLength > 39 then begin
    UniversalLength:=UniversalLength-15;
    AccountPanel.Top:=AccountPanel.Top-15;
    AvatarWindow.Top:=AvatarWindow.Top-15;
    AccountsBlockmanGOTitle.Top:=AccountsBlockmanGOTitle.Top-15;
    AccountID.Top:=AccountID.Top-15;
    AccountAprilConnect.Top:=AccountAprilConnect.Top-15;
    AccButton.Top:=AccButton.Top-15;
    AvatarWindow.Top:=AvatarWindow.Top-15;
    BGAccountsCount.Top:=BGAccountsCount.Top-15;
    ClansConnected.Top:=ClansConnected.Top-15;
    BGClansCount.Top:=BGClansCount.Top-15;
  end
  else
    AccountTimer.Enabled:=false;
end;
В wincontrol ссылка была сюда:
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
{------------------------------------------------------------------------------
  TWinControl UpdateShowing
 
  Check control's handle visibility.
  If handle should become visible the handle and child handles are created.
  The
------------------------------------------------------------------------------}
procedure TWinControl.UpdateShowing;
 
  procedure ChangeShowing(bShow: Boolean);
  begin
    if FShowing = bShow then Exit;
    FShowing := bShow;
    try
      {$IFDEF VerboseShowing}
      DebugLn(['ChangeShowing ',DbgSName(Self),' new FShowing=',FShowing]);
      {$ENDIF}
      Perform(CM_SHOWINGCHANGED, 0, 0); // see TWinControl.CMShowingChanged
    finally
      if FShowing<>(wcfHandleVisible in FWinControlFlags) then
      begin
        FShowing := wcfHandleVisible in FWinControlFlags;
        DebugLn(['TWinControl.UpdateShowing.ChangeShowing failed for ',DbgSName(Self),', Showing reset to ',FShowing]);
      end;
    end;
  end;
 
var
  bShow: Boolean;
  n: Integer;
begin
  bShow := HandleObjectShouldBeVisible;
 
  if bShow then
  begin
    if not HandleAllocated then CreateHandle;
    if Assigned(FControls) then
    begin
      for n := 0 to FControls.Count - 1 do
        if TObject(FControls[n]) is TWinControl then
          TWinControl(FControls[n]).UpdateShowing;
    end;
  end;
  if not HandleAllocated then
  begin
    {$IFDEF VerboseShowing}
    if bShow then
      DebugLn(['TWinControl.UpdateShowing ',DbgSName(Self),' handle not allocated']);
    {$ENDIF}
    Exit;
  end;
 
  if FShowing = bShow then Exit;
  //DebugLn(['TWinControl.UpdateShowing ',dbgsName(Self),' FShowing=',dbgs(FShowing),' bShow=',dbgs(bShow), ' IsWindowVisible=', IsWindowVisible(FHandle)]);
  if bShow then
  begin
    // the Handle should become visible
    // delay this until all other autosizing has been processed
    if AutoSizeDelayed or (not (caspShowing in AutoSizePhases)) then
    begin
      {$IFDEF VerboseShowing}
      if AutoSizeDelayed then DebugLn(['TWinControl.UpdateShowing ',DbgSName(Self),' SKIPPING because AutoSizeDelayed: ',AutoSizeDelayedReport]);
      if (not (caspShowing in AutoSizePhases)) then DebugLn(['TWinControl.UpdateShowing ',DbgSName(Self),' SKIPPING because wrong phase']);
      {$ENDIF}
      exit;
    end;
  end;
  ChangeShowing(bShow);
end;
В customform.inc сюда:

Delphi
1
2
3
4
5
6
7
8
9
10
constructor TFormPropertyStorage.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  if Owner is TCustomForm then
  begin
    TCustomForm(Owner).AddHandlerCreate(@FormCreate, True);
    TCustomForm(Owner).AddHandlerClose(@FormClose, True);
    TCustomForm(Owner).AddHandlerOnBeforeDestruction(@FormDestroy, True);
  end;
end;
Но больше всего настораживает то, что после одного показа всех ошибок сразу программа снова стала работать как прежде, даже указанный таймер, и тот работает, странно. Так что случилось?

Добавлено через 6 минут
Хотя нет, маленькая странность есть, что теперь при запуске приложения (и вне Лазаруса тоже) больше не отображается закладка (на рабочем столе), в панели активных приложений процесса тоже нет
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2022, 02:39
Ответы с готовыми решениями:

Overflow: hidden и position: relative
Всем привет. Кто-то может мне объяснить проблему overflow: hidder и position: relative. Я делаю...

Position:relative и overflow:hidden сдвигают кнопку с нужного места
Применяю к кнопкам ripple эффект, всё ок, но кнопки сдвигаются с нужных позиций. Код...

pymorphy: UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
pymorphy выдает такую ошибку UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position...

Ошибка в лазарусе
var x,z,a,b: Real; begin writeln('Vvedete chesla a, b, x: '); readln(a,b,x) ; if (x=a)...

16
Модератор
9261 / 6039 / 2379
Регистрация: 21.01.2014
Сообщений: 25,803
Записей в блоге: 3
21.09.2022, 05:40 2
Лучший ответ Сообщение было отмечено aprilpotter912 как решение

Решение

Как правило, когда отладчик кидает в системные модули - ошибка где-то перед обращением к переменным и функциям этого модуля. Но чтобы сказать что-то конкретное, не имея полного кода (или, что гораздо лучше, минимального проекта, где ошибка воспроизводится) надо быть телепатом.
2
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
21.09.2022, 07:17  [ТС] 3
D1973, понятно, спасибо
Ошибки не вижу((
Более того, вынесение всей добавленной части в комментарии не помогает - вкладка всё равно не образуется/
Код основной формы(на момент ошибки):
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
unit main;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls;
 
type
 
  { TMainWindow }
 
  TMainWindow = class(TForm)
    AccountAprilConnect: TStaticText;
    ClansConnected: TStaticText;
    BGAccountsCount: TStaticText;
    AccountsBlockmanGOTitle: TStaticText;
    Background: TImage;
    BevelNNN: TBevel;
    AccountDownButton: TImage;
    AccountCloseButton: TImage;
    AccButton: TImage;
    BGClansCount: TStaticText;
    SetLanguageBox: TComboBox;
    DevelopedBy: TImage;
    AccountPanel: TImage;
    SetLanguageBackground: TImage;
    MenuOpenButton: TImage;
    MenuCloseButton: TImage;
    Modify: TStaticText;
    AccountTimer: TTimer;
    TopMenu: TImage;
    SettingsButton: TImage;
    AvatarWindow: TShape;
    StartButton: TImage;
    MainTitle: TImage;
    StartText: TStaticText;
    SettingsText: TStaticText;
    AccountName: TStaticText;
    AccountID: TStaticText;
    procedure AccountCloseButtonClick(Sender: TObject);
    procedure AccountTimerTimer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure MenuCloseButtonClick(Sender: TObject);
    procedure MenuOpenButtonClick(Sender: TObject);
    procedure SettingsButtonClick(Sender: TObject);
    procedure SettingsTextClick(Sender: TObject);
    procedure StartButtonClick(Sender: TObject);
    procedure StartTextClick(Sender: TObject);
  private
 
  public
 
  end;
 
var
  MainWindow: TMainWindow;
  UniversalLength:integer;
 
implementation
uses launchingcode;
 
{$R *.lfm}
 
{ TMainWindow }
 
procedure TMainWindow.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Logoform.Close;
end;
 
procedure TMainWindow.FormActivate(Sender: TObject);
begin
  StartButton.BringToFront;
  StartText.BringToFront;
  SettingsButton.BringToFront;
  SettingsText.BringToFront;
end;
 
procedure TMainWindow.AccountCloseButtonClick(Sender: TObject);
var
  i:integer;
begin
  //for i:= 1 to 91 do begin
  //  Sleep(10);
  //  AccountPanel.Top:=AccountPanel.Top-3;
  //end;
  UniversalLength:=388;
  AccountTimer.Enabled:=true;
end;
 
procedure TMainWindow.AccountTimerTimer(Sender: TObject);
begin
  if UniversalLength > 39 then begin
    UniversalLength:=UniversalLength+2;
    AccountPanel.Top:=AccountPanel.Top-15;
    AvatarWindow.Top:=AvatarWindow.Top-15;
    AccountsBlockmanGOTitle.Top:=AccountsBlockmanGOTitle.Top-15;
    AccountID.Top:=AccountID.Top-15;
    AccountAprilConnect.Top:=AccountAprilConnect.Top-15;
    AccButton.Top:=AccButton.Top-15;
    AvatarWindow.Top:=AvatarWindow.Top-15;
    BGAccountsCount.Top:=BGAccountsCount.Top-15;
    ClansConnected.Top:=ClansConnected.Top-15;
    BGClansCount.Top:=BGClansCount.Top-15;
  end
  else AccountTimer.Enabled:=false;
end;
 
procedure TMainWindow.MenuCloseButtonClick(Sender: TObject);
begin
 
end;
 
procedure TMainWindow.MenuOpenButtonClick(Sender: TObject);
begin
 
end;
 
procedure TMainWindow.SettingsButtonClick(Sender: TObject);
begin{
  SettingsFrame1.BringToFront;
  StartButton.Hide;
  StartText.Hide;
  SettingsButton.Hide;
  SettingsText.Hide;
  SettingsFrame1.Visible:=true;
  SettingsFrame1.SendToBack;
  MainTitle.Hide;
  MainTitle.Show;
  MainTitleSettings.Visible:=true;
  CloseSettingsButton.Visible:=true;}
end;
 
procedure TMainWindow.SettingsTextClick(Sender: TObject);
begin{
  SettingsFrame1.BringToFront;
  StartButton.Hide;
  StartText.Hide;
  SettingsButton.Hide;
  SettingsText.Hide;
  SettingsFrame1.Visible:=true;
  MainTitle.BringToFront;
  MainTitleSettings.Visible:=true;
  CloseSettingsButton.Visible:=true;}
end;
 
procedure TMainWindow.StartButtonClick(Sender: TObject);
begin{
  MenuFrame1.BringToFront;
  StartButton.Hide;
  StartText.Hide;
  MenuFrame1.Visible:=true;
  MainTitle.BringToFront;}
end;
 
procedure TMainWindow.StartTextClick(Sender: TObject);
begin{
  MenuFrame1.BringToFront;
  StartButton.Hide;
  StartText.Hide;
  MenuFrame1.Visible:=true;
  MainTitle.BringToFront;}
end;
Добавлено через 4 минуты
Примечание здесь я пересобираю свой проект заново по возможности без ошибок, поэтому во многих процедурах код закомментирован - к форме ещё не подключены фреймы
0
Модератор
9261 / 6039 / 2379
Регистрация: 21.01.2014
Сообщений: 25,803
Записей в блоге: 3
21.09.2022, 07:25 4
Чистой воды предположения:
1. Попробуйте прописать модуль launchingcode (что бы это ни было) в раздел uses секции interface
2. Возможно, это уже сделано в инспекторе объектов, но... Создайте событие OnCreate формы и пропишите там
Pascal
1
AccountTimer.Enabled:=false;
1
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
21.09.2022, 07:55  [ТС] 5
D1973, launchingcode - это стартовая форма проекта. На ней особо ничего нет, но через неё идёт заполнение глобальных переменных из ini файлов, а также закрытие любой другой формы проекта приводит к её закрытию, т.е. к закрытию всей формы в целом. И первое решение не помогло... буду проверять второе
Цитата Сообщение от D1973 Посмотреть сообщение
Создайте событие OnCreate формы и пропишите там
А в которой именно форме нужно создавать/изменять OnCreate? В той же самой или в первой(если вдруг таймер глобален)?

P.S. В любом случае большое спасибо!

Добавлено через 9 минут
Второе решение тоже не помогло, вкладка так и не образуется..
Хуже всего то, что программа продолжает компилироваться и вообще ничего не говорит, с виду всё работает, мне кажется он просто перестал прогружать что-то из wincontrol
0
Модератор
9261 / 6039 / 2379
Регистрация: 21.01.2014
Сообщений: 25,803
Записей в блоге: 3
21.09.2022, 09:00 6
Цитата Сообщение от aprilpotter912 Посмотреть сообщение
launchingcode - это стартовая форма проекта
Стоп. Вот с этого момента поподробнее. Кажется, уже ясность наступает, но для точного диагноза скажите, какая форма является главной формой проекта? Посмотреть это можно так: Главное меню "Проект" =>> Посмотреть исходный код проекта.
Та форма, которая является первой в списке автосоздаваемых форм (Application.CreateForm(...)) и есть главная форма проекта.
И с вероятностью 147% у Вас главной является форма из модуля launchingcode. Отсюда и такие симптомы: после скрытия главной формы дочерние формы не отсвечивают на панели задач.
1
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
21.09.2022, 12:01  [ТС] 7
Интересное предположение) да, главная форма - та, что прикреплена к launchingcode. Только... вкладка приложения раньше тоже создавалась, и не исчезала
Мне кажется, это работает немножко не так
Ошибка Position Range Overflow в Лазарусе

Например, здесь Яндекс открыт, это видно по вкладке, на нём находится фокус. Лазарус открыт в фоновом режиме, фокуса нет, но окно не скрыто. А блокнот был скрыт, его основная форма не видна, но вкладка есть. Но про главную форму вы угадали)
0
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
21.09.2022, 12:08  [ТС] 8
D1973, кстати, ошибка возникла снова, выделил wincontrol.inc на строке 4355

Код там:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if PosChanged then
  begin
    with MoveMsg do
    begin
      Msg:= LM_MOVE;
      MoveType:= 1;
      if (FLeft < Low(Smallint)) or (FLeft > High(Smallint))
      or (FTop  < Low(Smallint)) or (FTop  > High(Smallint)) then
        raise Exception.CreateFmt('Position range overflow in %s.SendMoveSizeMessages:'
                                 +' Left=%d, Top=%d.', [Name, FLeft, FTop]);
      XPos := FLeft;
      YPos := FTop;
      {$IFDEF CHECK_POSITION}
      if CheckPosition(Self) then
      DebugLn(' [TControl.SendMoveSizeMessages] ',Name,':',ClassName,' MoveMsg XPos=',Dbgs(XPos),' YPos=',Dbgs(YPos));
      {$ENDIF}
    end;
    WindowProc(TLMessage(MoveMsg));
  end;
end;
Также удалось поймать и само окно:
Ошибка Position Range Overflow в Лазарусе

У меня появилось предположение... А что, если причина ошибки - то, что у меня объекты уезжают далеко за пределы формы? По сути, у них даже ограничителя нет. Вы не знаете, в каком типе сохраняется позиция? Это вроде не integer
0
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
21.09.2022, 12:12  [ТС] 9
Просто Top:=-32772 немного пугает
По сути, программа не должна докатываться до этого положения, но теперь меня терзают смутные сомнения...
0
Модератор
3629 / 2150 / 759
Регистрация: 15.11.2015
Сообщений: 8,631
21.09.2022, 12:35 10
Лучший ответ Сообщение было отмечено aprilpotter912 как решение

Решение

Цитата Сообщение от aprilpotter912 Посмотреть сообщение
А что, если причина ошибки - то, что у меня объекты уезжают далеко за пределы формы?
Не "а что", а именно так и есть. Вы же сами привели код проверки, если значение меньше наименьшего для smallint (-32768), то выкидывает исключение.
1
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
21.09.2022, 12:51  [ТС] 11
Ммм, понятно. Не пойму только одного, почему ошибка выдаётся не в ходе выполнения программы, а при компиляции? При установленном Timer.Interval:=15, программа должна работать без ошибок ещё около 35 секунд
И при чём здесь вкладка и customform
0
Модератор
3629 / 2150 / 759
Регистрация: 15.11.2015
Сообщений: 8,631
21.09.2022, 13:18 12
Цитата Сообщение от aprilpotter912 Посмотреть сообщение
почему ошибка выдаётся не в ходе выполнения программы, а при компиляции?
Был бы прикреплён проект - посмотрел бы, а так - не знаю.
0
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
21.09.2022, 18:54  [ТС] 13
AzAtom а что именно прикрепить? Файл проекта или архив или что-то ещё?
0
Модератор
3629 / 2150 / 759
Регистрация: 15.11.2015
Сообщений: 8,631
21.09.2022, 19:19 14
aprilpotter912, заархивировать папку с проектом и прикрепить. Проект состоит из нескольких основных файлов:
*.lpi
*.lpr
*.lps

так же по паре файлов для каждой формы:
*.lfm
*.pas

Если иконка не стандартная, то её тоже можно добавить в архив.

Добавлено через 2 минуты
Ну или можно просто удалить скомпилированный исполняемый файл *.exe и заархивировать всю папку с проектом.
0
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
21.09.2022, 20:48  [ТС] 15
Прикрепляю..
проект.rar
Правда он почти пустой, только компоненты стоят)
0
Модератор
3629 / 2150 / 759
Регистрация: 15.11.2015
Сообщений: 8,631
21.09.2022, 21:06 16
aprilpotter912, ничего тут не вылетает. Выбрал страну, вписал какой-то код и дальше остановка на окне выбора "Start"/"Settings".
0
0 / 0 / 0
Регистрация: 09.08.2022
Сообщений: 69
21.09.2022, 21:12  [ТС] 17
AzAtom, странно/
Ошибок не выдаёт?

P.S. Язык, код и фреймы ещё не подключены, заново собираю форму со всей архитектурой в правильном порядке
В других проектах работают язык и все кнопки между фреймами
0
21.09.2022, 21:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2022, 21:12
Помогаю со студенческими работами здесь

При вызове объекта Range, VBA самостоятельно меняет Range на rAnge
Всем доброго дня, у меня такой вопрос. По незнанию создал функцию rAnge(), теперь при вызове...

Exception class overflow with message floating point overflow
Прощу вашего совета в строке кода RxSpinEdit-&gt;Value=Step *...

Overflow-x работает как overflow для всех осей
Почему, задав overflow-x: auto или hidden; для отдельного блока всё что вызодит по оси &quot;y&quot; тоже...

pow: OVERFLOW error...Floating Point: Overflow
Помогите разобраться почему в программе выводятся эти ошибки после ввода значений...

Overflow-x:auto и overflow-y:visible не работают вместе
Есть блок который должен быть overflow-x: auto; overflow-y: visible. Но вместе эти 2 свойства не...

Ошибка Overflow
Public Sub pro1() Dim m As Long, k As Long, ss As Long, ss1 As Long, max As Long m =...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru