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

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

Почему FindComponent не находит [D7, WinXP]


kyn66 ©   (2005-10-19 11:41:00) 

Уважаемые мастера, день добрый. Помогите разобраться , почему не работает часть кода?
На форме есть StringGrid, в который вожу некоторые числа и картинка, на которую затем переношу
эти числа для визуализации, путем создание меток. Затем, чтобы затереть некоторую метку на картинке,
при клике по StringGrid, у меня она не затирается, почему? Привожу код
1 часть, создание меток:

procedure TMainFrm.DrawDigit(k , m : Byte; S : String);
begin
 with TLabel.Create(Self) do
  begin
    Parent := ImgPanel;
    Alignment := taCenter;
    Transparent := True;
    AutoSize := False;
    Font.Style := [fsBold];
    Width := 14;
    Height := 13;
    case k of
      0: begin
           Left := BS1_A[m].X + 35;
           Top  := BS1_A[m].Y + 25;
         end;
      1: begin
           Left := BS2_A[m].X + 35;
           Top  := BS2_A[m].Y + 25;
         end;
      2: begin
           Left := BS3_A[m].X + 35;
           Top  := BS3_A[m].Y + 25;
         end;
      3: begin
           Left := BS4_A[m].X + 35;
           Top  := BS4_A[m].Y + 25;
         end;
      4: begin
           Left := BS5_A[m].X + 35;
           Top  := BS5_A[m].Y + 25;
         end;
      5: begin
           Left := BS6_A[m].X + 35;
           Top  := BS6_A[m].Y + 25;
         end;
    end; {Case}

    Caption := S;
    Name := 'DigitLab_' + IntToStr(k) + '_' + IntToStr(m);
  end;
end;
<code/>
2 часть, этот код не отрабатывает правильно 8-(, почему?

procedure TMainFrm.StringGrid1SelectCell(Sender: TObject; ACol,
                                        ARow: Integer; var CanSelect: Boolean);
begin
 with (Sender as TStringGrid) do
   if Cells[ACol, ARow] <> '' then
   begin
     FromDel := True;
     Panel1Click(Self.FindComponent('Panel' + Cells[ACol, ARow]));
     Cells[ACol, ARow] := '';
   
     if ARow = 0 then
      TLabel(FindComponent('DigitLab_' + IntToStr(0) + '_' + IntToStr(ACol))).Free;
     else
        TLabel(FindComponent('DigitLab_' + IntToStr(1) + '_' + IntToStr(ACol))).Free
      end;
   

   end;
end;
<code/>
Почему здесь AColнедоступен, и метка не находится, следовательно не уничтожается?


kyn66   (2005-10-19 11:53:00) [1]

>> Игорь Шевченко
>> begin...end

8-)))))))))))т Ура! Спасибо Вам, МАСТЕРА. Все заработало как надо !!!


begin...end   (2005-10-19 11:45:00) [2]

> kyn66 ©   (19.10.05 11:41)

> with (Sender as TStringGrid) do
> ...
> TLabel(FindComponent...

Вероятно, вызывается метод FindComponent stringgrid'а, а не формы. Поэтому компонент и ищется среди компонентов, принадлежащих stringgrid'у, а не форме.


Игорь Шевченко   (2005-10-19 11:44:00) [3]


> метка не находится


Потому что FindComponent относится к гриду, а метка создается, как дочерний компонент формы. Убрать with или указать Self.FindComponent


Наверх

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