Panel componentinde sorun
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Panel componentinde sorun
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
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
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
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.
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;
ama formun üzerinde panelin içindeki edite tıklayamıyorum direk objectinspector da panel tıklanmış oluyor.
Süleyman Çelik
Re: Panel componentinde sorun
runtime da oluşturuyorsan componentleri design timeda kaç edit var özellikleri nedir nerden bileceksinki ? Yanlışmı anlamışım yoksa yapmaya çalıştığın bu mussteeltr 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
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
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
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.
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
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

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
Süleyman Çelik
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
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.
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.
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
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.TCollection tarzi bir yapi kullanman lazim. bu editlere tasarim aninda veri girmek icinde kendi property editorlerini yazman gerekecek
Saygılarımla.[/code]
Süleyman Çelik
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
http://delphi.about.com/library/bluc/text/uc083101d.htm
bu ve buna benzer tarzdaki linklerden gerekli bilgileri elde edebilirsiniz...
bu ve buna benzer tarzdaki linklerden gerekli bilgileri elde edebilirsiniz...