Panel companenti

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kubra_21
Üye
Mesajlar: 57
Kayıt: 30 Kas 2005 01:49
Konum: erzincan

Panel companenti

Mesaj gönderen kubra_21 »

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....
Allah Namına Al Allah Namına Ver Vesselam...
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

nasıl yapılır bilmiyorum ama bana da lazım öyle bişey, önerileri sabırsızlıkla bekliyorum.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

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.
En son undefined tarafından 07 Mar 2006 06:11 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

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..
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

ş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.
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Arama için anahtar kelimeler: Template Component :!:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

@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.

Kod: Tümünü seç

private 
    { Private declarations } 
     fLabel : TLabel;
şeklinde olmalı.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Arkadaşlar niye kasıyorsunuzki, TFrame leri bu iş için düşünmüşler. Hem kullanımı daha esnek, kapsadığı nesnelerin propertyleri inherit edilebilio yani içindeki nesneler design zamanında propertyleri değiştirilebiliyor.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

@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..
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

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..
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.
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.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

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.

Kod: Tümünü seç

private 
    { Private declarations } 
     fLabel : TLabel;
şeklinde olmalı.
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..
DeveloperToolKit

..::|YeşilMavi|::..
kubra_21
Üye
Mesajlar: 57
Kayıt: 30 Kas 2005 01:49
Konum: erzincan

panel

Mesaj gönderen kubra_21 »

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
Allah Namına Al Allah Namına Ver Vesselam...
kubra_21
Üye
Mesajlar: 57
Kayıt: 30 Kas 2005 01:49
Konum: erzincan

paneleditlabel componenti

Mesaj gönderen kubra_21 »

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
Allah Namına Al Allah Namına Ver Vesselam...
Cevapla