Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странная ошибка (а может быть и нет) [D7, WinXP]


Страницы:   1 2

tazik ©   (2005-01-26 23:39:00) 

Здравствуйте!

Это опять я. У меня есть такая штука. Перелистываю Tabsheet'ы нахожу в них ScrollBox'ы, там ToolBox'ы, а на них ToolButton'ы с дописанными некоторыми свойствами (param типа string). Но на строчке кода (*) выдает ошибку 'Ivalid class typecast'.
Помогите найти её:

var Name,Caption,Param1,Param2: string;
begin
for i := 0 to PageControl.PageCount - 1 do
begin
   PageControl.ActivePageIndex := i;
   for A := 0 to (PageControl.Pages[I].Controls[0] as TScrollBox).ControlCount - 1 do
   begin
           for C := 0 to ((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).ControlCount - 1 do
           begin
           (*) name := (((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).Controls[C] as TToolButton).Name;
               Caption := (((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).Controls[C] as TToolButton).Caption;
               Param1 := (((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).Controls[C] as TToolButton).Param1;
               Param2 := (((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).Controls[C] as TToolButton).Param2;
           end;
   end;
end;


Kerk   (2005-01-27 00:32:00) [21]

Ну почему вы не используете with ???


KilkennyCat   (2005-01-27 00:31:00) [22]

причем ничего с ними не делать?


KilkennyCat   (2005-01-27 00:29:00) [23]

требуется возвращать параметры последней  BTN_N последнего тулбара TOOL_BAR2?


tazik   (2005-01-27 00:24:00) [24]


type TMyBtn = class(TToolButton)
public
   Param1,
   Param2: string;
end;

procedure ReedInfo();
var Name, Caption,
   Param1, Param2: string;
   I, C, a: Integer;
begin
for i := 0 to PageControl.PageCount - 1 do
begin
  PageControl.ActivePageIndex := i;
  for A := 0 to (PageControl.Pages[I].Controls[0] as TScrollBox).ControlCount - 1 do
  begin
          for C := 0 to ((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).ControlCount - 1 do
          begin
          (*) name := (((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).Controls[C] as TMyBtn).Name;
              Caption := (((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).Controls[C] as TMyBtn).Caption;
              Param1 := (((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).Controls[C] as TMyBtn).Param1;
              Param2 := (((PageControl.Pages[i].Controls[0] as TScrollBox).Controls[A] as TToolBar).Controls[C] as TMyBtn).Param2;
          end;
  end;
end;

Вот структура расположения компонентов

<TAB_SHEET1>
          +
          |
          +<SCROLL_BOX>+
                       |
                       +<TOOL_BAR1>+
                                  +<BTN0>
                                  +<BTN1>
                                  +...
                                  +<BTN_N>
                       +
                       |
                       +<TOOL_BAR2>+
                                  +<BTN0>
                                  +<BTN1>
                                  +...
                                  +<BTN_N>
<TAB_SHEET2>
          +
          |
          +<SCROLL_BOX>+
                       |
                       +<TOOL_BAR1>+
                                  +<BTN0>
                                  +<BTN1>
                                  +...
                                  +<BTN_N>
                       +
                       |
                       +<TOOL_BAR2>+
                                  +<BTN0>
                                  +<BTN1>
                                  +...
                                  +<BTN_N>                              


KilkennyCat   (2005-01-27 00:14:00) [25]


> Я вам передставил полную фу-ю. Со всеми алгоритмами.


неправда.

в том виде, в каком представили, если добавить А В С  и понять, что такое TToolButton.Param1(2), то ошибки не будет, хоть выглядит и ужасно.


tazik   (2005-01-27 00:07:00) [26]

Я вам передставил полную фу-ю. Со всеми алгоритмами. Меня мучает вопрос почему же возникает 'Invalid class typecast'!!!! Ведь я смотрю на стринговые значения с одной и другой стороны опредатора присваявания!

p.s. вы извините, если я буду ошибаться при написании слов. Пиво... пиво... :)


KilkennyCat   (2005-01-27 00:00:00) [27]

Это понятно. значит, код неполный, впринципе, это и так ясно, учитывая, что в данной полноте параметры получают только последнее значение...

Но, может быть, все-таки стоит пересмотреть алгоритм?


tazik   (2005-01-26 23:58:00) [28]

Дело в том, что я собираю инфу о кнопках, которых находятся на ToolBaraх, которые, в свою очередь назодятся в ScrollBoxах, а те находятся на активных TabSheetах.


KilkennyCat   (2005-01-26 23:55:00) [29]


> tazik ©   (26.01.05 23:52) [4]


это я понял. То есть, надо смотреть именно на активном? ну тогда это либо не весь код, либо я не понимаю, почему можно смотреть только на активном.


tazik   (2005-01-26 23:52:00) [30]

> to KilkennyCat [2]

А это я устанавливаю активную страницу в PageControl. Ведь я смотрю ScrollBox на активном TabSheet.


KilkennyCat   (2005-01-26 23:49:00) [31]

не... пока TTabSheet вместо всей бодяги не применят, думать не смогу...


KilkennyCat   (2005-01-26 23:47:00) [32]


> for i := 0 to PageControl.PageCount - 1 do
> begin
>    PageControl.ActivePageIndex := i;
>    

а это зачем так?


KilkennyCat   (2005-01-26 23:44:00) [33]

что-то тут не то... сейчас попробую понять. если не отвечу - не поминайте лихом, спекся, значит...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо