Вверх ↑
Этот топик читают: Гость
Ответов: 1161
Рейтинг: 160
#1: 2014-10-07 22:43:29 ЛС | профиль | цитата
Добрый вечер всем!
Неприятная вещь обнаружилась, работая с компонентом PageControl - при удалении вкладки возможно появление Runtime error.
Вот схема:
code_34399.txt
Порядок действий:
1. Нажимаем дважды на кнопку Add (создаем две вкладки);
2. Выбираем вторую вкладку;
3. Нажимаем Delete и получаем Runtime error.

В чем может быть дело и как это, собственно исправить? Пока докопался до того, что вероятнее всего чудит метод TC_Delete в KOL'е.
карма: 0

0
файлы: 1code_34399.txt [1.2KB] [431]
vip
#1.1контекстная реклама от партнеров
Ответов: 16884
Рейтинг: 1239
#2: 2014-10-07 22:47:23 ЛС | профиль | цитата
LainX, ищи у себя.Всё работает нормально без никаких Runtime error
Kol от Galkov-а, компилятор Delphi, win 7.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1328
Рейтинг: 69
#3: 2014-10-07 23:06:30 ЛС | профиль | цитата
Tad писал(а):
LainX, ищи у себя.Всё работает нормально без никаких Runtime error
Kol от Galkov-а, компилятор Delphi, win 7.


Аналогично
карма: 2

0
Ответов: 2202
Рейтинг: 675
#4: 2014-10-07 23:18:02 ЛС | профиль | цитата
LainX писал(а):
получаем Runtime error.
Подтверждаю. XP SP3 как на FPC так и на Del, ревизия: 1855
карма: 11

0
Ответов: 704
Рейтинг: 44
#5: 2014-10-08 07:36:18 ЛС | профиль | цитата
Windows 7 х64 Максимальная.
карма: 0

0
Разработчик
Ответов: 26068
Рейтинг: 2121
#6: 2014-10-08 10:39:30 ЛС | профиль | цитата
ЕМНИП, то этот вопрос уже поднимался. Лечится предварительной выборкой 0-й страницы перед удалением любой другой

-- тут была битая схема --
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#7: 2014-10-08 15:48:35 ЛС | профиль | цитата
Сравните, кому не лень, с моими файлами. Почему-то у меня удаляет спокойно и без предварительной выборки 0-й страницы.
Проверял с разными kol (Kladov, Galkov) и компиляторами Delphi 4, Delphi 7, FPC в разных комбинациях.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1testpagecontrol.rar [2.3KB] [248]
Ответов: 9906
Рейтинг: 351
#8: 2014-10-08 16:08:39 ЛС | профиль | цитата
Tad писал(а):
Сравните, кому не лень, с моими файлами

У тебя в INI непонятный какой-то Color...
Остальное - совпадает. В т.ч., и результат: "удаляет спокойно и без предварительной выборки 0-й страницы."
------------ Дoбавленo в 16.08:
nesco писал(а):
этот вопрос уже поднимался

Вроде бы - ДА.
Но чем все кончилось - убей, не помню...
карма: 9

1
Голосовали:Tad
Ответов: 1161
Рейтинг: 160
#9: 2014-10-08 18:40:57 ЛС | профиль | цитата
nesco писал(а):
ЕМНИП, то этот вопрос уже поднимался. Лечится предварительной выборкой 0-й страницы перед удалением любой другой

К сожалению такой вариант не избавляет от ошибки: добавляем три вкладки, удаляем третью и выбираем вторую - снова runtime error.
code_34407.txt
карма: 0

0
файлы: 1code_34407.txt [1.5KB] [354]
Разработчик
Ответов: 26068
Рейтинг: 2121
#10: 2014-10-08 19:20:31 ЛС | профиль | цитата
Попробуй еще так

Add(PageControl,1944760,546,189)
{
Align=5
Childrens=#4:page|
Selected="base"
AutoCreate=1
}
BEGIN_SDK
Add(EditPolyMulti,16645054,21,21)
{
WorkCount=#5:##add|8:##select|8:##delete|
Point(##add)
Point(##select)
Point(##delete)
}
Add(PagePanel,8890210,119,105)
{
Left=35
Top=105
Align=5
}
END_SDK
BEGIN_SDK
Add(EditPolyMulti,816851,21,21)
{
WorkCount=#5:##add|8:##select|8:##delete|
Point(##add)
Point(##select)
Point(##delete)
}
Add(PagePanel,6635910,35,105)
{
Left=35
Top=105
Caption="Page"
}
END_SDK
Add(DoData,16037209,469,140)
{
Data=String(page)
link(onEventData,1944760:##add,[(536,146)(536,195)])
}
Add(DoData,11476660,469,245)
{
Data=Integer(1)
link(onEventData,1944760:##delete,[(508,251)(508,209)])
}
Add(ChildPanel,12776357,287,238)
{
link(onEvent1,16037209:doData,[(326,244)(326,146)])
link(onEvent2,4160057:doTimer,[])
}
BEGIN_SDK
Add(EditMulti,7488395,21,21)
{
EventCount=2
}
Add(Panel,165575,35,105)
{
Left=35
Top=105
Height=30
Align=2
BorderWidth=5
BevelWidth=0
}
Add(Button,15193427,126,49)
{
Left=165
Top=280
Align=1
Caption="Add"
link(onClick,7488395:onEvent1,[(240,55)(240,27)])
}
Add(Button,12312653,126,91)
{
Left=165
Top=280
Align=1
Caption="Delete"
link(onClick,7488395:onEvent2,[(240,97)(240,34)])
}
END_SDK
Add(Timer,4160057,413,245)
{
Interval=0
Enable=1
AutoStop=1
link(onTimer,11476660:doData,[])
}


карма: 22

0
Ответов: 1161
Рейтинг: 160
#11: 2014-10-09 00:47:39 ЛС | профиль | цитата
nesco, если сменить индекс удаляемой страницы с 1 на 2, то ошибка все равно появляется.
------------ Дoбавленo в 00.47:
Собственно, я нашел решение этой проблемы (правда с помощью костыля). Проблема в PagePanel, а точнее в его событии onChange. Если его переопределить, то никаких ошибок не выдает (по крайней мере у меня). Возможно у Tad'а не было этого события, и поэтому все работало нормально.
Add(MainForm,2953706,476,112)
{
}
Add(PageControl,1944760,378,112)
{
Align=5
Childrens=#4:page|
Selected="page"
AutoCreate=1
link(onPControl,15600409:doSetOnChange,[])
}
BEGIN_SDK
Add(EditPolyMulti,16645054,21,21)
{
WorkCount=#5:##add|8:##delete|
EventCount=#10:onPControl|
Point(##add)
Point(##delete)
}
Add(PagePanel,8890210,161,70)
{
Left=35
Top=105
Align=5
}
END_SDK
BEGIN_SDK
Add(EditPolyMulti,816851,21,21)
{
WorkCount=#5:##add|8:##delete|
EventCount=#10:onPControl|
Point(##add)
Point(##delete)
link(##add,12991115:doData,[(77,27)(77,153)])
}
Add(PagePanel,6635910,133,91)
{
Left=35
Top=105
Caption="Page"
Point(PHandle)
}
Add(DoData,12991115,133,147)
{
link(onEventData,816851:onPControl,[(243,153)(243,27)])
link(Data,6635910:PHandle,[])
}
END_SDK
Add(DoData,16037209,280,112)
{
Data=String(page)
link(onEventData,1944760:##add,[])
}
Add(DoData,11476660,329,119)
{
Data=Integer(1)
link(onEventData,1944760:##delete,[])
}
Add(ChildPanel,12776357,231,112)
{
link(onEvent1,16037209:doData,[])
link(onEvent2,11476660:doData,[])
}
BEGIN_SDK
Add(EditMulti,7488395,21,21)
{
EventCount=2
}
Add(Panel,165575,35,105)
{
Left=35
Top=105
Height=30
Align=2
BorderWidth=5
BevelWidth=0
}
Add(Button,15193427,126,49)
{
Left=165
Top=280
Align=1
Caption="Add"
link(onClick,7488395:onEvent1,[(240,55)(240,27)])
}
Add(Button,12312653,126,91)
{
Left=165
Top=280
Align=1
Caption="Delete"
link(onClick,7488395:onEvent2,[(240,97)(240,34)])
}
END_SDK
Add(InlineCode,15600409,427,112)
{
WorkPoints=#13:doSetOnChange|
EventPoints=#8:onChange|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|32:uses Windows, Kol, Share, Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|23: Control: PControl;|35: procedure _OnChange(Obj:PObj);|0:|9: public|23: onChange: THI_Event;|56: procedure doSetOnChange(var _Data:TData; Index:word);|7: end;|3: |14:implementation|0:|36:procedure THiAsmClass.doSetOnChange;|16:var i: integer; |5:begin|50: Control := PControl(ToInteger(_Data)).Parent;|32: if Control = nil then exit;|41: Control.OnSelChange := _OnChange; |4:end;|0:|32:procedure THiAsmClass._OnChange;|5:begin|43: _hi_OnEvent(onChange, Control.CurIndex);|4:end;|0:|4:end.|
link(onChange,2953706:doCaption,[])
}


карма: 0

0
Ответов: 16884
Рейтинг: 1239
#12: 2014-10-09 07:49:37 ЛС | профиль | цитата
Событие по Add
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1lainx_1.png [38.6KB] [492]
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)