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

Вниз

Динамическое отображения TSpeedButton   Найти похожие ветки 

 
Valkyre ©   (2007-05-25 08:31) [0]

Пытаюсь создать аналог панели задач Windows для некоторых окон моего приложения. Делаю так:


procedure TcfmDesktop.imgFormListMouseEnter(Sender: TObject);
var I: Integer; B: TSpeedButton; Cur: TForm;
function _ex(const H: Integer): Boolean;
var K: Integer;
begin
 Result := False;
 for K := 0 to pWindowsBar.ComponentCount-1 do begin
   if pWindowsBar.Components[K].Tag=H then begin
     Result := True;
     Break;
   end;
 end;
end;
begin

 try
 for I := 0 to pWindowsBar.ComponentCount-1 do begin
   if pWindowsBar.Components[I] is TSpeedButton then
     pWindowsBar.Components[I].Free;
 end;
 except
   showmessage("ашибка тута");
 end;

 try
 for I := 0 to Screen.FormCount-1 do if Screen.Forms[I].Visible then begin
   Cur := Screen.Forms[I];
   if _ex(Cur.Handle) then Continue;
   
//   if Cur.FindComponent("sgList")<>nil then begin
     B := TSpeedButton.Create(nil);
     B.Caption := iifstr(Cur.Caption="", "[без заголовка]", Cur.Caption);
     B.Transparent := True; B.Width := Cur.Canvas.TextWidth(B.Caption)+2;
     if (B.Width>100) then B.Width := 100;
     B.Flat := _iif((Cur.Visible) and (Cur.Active), False, True);
     B.OnClick := btnActivateWindowClick;
     B.Tag := Cur.Handle;
     B.Align := alLeft;
     B.Parent := pWindowsBar;
//    end;
 end;
 except
   Showmessage("здеся");
 end;

 pWindowsBar.Show;
//  tmrWinPanel.Enabled := False;
end;


Почему-то все кнопки не уничтожаются перед заполнением, а дубликаты возникают при каждом всплытии панельки.

Подскажите, пожалуйста, как можно с этим бороться?


 
ANB ©   (2007-05-25 12:18) [1]


> pWindowsBar.Components

Коллекция не та. Посмотри отладчиком - входит ли туда вообще выполнение. Controls вроде как верно (проверять лень).


 
ЮЮ ©   (2007-05-25 12:21) [2]

for I := 0 to pWindowsBar.ComponentCount-1 do begin
  if pWindowsBar.Components[I] is TSpeedButton then
    pWindowsBar.Components[I].Free;
end;
except
  showmessage("ашибка тута");
 ашибка тута НЕИЗБЕЖНА и часть компонентов не удалится из-за неё
end;


надо

for I := pWindowsBar.ComponentCount - 1 downto 0 do begin



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

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

Наверх




Память: 0.47 MB
Время: 0.016 c
2-1183839150
Sonic90
2007-07-08 00:12
2007.08.05
Drag&amp;Drop


2-1183875954
>>DEATH<<
2007-07-08 10:25
2007.08.05
Загрузка картинок из DLL


15-1183730808
oldman
2007-07-06 18:06
2007.08.05
Купил дочке карандаши...


3-1177420938
КрЫска
2007-04-24 17:22
2007.08.05
Какую технологию лучше использовать для доступа к БД Oracle


2-1184076465
Knob
2007-07-10 18:07
2007.08.05
Выгрузка данных из таблицы Excel