Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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

Зачем так?
Видимо что-то уделяешь&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.044 c
3-1190981424
Tonich
2007-09-28 16:10
2008.02.10
Коннект к базе несколькими приложениями одновременно


3-1190824355
Виталий_____
2007-09-26 20:32
2008.02.10
DBGrid и добавление записи


15-1199960045
Kold
2008-01-10 13:14
2008.02.10
второй монитор


2-1200299717
Слава Троцак
2008-01-14 11:35
2008.02.10
Кнопка выбора пути к базе данных


11-1183728247
Stan
2007-07-06 17:24
2008.02.10
Баг - Undeclared identifier: @@chk_other_KEYMSGS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский