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


Автор: ~FoX~ 24.12.2009, 14:25
Похоже моя глухота прогрессирует и повредила мне моск, пол дня бьюсь... smile 
Суть такова:
Есть MDIForm, в ней соответственно генирятся MDIChild-ы 
Код

procedure TMainRGC.ToolButton1Click(Sender: TObject);
begin
  Application.CreateForm(TEditForm, EditForm);
//  TEditForm.Create(Self);
end;

В чилде есть стринггрид в котором по клику появляются кнопки и комбобоксы, создаваемые динамически 

Генерим:
Код

var
  BOpen: TButton;
//........................

procedure TEditForm.FormCreate(Sender: TObject);
begin
  with Sender as TEditForm do begin
    Bopen := TButton.Create(Self);
    BOpen.Parent := Self;
    BOpen.Height := StringGrid1.DefaultRowHeight;
    BOpen.Width := StringGrid1.DefaultRowHeight;
    BOpen.Caption := '*';
    BOpen.OnClick := BOpenClick;
    BOpen.Visible := false;
  end;
end;


Показываем кнопу по клику на гриде
Код

procedure TEditForm.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
var
  CR: TRect;
begin
  with (Sender as TStringGrid) do begin
    if ACol = 3 then begin
      CR := StringGrid1.CellRect(ACol, ARow);
      BOpen.Left := CR.Right - BOpen.Width+3;
      BOpen.Top := CR.Top+Top+2;
      BOpen.Visible := true;
    end //if
    else BOpen.Visible := false;
  end; //with
end;

В общем то все нормально работает если дочернее окно одно или я работаю с последним открытым окном, но если их много, то в какое бы окно я не тыкнул, кнопка появляется только в последнем...
Пробовал указывать форму и сам грид в качестве предка кнопке BOpen.Parent := .....
Пробовал обращаться к гриду так   
Код

with (Sender as TEditForm).StringGrid1 do begin

Вызывает инвалид типкаст  smile 

З.Ы.: Первый раз делаю МДИ приложение  smile 

Автор: Frees 24.12.2009, 15:16
BOpen - это переменная в юните а не в классе она одна на всех, и ссылка на предыдущие затирается последним

перенеси ее в privat например

Автор: ~FoX~ 24.12.2009, 15:32
Frees,  smile  Я просто мега лох... Переносил же в класс формы, не додумался в приват засунуть... Полностью оправдываю свою подпись  smile 


Автор: Frees 24.12.2009, 15:34
Цитата(~FoX~ @  24.12.2009,  18:32 Найти цитируемый пост)
Переносил же в класс формы, не додумался в приват засунуть...

privat ли че другое не суть лишь бы у каждого экземпляра своя..

Автор: ~FoX~ 24.12.2009, 15:38
Frees, Само собой  smile 

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