Главная страница
    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.45 MB
Время: 0.041 c
2-1183715803
xpublic
2007-07-06 13:56
2007.08.05
Проблемы округления


15-1183635469
@!!ex
2007-07-05 15:37
2007.08.05
Как до ставить Linux.


2-1183357698
Washington
2007-07-02 10:28
2007.08.05
Удаление таблицы Access


3-1177408993
DROWSYS
2007-04-24 14:03
2007.08.05
BDEADMIN.exe


15-1183640663
MOO
2007-07-05 17:04
2007.08.05
Защита приложения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский