Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.10;
Скачать: CL | DM;

Вниз

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

Зачем так?
Видимо что-то уделяешь&#133 Вот может там и грабли?


 
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 проверяет на нил&#133


> наверное так?

Что непонятно?
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]

> За синтакс спасибо для меня пока всё в этом мире сложно

Заметно, даже код с синтаксисом путаешь&#133


 
timekiller ©   (2008-01-16 15:02) [20]

ну уговорил, объясни на своем языке



Страницы: 1 вся ветка

Текущий архив: 2008.02.10;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.265 c
15-1199810913
antonn
2008-01-08 19:48
2008.02.10
Билл Гейтс покидает Microsoft


2-1200743036
Squirrel
2008-01-19 14:43
2008.02.10
использование дерева


15-1199742231
Bloodman
2008-01-08 00:43
2008.02.10
Задачка по ТеорВер у


2-1200224535
Lotse
2008-01-13 14:42
2008.02.10
Вопрос о работе программы вне среды Delphi


2-1200559885
owa
2008-01-17 11:51
2008.02.10
Как записать данные в реестр в формате REG_BINARY