Конференция "Компоненты" » Если Owner не форма, то экземпляр не видно в окне «structure»
 
  • Kolan © (16.04.07 13:08) [20]
    > inherited Create(AOwner);
    > ControlStyle := ControlStyle + [csAcceptsControls]

    Да помогло. Но не все еще в порядке.

    Вот код PreviousPage:

    function TCustomWizzard.PreviousPage: TCustomWizzardPage;
    begin
     FCurrentPageIndex := FCurrentPageIndex — 1;
     if FCurrentPageIndex < 0 then
       FCurrentPageIndex := FPages.Count &#151; 1;
     ShowPage(FCurrentPageIndex);
     Result := FPages[FCurrentPageIndex];
    end;



    procedure TCustomWizzard.ShowPage(Index: Integer);
    var
     I: Integer;
    begin
     for I := 0 to FPages.Count &#151; 1 do
       if I = Index then
         FPages[I].Visible := True
       else
         FPages[I].Visible := False;
    end;



    Но оно не работает  так как я хочу. Те допустим есть 3 страницы.На второй кнопка. В окне «структура» она действительно на второй странице.
    Но когда я начинаю щелкать NextPage, то кнопка идна всегда. Те FPages[I].Visible несрабатывает что-ли…
    Или наоборот выбрана вкладка с кнопками, а их невидно…
    И все равно они какие-то прозрачные — странно.

    Скриншот:
    http://ksoftware.narod.ru/Struct.JPG
  • DimaBr © (16.04.07 13:24) [21]
    FPages[I].Visible прекрасно работает (но не в дизайнере) сделайте активной панели BringToFront
  • Kolan © (16.04.07 13:29) [22]
    Сделал, но не помогло.
    И если просто правой кнопкой нажать, то пункты BringToFront(стандартные) «звдизэйблены».
  • DimaBr © (16.04.07 13:36) [23]
    Не, вы не поняли.
    У главного компонента должно быть свойтсво - ActivePage, при установке которого становится активной выбранная панель.

    procedure TCustomWizzard.SetActivePage(APage: TCustomWizzardPages);
    begin
     if APage <> nil then
      if APage.Wizzard <> self then Exit;
     fActivePage := APage;    
     if fActivaPage <> nil then fActivaPage.BringToFront;
    end;


  • Kolan © (16.04.07 13:44) [24]
    Я сделал так. Смысл ессно разный, но работать имхо должно было и так…

    procedure TCustomWizzard.ShowPage(Index: Integer);
    var
     I: Integer;
    begin
     for I := 0 to FPages.Count &#151; 1 do
       if I = Index then
       begin
         if csDesigning in ComponentState then
           BringToFront
         else
           FPages[I].Visible := True
       end
       else
         FPages[I].Visible := False;
    end;



    У главного компонента должно быть свойтсво — ActivePage

    шас попробую…
  • DimaBr © (16.04.07 13:49) [25]

    if csDesigning in ComponentState then
         FPages[I].BringToFront
        else
          FPages[I].Visible := True

  • Kolan © (16.04.07 13:52) [26]
    Ура — работает…
  • DimaBr © (16.04.07 14:16) [27]
    Поздравляю !!!
  • Kolan © (16.04.07 14:20) [28]
    Блин криво получилось, ппц :). Ну хоть что-то — первый раз такое делаю :)
  • Kolan © (16.04.07 14:25) [29]
    Так, продалжаем разговор.
    В дизайнере еще рак-то рабоатет. А вот при запуске приложения получается что в FPage 0 станиц. Хотя в дизайнере они есть(NexPage работает нормально)… В чем может быть дело? Может их нао как-то сохранять…
  • DimaBr © (16.04.07 14:29) [30]

    > В чем может быть дело?

    Мне нравятся ваши вопросы. Дело может быть в чём угодно, я ж не провидец или телепат.
    Прежде всего вы должны добится чтобы при двойном Alt+F12 у вас небыло никаких ошибок, и всё было на своих местах.
    Скорее всего вы не разобрались с GetChildren.
  • Kolan © (16.04.07 14:30) [31]
    > Скорее всего вы не разобрались с GetChildren.

    Я даже незнаю что это :(


    > Alt+F12

    Это что за функция?
  • Kolan © (16.04.07 14:36) [32]
    > GetChildren

    Так его надо перекрыть? А как? Те что писать?
  • DimaBr © (16.04.07 14:50) [33]
    Alt+F12 - это комбинация клавиш на клавиатуре (Кнопочка ALT находится с боков от пробела - такая длинная клавиша, а F12 в конце верхнего ряда)

    Нажмите два раза это сочетание при выделенной форме. В первый раз форма перейдёт в режим текста, во второй раз обратно. Если всё останется на своих местах - вы Гений (обычно куча ошибок).
    В режиме такста ваш котнрол должен имет приблизительно такой вид

    object Wizard1: TCustomWizzard
       Left = 80
       Top = 24
       Width = 289
       Height = 193
       ActivePage = Page1
       object Page1: TCustomWizzardPage
           ........
       end
     end



    то есть страница находится внутри компонента
  • Kolan © (16.04.07 14:57) [34]
    > Alt+F12 — это комбинация клавиш на клавиатуре

    Что то нажимаю я эти «кнопочки» — вообще нихрена :) Мож в BDS другое сочетание?
  • {RASkov} (16.04.07 15:00) [35]
    > [34] Kolan ©   (16.04.07 14:57)

    Попробуй по форме правой кнопкой мыши>View as Text, затем в редакторе правой> View as Form....
  • Kolan © (16.04.07 15:09) [36]
    Угу, по виду тоже самое осталось, но стал ругаться так же как и ран тайме (List out of bounds 0). Те скорее всего в FPages ниче нет сейчас. Наверно как-то сохранять/загружать надо…, как?
  • DimaBr © (16.04.07 15:24) [37]
    Наверно так [2]
  • Kolan © (16.04.07 15:31) [38]
    > Наверно так [2]

    Так я делаю:
    procedure TWizzardEditor.ExecuteVerb(Index: Integer);
    var
     TempPage: TCustomWizzardPage;
    begin
     inherited;
     case Index of
       0:
       begin
         if Component is TWizzard then
         begin
           TempPage := Designer.CreateComponent(TWizzardPage, Component, 0,0,0,0) as TWizzardPage;
           TWizzardPage(TempPage).Wizzard := (Component as TWizzard);
           Designer.Modified;

         end;
       end;

  • Kolan © (16.04.07 15:34) [39]
    Но если я переключюсь текст/форма, то в дизайнере страницы есть, а вот FPages их нет…
 
Конференция "Компоненты" » Если Owner не форма, то экземпляр не видно в окне «structure»
Есть новые Нет новых   [134466   +3][b:0][p:0.002]