Çalışma zamanı kotrol oluşturma

Başlatan tolga.onder, 09 Mayıs 2010, 19:58:42

tolga.onder

Aşağıdaki kod niye çalışmaz ?

var
x:TEdit;
begin

x:=TEdit.Create(Form1);

End;


Tagli

Delphi bilmiyorum hiç ama yine de tahmine dayanarak bir yorum yapabilirim sanırım:

Kod belki de çalışıyordur. Form1 denen şey bir çeşit GUI öğesi değil mi? Nesnenin oluşmuş olması (ve de bir değişkene atanmış olması) onu ekranda görebileceğin anlamına gelmez. Java'da mesela GUI öğeleri görünmez olarak oluşuyor ve bunları sonradan görünür hale getirmek gerekiyor.
Gökçe Tağlıoğlu

tolga.onder



İlk önce ilgine teşekkür ederim.
Vermiş olduğunuz bilgiden yola çıkarak yanlışımı buldum. Ben bu kodu Form1 in OnCreate sine yazıyordum. Haliyle form yarıtılmamış olduğu için derlerken hata veriyordu. Bu kodu form üzerine yerleştirdiğim butona yazıcınca derlerken hata vermedi? 

SpeedyX

var
x:TEdit;

//Form1 in onShow olayı;
procedure TForm1.FormShow(Sender : TObject);
begin

x:=TEdit.Create(Form1);

End;

şeklinde sizin istediğiniz gibi olur ama editin görünmesi için Tagli nin da dediği gibi nesneyi görünür hale getirmelisiniz (x.Show;), hatta diğer özelliklerini de değiştirebilirsiniz.

Edit := TEdit.Create(self);
try
   Edit.Visible := True;
   Edit.Color := clRed;
   Edit.Enabled := True;
   Edit.Text := 'ddddd';
   Edit.BorderStyle := bsSingle;
   Edit.Width := 200;
   Edit.Height := 50;
   Edit.Left := x;
   Edit.Top := y;
   Edit.Show;
finally

end;

orhanc

#4
Oluşturulan objelerin özelliklerini tek tek belirtmezsen çalışmayabilir. Sürükle bırak gibi olmuyor kod ile maalesef.

şuraları bir incele

http://oreilly.com/catalog/delphi/chapter/ch02.html
http://www.gnegg.ch/2008/09/dynamic-object-creation-in-delphi/

ayrıca delphi 7 ile gelen bir kaç güzel kitap var onlara da bakabilirsin. Delphi Developer Guide'da bir sürü ayrıntı var
i'm doing nothing... Giddy Up  http://www.drorhan.com

aykuto

Şöyle yapmanız gerekir:

var
x:TEdit;
begin

x:=TEdit.Create(Form1);
Form1.InsertControl(x);

End;

XOR

#6
Parent özelliğini belirtmezseniz görünmez.

procedure TForm1.Button1Click(Sender: TObject);
var
  x:TEdit;
begin
x:=TEdit.Create(Form1);
x.Parent := Form1;
end;

Edit : aykuto'nun mesajını görmemiştim, onun önerisi de çözer.

procedure TWinControl.InsertControl(AControl: TControl);
var
  Item: TControlListItem;
begin
  AControl.ValidateContainer(Self);
  Item.Control := AControl;
  Item.Parent := Self;
  Perform(CM_CONTROLLISTCHANGING, Integer(@Item), Integer(True));
  Perform(CM_CONTROLLISTCHANGE, Integer(AControl), Integer(True));
  Insert(AControl);
  if not (csReading in AControl.ComponentState) then
  begin
    AControl.Perform(CM_PARENTCOLORCHANGED, 0, 0);
    AControl.Perform(CM_PARENTFONTCHANGED, 0, 0);
    AControl.Perform(CM_PARENTSHOWHINTCHANGED, 0, 0);
    AControl.Perform(CM_PARENTBIDIMODECHANGED, 0, 0);
    if AControl is TWinControl then
    begin
      AControl.Perform(CM_PARENTCTL3DCHANGED, 0, 0);
      UpdateControlState;
    end else
      if HandleAllocated then AControl.Invalidate;
    AlignControl(AControl);
  end;
  Perform(CM_CONTROLCHANGE, Integer(AControl), Integer(True));
end;

procedure TControl.SetParent(AParent: TWinControl);
begin
  if FParent <> AParent then
  begin
    if AParent = Self then
      raise EInvalidOperation.CreateRes(@SControlParentSetToSelf);
    if FParent <> nil then
      FParent.RemoveControl(Self);
    if AParent <> nil then
    begin
      AParent.InsertControl(Self);
      UpdateAnchorRules;
    end;
  end;
end;

tolga.onder

form1 üzerinde edit nesnesi için bu çözümleriniz işe yarıyor ama quickrep da olmuyor. neden acaba?

XOR

Alttaki kod gayet güzel çalışıyor (Delphi6).

procedure TForm1.Button1Click(Sender: TObject);
var
   a : TQuickRep;
begin
  a := TQuickRep.Create(self);
  a.Parent := Self;
end;

orhanc

Quickreportu kesinlikle kullanma acilen FastReporta geç başın çok ağrır :)
i'm doing nothing... Giddy Up  http://www.drorhan.com

tolga.onder

fast report ücretsizmi ? en son versiyonu için bildiğiniz bir link var mı ?

orhanc

ücretli ama kesinlikle kullanmanı tavsiye ederim çok güzel bir raporlama sistemi
i'm doing nothing... Giddy Up  http://www.drorhan.com

tolga.onder

mesela en çok neyi hoşunuza gidiyor

orhanc

Öncelikle olarak çok hızlı rapor alıyorsun, kendi pascal script dili var istediğin gibi müdahale ediyorsun, rapor tasarımcı ekranı kolay ve anlaşılır, kullandıkça farkları görürsün zaten
i'm doing nothing... Giddy Up  http://www.drorhan.com