Panel componentinde sorun

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Panel componentinde sorun

Mesaj gönderen ssteeltr »

Arkadaşar ben bir panel sınıfından türetilmiş component yazdım. burda table ismi seçilinde panel içine otomatik olarak tablodaki alanlar için edit oluşturuluyor.bu editleri oluşturma işini OnchangeTable olunca arka planda componentin içinde bir procedure ile otomatik yapıyom.

Ancak paneli forma koyup table ismini atayınca otomatik oluşan editlere tasarım anında tıklayıp objectinspector penceresinde özelliklerini değiştiremiyorum hatta editlere tıklayamıyrum bile

ama programı run edince editlere bilgi girebiliyorum.

Şimdi ben paneli forma koyunce panelin içinde oluşan editlere tasarım anında nasıl müdehale edebilirim.

Saygılarımla
Süleyman Çelik
aseka

Mesaj gönderen aseka »

--
En son aseka tarafından 18 Mar 2008 08:45 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

tedit sınıfından bir sınıf türetmedim.

tpanel den bir sınıf türettim ve daha sonra panelin içinde editler türettim

Kod: Tümünü seç

for i:=0 to 9 do
begin
 arry[i]:=TEdit.create;
 arry[i ].Parent:=MyPanel;
end;

MyPanel componentini forma koyunca otomatik olarak içinde 10 tane edit oluşuyor.

ama formun üzerinde panelin içindeki edite tıklayamıyorum direk objectinspector da panel tıklanmış oluyor.
Süleyman Çelik
aseka

Mesaj gönderen aseka »

--
En son aseka tarafından 18 Mar 2008 08:46 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: Panel componentinde sorun

Mesaj gönderen ikutluay »

ssteeltr yazdı:Arkadaşar ben bir panel sınıfından türetilmiş component yazdım. burda table ismi seçilinde panel içine otomatik olarak tablodaki alanlar için edit oluşturuluyor.bu editleri oluşturma işini OnchangeTable olunca arka planda componentin içinde bir procedure ile otomatik yapıyom.

Ancak paneli forma koyup table ismini atayınca otomatik oluşan editlere tasarım anında tıklayıp objectinspector penceresinde özelliklerini değiştiremiyorum hatta editlere tıklayamıyrum bile

ama programı run edince editlere bilgi girebiliyorum.

Şimdi ben paneli forma koyunce panelin içinde oluşan editlere tasarım anında nasıl müdehale edebilirim.

Saygılarımla
runtime da oluşturuyorsan componentleri design timeda kaç edit var özellikleri nedir nerden bileceksinki ? Yanlışmı anlamışım yoksa yapmaya çalıştığın bu mu
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

Editleri run time da oluşturmuyorum.

Paneli component panelden formun üstüne indirince yani create edilince oluşturuyorum formun üzerine paneli koyunca içindeki editlere tıklayamıyorum tıklayınca direk panelin özellikleri objectinspector da görünüyor.

örnek componentin codlarını vereyim bir kurun dediğimi daha iyi anlayacaksınız.

Kod: Tümünü seç


unit SQLConnectionPanel;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, StdCtrls;

type
  TSQLConnectionPanel = class(TPanel)
  private
    rgLogin: TRadioGroup;
    GroupBox1: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    eUserName: TEdit;
    ePassword: TEdit;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    EserverName: TEdit;
    Label2: TLabel;
    EdatabaseName: TEdit;
    procedure rgLoginClick(Sender: TObject);
    function GetUserName: String;
    function GetPassword: string;
    function GetServerName: string;
    function GetDatabaseName: string;
    function GetConnectionType: integer;
    procedure SetUserName(Value: string);
    procedure SetPassword(Value: string);
    procedure SetServerName(Value: string);
    procedure SetDataBaseName(Value: string);
    procedure SetConnectionType(Value: integer);
  protected
  public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   procedure Paint; override;
   function GetConnectionString: string;
  published
   property UserName: String read GetUserName write SetUserName;
   property Password: String read GetPassword write SetPassword;
   property ServerName: string read GetServerName write SetServerName;
   property DatabaseName: String read GetDatabaseName write SetDataBaseName;
   property ConnectionType: integer read GetConnectionType write SetConnectionType;
  end;

procedure Register;

implementation

uses Dialogs;

procedure Register;
begin
  RegisterComponents('DB Connection', [TSQLConnectionPanel]);
end;

{ TConnectionPanel }

constructor TSQLConnectionPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  BevelOuter := bvNone;
  BevelInner := bvNone;
  Align := alClient;
  GroupBox2 := TGroupBox.Create(self);
  GroupBox2.Parent := Self;
  GroupBox2.Caption := '';
  GroupBox2.Left := 8;
  GroupBox2.Top := 5;
  GroupBox2.Width := 169;
  GroupBox2.Height := 93;
  Label1 := TLabel.Create(GroupBox2);
  Label1.Parent := GroupBox2;
  Label1.Caption := 'Server';
  Label1.Left := 8;
  Label1.Top := 12;
  Label2 := TLabel.Create(GroupBox2);
  Label2.Parent := GroupBox2;
  Label2.Caption := 'Data Base';
  Label2.Left := 8;
  Label2.Top := 49;
  EserverName := TEdit.Create(GroupBox2);
  EserverName.Parent := GroupBox2;
  EserverName.Text := '(local)';
  EserverName.Left := 16;
  EserverName.Top := 26;
  EserverName.Width := 140;
  EserverName.Height := 21;

  EdatabaseName := TEdit.Create(GroupBox2);
  EdatabaseName.Parent := GroupBox2;
  EdatabaseName.Text := '';
  EdatabaseName.Left := 16;
  EdatabaseName.Top := 63;
  EdatabaseName.Width := 140;
  EdatabaseName.Height := 21;

  rgLogin := TRadioGroup.Create(Self);
  rgLogin.Parent := Self;
  rgLogin.Caption := ' Authorization method ';
  rgLogin.Top := 5;
  rgLogin.Left := 183;
  rgLogin.Width := 193;
  rgLogin.Height := 93;

  GroupBox1 := TGroupBox.Create(self);
  GroupBox1.Parent := Self;
  GroupBox1.Caption := ' SQL Server authorization ';
  GroupBox1.Left := 8;
  GroupBox1.Top := 101;
  GroupBox1.Width := 169;
  GroupBox1.Height := 84;
  Label3 := TLabel.Create(GroupBox1);
  Label3.Parent := GroupBox1;
  Label3.Caption := 'Login';
  Label3.Left := 8;
  Label3.Top := 24;
  Label3.Enabled := false;
  Label4 := TLabel.Create(GroupBox1);
  Label4.Parent := GroupBox1;
  Label4.Caption := 'Password';
  Label4.Left := 8;
  Label4.Top := 54;
  Label4.Enabled := false;

  eUserName := TEdit.Create(GroupBox1);
  eUserName.Parent := GroupBox1;
  eUserName.Text := 'sa';
  eUserName.Left := 61;
  eUserName.Top := 18;
  eUserName.Width := 100;
  eUserName.Height := 21;
  eUserName.Enabled := false;

  ePassword := TEdit.Create(GroupBox1);
  ePassword.Parent := GroupBox1;
  ePassword.Text := '';
  ePassword.Left := 61;
  ePassword.Top := 50;
  ePassword.Width := 100;
  ePassword.Height := 21;
  ePassword.Enabled := false;
  ePassword.PasswordChar := '*';
  rgLogin.OnClick := rgLoginClick;
  Caption := '';
end;

destructor TSQLConnectionPanel.Destroy;
begin
  ePassword.Free;
  ePassword := nil;
  eUserName.Free;
  eUserName := nil;
  Label4.Free;
  Label4 := nil;
  Label3.Free;
  Label3 := nil;
  GroupBox1.Free;
  GroupBox1 := nil;
  rgLogin.Free;
  rgLogin := nil;
  EdatabaseName.Free;
  EdatabaseName := nil;
  EserverName.Free;
  EserverName := nil;
  Label2.Free;
  Label2 := nil;
  Label1.Free;
  Label1 := nil;
  GroupBox2.Free;
  GroupBox2 := nil;
  inherited;
end;

function TSQLConnectionPanel.GetConnectionString: string;
begin
 case ConnectionType of
    0: Result := Format('Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=%s;Data Source=%s', [DatabaseName, ServerName]);
    1: Result := Format('Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s', [Password, UserName, DatabaseName, ServerName]);
  end;
end;

function TSQLConnectionPanel.GetConnectionType: integer;
begin
 Result := rgLogin.ItemIndex;
end;

function TSQLConnectionPanel.GetDatabaseName: string;
begin
 Result := EdatabaseName.Text;
end;

function TSQLConnectionPanel.GetPassword: string;
begin
 Result := ePassword.Text;
end;

function TSQLConnectionPanel.GetServerName: string;
begin
 Result := EserverName.Text;
end;

function TSQLConnectionPanel.GetUserName: String;
begin
 Result := eUserName.Text;
end;

procedure TSQLConnectionPanel.Paint;
begin
  inherited;
  Caption := '';
  if rgLogin.Items.Count = 0 then
   begin
    rgLogin.Items.Add('Windows NT');
    rgLogin.Items.Add('SQL Server Login');
    ConnectionType := 0;
   end;
end;

procedure TSQLConnectionPanel.rgLoginClick(Sender: TObject);
begin
  Label3.Enabled := rgLogin.ItemIndex = 1;
  Label4.Enabled := rgLogin.ItemIndex = 1;
  eUserName.Enabled := rgLogin.ItemIndex = 1;
  ePassword.Enabled := rgLogin.ItemIndex = 1;
end;

procedure TSQLConnectionPanel.SetConnectionType(Value: integer);
begin
 rgLogin.ItemIndex := Value;
end;

procedure TSQLConnectionPanel.SetDataBaseName(Value: string);
begin
 EdatabaseName.Text := Value;
end;

procedure TSQLConnectionPanel.SetPassword(Value: string);
begin
 ePassword.Text := Value;
end;

procedure TSQLConnectionPanel.SetServerName(Value: string);
begin
 EserverName.Text := Value;
end;

procedure TSQLConnectionPanel.SetUserName(Value: string);
begin
 eUserName.Text := Value;
end;

end.

Süleyman Çelik
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

arkadşlar yapmak istediğim componentin resmini gönderiyorum.

amaç bir panel sınıfından türetilecek componentin datasource özelliği seçilince
component o datasource nin bağlı olduğu tablodaki tüm alanları editler halinde bir groupbox in içine ekleyecek(bu editler DBEDIT olabilir)
sonra panelin soluna dbgrid i yerleştirecek ve alttaki butonlara örneğin yeni butonunun onclick olayına yenikayit procedurü atanacak

ve sonuçta aşağıdaki gibi bir panel oluşacak

Resim
Süleyman Çelik
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »

arkadalar konu ile ilgili çözümü tavsiyesi olan yok mu?

yardımlarınızı bekliyorum
Süleyman Çelik
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

TLabeledEdit tarzi birsey mi sizin aradiginiz ? yoksa solda ki editlerin sayisi dinamik mi olacak ? dinamik olacakca bu editlere object inspector ile direkt ulasim olmaz sanirim. TCollection tarzi bir yapi kullanman lazim. bu editlere tasarim aninda veri girmek icinde kendi property editorlerini yazman gerekecek.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Mesaj gönderen ssteeltr »


MesajTarih: Prş Şub 21, 2008 11:38 Mesaj konusu:
TLabeledEdit tarzi birsey mi sizin aradiginiz ? yoksa solda ki editlerin sayisi dinamik mi olacak ? dinamik olacakca bu editlere object inspector ile direkt ulasim olmaz sanirim. TCollection tarzi bir yapi kullanman lazim. bu editlere tasarim aninda veri girmek icinde kendi property editorlerini yazman gerekecek.
evet hocam bu editleri Tmypanel componentinin Table Datasource özelliğini seçince otomatik olarak ilgili table daki alan sayısı kadar edit otomatik oluşaçak.

v ben tasarım anında panel içindeki bu editlere tıklayınca objectinspectordan özelliklerini değiştirebilmeliyim.

sanırım çözüm şu cümlenizde gizli
TCollection tarzi bir yapi kullanman lazim. bu editlere tasarim aninda veri girmek icinde kendi property editorlerini yazman gerekecek
ama bu TCollection nedir nasıl editör yazılır bilmiyorum. Bence bi çok kişide bilmiyordur bu konuda bilgilerinizi paylaşırsanız sevinirim.

Saygılarımla.[/code]
Süleyman Çelik
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

http://delphi.about.com/library/bluc/text/uc083101d.htm

bu ve buna benzer tarzdaki linklerden gerekli bilgileri elde edebilirsiniz...
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla