Panel companenti
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Panel companenti
s. aleykum arkadaşlar. bir panel companenti yazmaya çalışıyorum. bu paneli ben paletten seçince forma tıkladığım anda panelle birlikte panel üzerinde bir label ve bir edit aynı anda create eilecek.labelin ben capture özelliğine özelliklerden ulaşabileceğim. ayrıca edit ve panelin boyutları paralel olarak değişecek .ben editi büyüteceğim panellde onunla beraber büyüyecek(bu işlem form tasarımı anında yapılabilecek. ) yardımcı olursanız sevinirim.
selam ve dua ile....
selam ve dua ile....
Allah Namına Al Allah Namına Ver Vesselam...
Yazmana gerek yok, hazır yazılmışı var 
Frame kullanırsan bunu yapabilirsin.
İçindeki componentlerin Frame'in büyüklüğüne göre değişmesini istiyorsan Her componentin Anchors ayarlarını yap. Mesela AkRight'ı true yaparsan, componentin framein sağ tarafını uzaklığı sabit kalacaktır. Yani sen frame'i enine uzatırsan componentte enine uzar.

Frame kullanırsan bunu yapabilirsin.
İçindeki componentlerin Frame'in büyüklüğüne göre değişmesini istiyorsan Her componentin Anchors ayarlarını yap. Mesela AkRight'ı true yaparsan, componentin framein sağ tarafını uzaklığı sabit kalacaktır. Yani sen frame'i enine uzatırsan componentte enine uzar.
En son undefined tarafından 07 Mar 2006 06:11 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Selamlar.
Sırayla doğaçlama şeklinde yazarsak;
- TCustomPanel ya da TPanel sınfından bir panel türetilir..
- Constructor yordamı override edilir.
- Inheritten sonra parenti sözkonusu panel olan bir adet label ve ve bir adet edit create edilir (isimlendirmeleri bu panelle ilişkilendirilirse ulaşmak daha kolay olacaktır..).
- Edit için bir mousedown ve mousemove yordamı yazılarak resize edibilmesi, aynı yordamda parenti olan panelin de kendini buna uyarlaması sağlanır.
gibi...
Aynı bileşene gömme de yapılabilir aslında, birkaç alternatif düşünülebilir aslında..
Kolay gele..
Sırayla doğaçlama şeklinde yazarsak;
- TCustomPanel ya da TPanel sınfından bir panel türetilir..
- Constructor yordamı override edilir.
- Inheritten sonra parenti sözkonusu panel olan bir adet label ve ve bir adet edit create edilir (isimlendirmeleri bu panelle ilişkilendirilirse ulaşmak daha kolay olacaktır..).
- Edit için bir mousedown ve mousemove yordamı yazılarak resize edibilmesi, aynı yordamda parenti olan panelin de kendini buna uyarlaması sağlanır.
gibi...
Aynı bileşene gömme de yapılabilir aslında, birkaç alternatif düşünülebilir aslında..
Kolay gele..
şurdan yola çıkabilirsiniz..
Kod: Tümünü seç
unit mypanel;
interface
uses
SysUtils, Classes, Controls, ExtCtrls, StdCtrls;
type
TMyPanel = class(TPanel)
private
{ Private declarations }
protected
function GetLabelCaption : String;
procedure SetLabelCaption(Caption : String);
{ Protected declarations }
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
{ Public declarations }
published
property LabelCaption : String read GetLabelCaption write SetLabelCaption;
{ Published declarations }
end;
var
xLabel : TLabel;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [tmypanel]);
end;
constructor TMyPanel.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
xLabel := TLabel.Create(Self);
xLabel.Caption := 'Label';
xLabel.Parent := Self;
end;
destructor TMyPanel.Destroy;
begin
xLabel.Free;
inherited Destroy;
end;
function TMyPanel.GetLabelCaption : String;
begin
Result := xLabel.Caption;
end;
procedure TMyPanel.SetLabelCaption(Caption : String);
begin
xLabel.Caption := Caption;
end;
end.
@lazio xlabel bileşenin sınıfın içine taşınması lazım. Çünkü TMyPanel sınıfından birden fazla nesne yaratıldığında hepsi aynı xlabel bileşeni üzerinde işlem yapacak, bu da sorun yaratır. OOP'nin Encapsulation(kapsülleme) kuralını ihlal etmiş oluyoruz bu durumda.
şeklinde olmalı.
Kod: Tümünü seç
private
{ Private declarations }
fLabel : TLabel;
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Haklısın, dediğin gibi ödev vs. ise. Eğer kişi kendini geliştirmek için bu şekilde uğraşırsa buna saygı duyarım.bLue aLonE yazdı:@undefined;
Bir şeyin hazırını kullanmak mı daha iyidir, üretme imkanı varken ürettiğini kullanmak mı?Coderlik zaten üretmek değil midir?Ve bunun bir ödev olabileceğini (ki öyle görünüyor..) düşünerek değerlendirmek de gerekli sanırım.
Kolay gele..
Ama yetişmesi gereken bir ciddi proje kodlarken hazırı ve daha iyisi varken bu tür ayrıntılarla uğraşmak işgüzarlık olur bence.
evt. haklısın t-hex. ben zaten fikir vermesi açısından çok basitçe yazdım. zaten tamamlayıp versek bence pek hayrına olmaz arkadaşın..t-hex yazdı:@lazio xlabel bileşenin sınıfın içine taşınması lazım. Çünkü TMyPanel sınıfından birden fazla nesne yaratıldığında hepsi aynı xlabel bileşeni üzerinde işlem yapacak, bu da sorun yaratır. OOP'nin Encapsulation(kapsülleme) kuralını ihlal etmiş oluyoruz bu durumda.şeklinde olmalı.Kod: Tümünü seç
private { Private declarations } fLabel : TLabel;
panel
sağolun arkadaşlar kodaları denedim ama üzerine bir ekleme yapmadım hata verdi çünkü inşallah tamamını ödevimi tamamlayımca yayınlayacağım çok teşekkür ederim ilginize. ayrıca frame ile yap diyen arkadaşıma çok teşekkür ederim ama dediğini pek anlamadım kusura bakmasın çünkü daha yeniyiz
teşekkürler....
selam ve dua ile

selam ve dua ile
Allah Namına Al Allah Namına Ver Vesselam...
paneleditlabel componenti
arkadaşlar ilginize çok tşk ederim lazio arkadaşın yazdığı kodlar baya yardımcı oldu Allah razı olsun. Arkadaşlar component yazmaya ilişkin kaynak bilgisi olan bi arkadaşım varsa bana gönderebilir mi
merak edenlere işte sorunun cevabı...
unit labeledit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls,stdctrls;
type
Tlabeledit = class(TPanel)
private
capt:Tlabel;
text:Tedit;
yuksek:byte;
fhavecaption: boolean;
Fkonum: boolean;
Fbaslik: string;
manual:boolean;
{ Private declarations }
protected
procedure baslikata(value:string);
procedure konum(value :boolean);
procedure resize;override;
procedure setup;
procedure setcaption(value:boolean);
public
constructor create(AOwer : tcomponent );override;
destructor destroy;override;
published
property baslik:string read Fbaslik write Fbaslik;
property Showcaption :boolean read fhavecaption write setcaption;
property ustbaslik:boolean read Fkonum write konum;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('benim', [Tlabeledit]);
end;
{ Tlabeledit }
procedure Tlabeledit.baslikata(value: string);
begin
if (Value <> FBaslik) and Assigned(Owner)
then begin
FBaslik := Value;
Capt.Caption := Baslik;
Setup;
end;
end;
constructor Tlabeledit.create(AOwer: tcomponent);
begin
inherited;
caption:=' ';
yuksek:=22;
capt :=TLabel.create(self);
capt.left:=10;
capt.caption:='Label' ;
capt.visible:=True;
capt.top:=10;
capt.parent:=Self;
text :=tedit.create(Self);
text.Left:=1;
text.Text:=' ';
text.Top:=1;
text.parent:=Self;
bevelouter:=Bvnone;
end;
destructor Tlabeledit.destroy;
begin
inherited;
capt.free;
end;
procedure Tlabeledit.konum(value: boolean);
begin
if (value<>fkonum) and assigned(owner) then
begin
fkonum:=value;
setup;
end;
end;
procedure Tlabeledit.resize;
begin
inherited;
if (capt.Visible = False) Then text.width := width-10;
if (capt.Visible = True) Then text.width := width-10-Capt.width;
if (yuksek<>height) and (manual= False) Then height:=yuksek;
end;
procedure Tlabeledit.setcaption(value: boolean);
begin
if (value<>Fhavecaption) and Assigned(owner)
then begin
fhavecaption:=Value;
setup;
end;
end;
procedure Tlabeledit.setup;
begin
if showcaption=True then
begin
capt.visible:=True;
if ustbaslik=False then
begin
manual:=True;
height:=Text.Height+2;
capt.autosize:=True;
capt.Left:=Capt.Width+4 ;
capt.top:=2;
yuksek:=height;
manual:=false
end else
begin
manual:=True;
capt.AutoSize:=True;
capt.Left:=1; text.Left:=1;
capt.top:=1;
text.top:=capt.Height+2;
height:=Capt.Height+2+text.Height;
Width:=Text.Width;
caption:='';
Yuksek:=Height;
manual:=False;
end;
End else
begin
capt.visible:=False;
text.Left:=1; text.Top:=1;
text.Width:=Width-10;
manual:=True;
Height:=text.Height+1;
yuksek:=Height;
manual:=False;
end;
end;
end
merak edenlere işte sorunun cevabı...
unit labeledit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls,stdctrls;
type
Tlabeledit = class(TPanel)
private
capt:Tlabel;
text:Tedit;
yuksek:byte;
fhavecaption: boolean;
Fkonum: boolean;
Fbaslik: string;
manual:boolean;
{ Private declarations }
protected
procedure baslikata(value:string);
procedure konum(value :boolean);
procedure resize;override;
procedure setup;
procedure setcaption(value:boolean);
public
constructor create(AOwer : tcomponent );override;
destructor destroy;override;
published
property baslik:string read Fbaslik write Fbaslik;
property Showcaption :boolean read fhavecaption write setcaption;
property ustbaslik:boolean read Fkonum write konum;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('benim', [Tlabeledit]);
end;
{ Tlabeledit }
procedure Tlabeledit.baslikata(value: string);
begin
if (Value <> FBaslik) and Assigned(Owner)
then begin
FBaslik := Value;
Capt.Caption := Baslik;
Setup;
end;
end;
constructor Tlabeledit.create(AOwer: tcomponent);
begin
inherited;
caption:=' ';
yuksek:=22;
capt :=TLabel.create(self);
capt.left:=10;
capt.caption:='Label' ;
capt.visible:=True;
capt.top:=10;
capt.parent:=Self;
text :=tedit.create(Self);
text.Left:=1;
text.Text:=' ';
text.Top:=1;
text.parent:=Self;
bevelouter:=Bvnone;
end;
destructor Tlabeledit.destroy;
begin
inherited;
capt.free;
end;
procedure Tlabeledit.konum(value: boolean);
begin
if (value<>fkonum) and assigned(owner) then
begin
fkonum:=value;
setup;
end;
end;
procedure Tlabeledit.resize;
begin
inherited;
if (capt.Visible = False) Then text.width := width-10;
if (capt.Visible = True) Then text.width := width-10-Capt.width;
if (yuksek<>height) and (manual= False) Then height:=yuksek;
end;
procedure Tlabeledit.setcaption(value: boolean);
begin
if (value<>Fhavecaption) and Assigned(owner)
then begin
fhavecaption:=Value;
setup;
end;
end;
procedure Tlabeledit.setup;
begin
if showcaption=True then
begin
capt.visible:=True;
if ustbaslik=False then
begin
manual:=True;
height:=Text.Height+2;
capt.autosize:=True;
capt.Left:=Capt.Width+4 ;
capt.top:=2;
yuksek:=height;
manual:=false
end else
begin
manual:=True;
capt.AutoSize:=True;
capt.Left:=1; text.Left:=1;
capt.top:=1;
text.top:=capt.Height+2;
height:=Capt.Height+2+text.Height;
Width:=Text.Width;
caption:='';
Yuksek:=Height;
manual:=False;
end;
End else
begin
capt.visible:=False;
text.Left:=1; text.Top:=1;
text.Width:=Width-10;
manual:=True;
Height:=text.Height+1;
yuksek:=Height;
manual:=False;
end;
end;
end
Allah Namına Al Allah Namına Ver Vesselam...