Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Изменение свойства Visible для компонетов


Автор: Urvin 1.2.2008, 20:38
Суть: есть несколько компонентов-контейнеров Panel, которые время от времени пропадают и исчезают с экрана
В контейнерах есть такие элементы управления, такие как кнопки, поля редактирования

Пусть: в Panel1 находится Button1. Мне хотелось бы заранее "спрятать" эту кнопку, причем Panel1 в текущем состоянии не видна.

Сейчас я ставлю Button1.Visible:=False. Позже задаю Panel1.Visible=True и... вижу эту самую кнопку!

Как можно справиться с этой проблемой?

Автор: Exai1e 1.2.2008, 21:06
воть
Код

implementation

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
begin
  Panel1.Visible := true;
end;

//естесно бутон 1 невидимый т.к. он пренадлежит форме а не панели
procedure TForm2.FormCreate(Sender: TObject);
begin
  Button1.Parent := Form2;
end;

end.


и тогда кнопка не зависит от панели

Автор: Urvin 1.2.2008, 21:23
Exai1e, Это, как мне кажется, совсем не то. Кнопка у меня должна периодически пропадать, и периодически проявляться именно на панели.
Потом, графическая часть интерфейса дельфей и так практически слаба, менять постоянно родителей - много мороки.
А в зависимости от положения панели набор из 30 контролов тоже не подарок =(

решаем в целом такую проблему
Код

// Button1 находится в panel1

// Сначала жмем эту кнопку
procedure TForm1.Button2Click(Sender: TObject);
begin
  panel1.Visible:=False;
  Button1.Visible:=False;
end;

// А потом эту
procedure TForm1.Button3Click(Sender: TObject);
begin
  Panel1.Visible:=True;
  // И вот тут-то и оказывается кнопка видна. лажа.
end;

Автор: Exai1e 1.2.2008, 21:52
Цитата

Потом, графическая часть интерфейса дельфей и так практически слаба 
 smile  smile  smile  ни - ни ! просто надо чуток подумать ;)
Urvin
Составь алгоритм чего ты хочеш получить в конце на бумаге, ручкой там или карандашом и думай как решить ту или иную проблему, разложи все по пунктам, и тут придет решение той или иной проблемы, ,сам это понял smile

ЗЫ либо изложи более подробно проблему, т.е. что должно по сути из себя представлять твое творение, не в подробностях а именно то что связанно с этими непонятками

Автор: Urvin 1.2.2008, 22:03
Да мне ничего, короме того, как отключить показ кнопки по приведенному выше коду пока не надо.

Я, конечно, могу сначала показать Panel1, а потом (тут же) указать Button1.Visible:=False, но кнопка успеет прорисоваться и испортит впечатление о приложении.

Я не понимаю, почему если я явно указал кнопке невидимость, то она появляется вне зависимости от мего желания

Автор: THandle 1.2.2008, 22:11
Цитата(Urvin @  1.2.2008,  21:23 Найти цитируемый пост)
// И вот тут-то и оказывается кнопка видна. лажа.

Все у меня нормально. Кнопка не видна. Уверен что больше ни где не стаишь ей Visible в true?

Автор: Exai1e 1.2.2008, 22:12
Цитата

Пусть: в Panel1 находится Button1. Мне хотелось бы заранее "спрятать" эту кнопку, причем Panel1 в текущем состоянии не видна.

Сейчас я ставлю Button1.Visible:=False. Позже задаю Panel1.Visible=True и... вижу эту самую кнопку!



visible : button1, panel1 := false; 
на старте


потом 
Код

  Panel1.Visible:=True;


PS Кнопка не най находиться, появление кнопки заменить не успеваю... глянуть бы весь код че к чему  ты пытаешся добится

либо попробуй если уж так все замароченно, хотя херовый вариант
Код

Application.ProcessMessages;
Sleep(10);


перед появлением кнопки.

Автор: Urvin 2.2.2008, 10:27
Проблема решена путем пропатчивания версии дельфей

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)