Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
ВнизFindComponent Найти похожие ветки
← →
timekiller © (2008-01-16 11:50) [0]Попытка найти ширину у вложенного ва фрейм компонента
Компилируется, а прога постоянно впаривает ошибку доступа к памяти .. че это? нахрена вот? зачем не работает?for cmpn:=ComponentCount-1 downto 0 do
if (Components[cmpn].Tag=22222222) and
(Components[cmpn] is TFrame) then
currPos:=TControl(Components[cmpn].FindComponent("PA_"+TComboBox(Sender).Name)).Height;
← →
Kolan © (2008-01-16 11:54) [1]> for cmpn:=ComponentCount-1 downto 0 do
Зачем так?
Видимо что-то уделяешь… Вот может там и грабли?
← →
timekiller © (2008-01-16 11:55) [2]не не удаляю, вот привычка после удаления кшно осталась с этим downto )) копирую незамечая уже
← →
Kolan © (2008-01-16 11:59) [3]Ну и на какой строке ошибка, ты отладчиком прошел?
← →
Palladin © (2008-01-16 12:05) [4]
> Components[cmpn].FindComponent("PA_"+TComboBox(Sender).Name)).
а ты уверен что он найден?
← →
timekiller © (2008-01-16 12:09) [5]на этой
currPos:=TControl(Components[cmpn].FindComponent("PA_"+TComboBox(Sender).Name)).Height;
курент позишн равна ширине контрола по имени "PA_"+TComboBox(работаем с ним).Name) который находится во пространстве Components[cmpn]
найден он или нет - смотрит и решает возвращать имя/не возвращать FindComponent? и насчет найден не беспокоимся по закону borland"a прально ? :)
← →
Плохиш © (2008-01-16 12:10) [6]
> currPos:=TControl(Components[cmpn].FindComponent("PA_"+TComboBox(Sender).
> Name)).Height;
Ну нет искомого компонента, следующий вопрос...
← →
Palladin © (2008-01-16 12:11) [7]
> смотрит и решает возвращать имя/не возвращать FindComponent?
> и насчет найден не беспокоимся по закону borland"a прально
> ? :)
при чем тут Borland? он за тебя результат на nil проверять будет чтоли?
← →
Плохиш © (2008-01-16 12:11) [8]
> найден он или нет - смотрит и решает возвращать имя/не возвращать
> FindComponent? и насчет найден не беспокоимся по закону
> borland"a прально ? :)
А теперь по-медленней и по-русски, что там у вас ещё за законы...
← →
timekiller © (2008-01-16 12:15) [9]ну допустим
TControl(FindComponent("PA_"+TComboBox(Sender).Name)).Free
прекрасно работает, слова nil там нету - видимо функция изобретена изначально правильно и создана для проверок на наличие компонента, а не чтобы проверяли чтото на nill вместо функции которая сама проверяет? наверное так?
← →
Palladin © (2008-01-16 12:16) [10]голова дум дум, метод Free проверяет перед вызовом деструктора self на nil
в отличии от тебя
← →
timekiller © (2008-01-16 12:17) [11]Тогда подскажите синтаксис ..
← →
Palladin © (2008-01-16 12:19) [12]ну песец синтаксис сложнейший
var
c:TControl;
if (Components[cmpn].Tag=22222222) and
(Components[cmpn] is TFrame) then
Begin
c:=Components[cmpn].FindComponent("PA_"+TComboBox(Sender).Name) as TControl;
If c=Nil then raise exception.create("а нету");
currPos:=c.Height;
end;
← →
timekiller © (2008-01-16 12:20) [13]ОФТОП
Просто мне странно .. почему тогда например в StringReplace не проверяем на отсутствие строки и подстроки чтобы не было критического случая, (гы) а сразу ищем ее и заменяем? или В функции FindComponent чтото не предусмотрели товарищи создатели?
← →
Kolan © (2008-01-16 12:20) [14]> прекрасно работает, слова nil там нету
Ну дык Free проверяет на нил…
> наверное так?
Что непонятно?
FindComponent возвращает объект если найден или nil.
Ты же предполагаешь, что FindComponent всегда вернет объект — тут твоя ошибка.
Результат работы FindComponent надо проверить.
то есть:MyComponent := Components[cmpn].FindComponent("PA_"+TComboBox(Sender).Name);
if Assigned(MyComponent) then
currPos:= TControl(MyComponent).Height
Кроме того надо проверять что найденый объект действительноTControl
, испльзуйis
← →
Palladin © (2008-01-16 12:22) [15]это у тебя в голове не предусмотрена разница между работой со строками и обращением к свойству которого нет... надо эту разницу предусмотреть прочитав соответствующую литературу
← →
Сергей М. © (2008-01-16 12:25) [16]
> timekiller © (16.01.08 12:20) [13]
А как можно умудриться передать параметром несуществующую строку ?
← →
Palladin © (2008-01-16 12:26) [17]ты просто реально не понимаешь что происходит...
при работе со строкой функция сама бежит по строке и если найдет - заменяет и абсолютно монопенисуально есть там необходимая подстрока или нет, при работе с объектом класса ты обращаешься к свойству, происходит обращение к какой-то, предполагаемо выделенной заранее, области памяти под объект, следовательно обращаясь к свойству ты должен быть уверен, что объект существует и подкрепляешь свою уверенность проверкой на nil
← →
timekiller © (2008-01-16 12:29) [18]Все, вроде догоняю
FindComponent бежит, а параметр не тот прибегает вощм = )))))) надо еще и по контролам FindComponent"ить
терь я понял?
За синтакс спасибо, для меня пока всё в этом мире сложно :) а что делать
← →
Kolan © (2008-01-16 14:07) [19]> За синтакс спасибо для меня пока всё в этом мире сложно
Заметно, даже код с синтаксисом путаешь…
← →
timekiller © (2008-01-16 15:02) [20]ну уговорил, объясни на своем языке
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c