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

Вниз

Почему FindComponent не находит   Найти похожие ветки 

 
kyn66 ©   (2005-10-19 11:41) [0]

Уважаемые мастера, день добрый. Помогите разобраться , почему не работает часть кода?
На форме есть 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 недоступен, и метка не находится, следовательно не уничтожается?


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


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


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


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

> kyn66 ©   (19.10.05 11:41)

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

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


 
kyn66 ©   (2005-10-19 11:53) [3]

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

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



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

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

Наверх




Память: 0.47 MB
Время: 0.027 c
4-1125410367
artdeveloper
2005-08-30 17:59
2005.11.06
Открыть системное диалоговое окно списка пользователей


2-1128311386
Queer
2005-10-03 07:49
2005.11.06
mpeg2


11-1110651995
Sphinxx
2005-03-12 21:26
2005.11.06
Кто работал с KOLWebBrowser?


1-1129555609
malamba
2005-10-17 17:26
2005.11.06
как в listbox хранить двойные данные


14-1129064523
Trajor
2005-10-12 01:02
2005.11.06
Подсветка синтаксиса