Bileşen yazarken TEdit'e TButton nasıl gömülür?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
uparlayan
Üye
Mesajlar: 34
Kayıt: 09 Oca 2009 05:48

Bileşen yazarken TEdit'e TButton nasıl gömülür?

Mesaj gönderen uparlayan »

Merhaba arkadaşlar,

Konuyu araştırdım ama net bir yanıt bulamadım o nedenle deneyimlerinize ihtiyaç duyuyorum.

Bir bileşen yazmaya çalışıyorum. Bu bileşen 2 nesneden oluşacak 1.si TEdit. 2.si TButton.

Sorunum TButton'u TEdit'in sağ tarafından gözükmesini sağlamak, bunu nasıl yaparım? Yani iki bileşeni nasıl birleştiririm?

Saygılar
En son uparlayan tarafından 07 Ağu 2009 03:51 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Bileşen yazarken TDBEdit'e TButton nasıl gömülür?

Mesaj gönderen conari »

birleştirmekten kastınız proporties olarak mı yanyana koymakmı?
yanyana koymak ise panelin üstüne ikisini ekleyin olsun bitsin.
değilse bir kaç gün önce konuşulan şu yazıyı bir oku.
viewtopic.php?f=2&t=26213


orada şu link verilmişti.
http://mahirpc.blogcu.com/delphi-bilese ... 49411.html
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
uparlayan
Üye
Mesajlar: 34
Kayıt: 09 Oca 2009 05:48

Re: Bileşen yazarken TDBEdit'e TButton nasıl gömülür?

Mesaj gönderen uparlayan »

iyi niyetin için teşşekkürler fakat benim sorduğumla senin verdiğin yanıtın alakası yok...

TEdit nesnesinin içinde ve sağ duvarına dayalı bir buton koymak istiyorum. tıpkı spinedit gibi fakat tek bir buton koymak istiyorum
En son uparlayan tarafından 10 Ağu 2009 05:59 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
uparlayan
Üye
Mesajlar: 34
Kayıt: 09 Oca 2009 05:48

Re: Bileşen yazarken TDBEdit'e TButton nasıl gömülür?

Mesaj gönderen uparlayan »

Neyse arkadaşlar, kendi sorunumu kendim çözdüm, alın size ful kaynak kod, belki başka bi gariban nasiplenir...

Kaynak: http://www.kavramca.com/index.php?k=31

Kod: Tümünü seç

{******************************************************************************}
{*                                                                            *}
{*  Programlayan: Uğur Parlayan                                               *}
{*  Tarih: 06.08.2009                                                         *}
{*                                                                            *}
{*  Kullanım: Ayrım gözetmeksizn külliyatıyla ÜCRETSİZDİR                     *}
{*            Yazarın gönlü olsun diye kaynak belirtirseniz sevinirim...      *}
{*                                                                            *}
{*  URL: http://www.kavramca.com/index.php?k=31                               *}
{*                                                                            *}
{******************************************************************************}

unit upEditButon;

interface

uses
  SysUtils, Classes, StdCtrls, Mask, DBCtrls, DB, ExtCtrls, Controls,
  Buttons, Messages, Graphics, Windows, Forms, Dialogs;

type
  TupEditButon = class(TEdit)
  private
    FButon: TButton;
    function GetMinHeight: Integer;
    procedure SetEditRect;
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    function GetOnButonClick: TNotifyEvent;
    procedure SetOnButonClick(const Value: TNotifyEvent);
  protected
    procedure CreateWnd; override;
    procedure KeyPress(var Key: Char); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure CreateParams(var Params: TCreateParams); override;
    property Button: TButton read FButon;
  published
    {OnButonClick: Bu özellik butonumuza basılıp basılmadığını yönetecek...}
    Property OnButonClick: TNotifyEvent read GetOnButonClick write SetOnButonClick;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Ugur', [TupEditButon]);
end;

{ TupEditButon }

constructor TupEditButon.Create(AOwner: TComponent);
var
  En: integer;
begin
  {Ana nesneyi oluşturduk}
  inherited Create(AOwner);
  {Pitonu olişturiğiyruk}
  En := 20;
  FButon := TButton.Create (Self);
  with  FButon do begin
        Parent := Self;
        Caption := '...';
        { Buton.Brush.Bitmap.Canvas.TextWidth(FButon.Caption); }
        { Yukarıdaki satır nesne henüz oluşum aşamasında olduğu için hata veriyor }
        { O nedenle "EN" değişkenine sabit bir değer verildi... }
        Height := 16;
        Width := En;
        Left := Self.Width - En - 1;
        Text := ''; {Buraya bir başlangıç değeri verilebilir...}
        Visible := True;
  end;
  ControlStyle := ControlStyle - [csSetCaption];
end;

procedure TupEditButon.CreateParams(var Params: TCreateParams);
begin
  {Bu prosedür bu bileşene bağlı alt bileşenlere parametre göndermekte kullanılır...}
  inherited CreateParams(Params);
  Params.Style := Params.Style or ES_MULTILINE or WS_CLIPCHILDREN;
end;

procedure TupEditButon.CreateWnd;
begin
  {Yazı alanının belli bir bölgede sınırlanmasına yardım eder...}
  inherited CreateWnd;
  SetEditRect;
end;

destructor TupEditButon.Destroy;
begin
  {Nesne yok edilirken bağlı diğer nesneler de yokedilir.}
  FButon := nil;
  inherited Destroy;
end;

function TupEditButon.GetMinHeight: Integer;
var
  DC: HDC;
  SaveFont: HFont;
  I: Integer;
  SysMetrics, Metrics: TTextMetric;
begin
  {Metin alanının kaç pizel yükseklikte olduğunu hesaplar.}
  DC := GetDC(0);
  GetTextMetrics(DC, SysMetrics);
  SaveFont := SelectObject(DC, Font.Handle);
  GetTextMetrics(DC, Metrics);
  SelectObject(DC, SaveFont);
  ReleaseDC(0, DC);
  I := SysMetrics.tmHeight;
  if I > Metrics.tmHeight then I := Metrics.tmHeight;
  Result := Metrics.tmHeight + I div 4 + GetSystemMetrics(SM_CYBORDER) * 4 + 2;
end;

function TupEditButon.GetOnButonClick: TNotifyEvent;
begin
  {Olay tetiklendiğinde bizim butona yönlendirilecek...}
  Result := FButon.OnClick;
end;

procedure TupEditButon.KeyPress(var Key: Char);
begin
  inherited;
  {Enter'e basılınca alt satıra geçmesin, bi düdük çalsın...}
  if Key = #13 then begin
     Key := #0;
     MessageBeep(0);
  end;
  {entere basılmamışsa tuşu devreye al...}
  if not(Key in [#0,#13]) then inherited KeyPress(Key);
end;

procedure TupEditButon.SetEditRect;
var
  Kutu: TRect;
begin
  {yazı alanının belli bir sınır içine alınmasını sağlar...}
  {$IFNDEF TMSDOTNET}
    SendMessage(Handle, EM_GETRECT, 0, LongInt(@Kutu));
  {$ENDIF}
  {$IFDEF TMSDOTNET}
    Perform(EM_GETRECT, 0, Kutu);
  {$ENDIF}
    Kutu.Bottom := ClientHeight + 1;{windowsun paint zımbırtısının bir buguymuş}
    Kutu.Right  := ClientWidth - FButon.Width - 1;
    Kutu.Top    := 0;
    Kutu.Left   := 0;
  {$IFNDEF TMSDOTNET}
    SendMessage(Handle, EM_SETRECTNP, 0, LongInt(@Kutu));
    SendMessage(Handle, EM_GETRECT, 0, LongInt(@Kutu));  {dibagçün...}
  {$ENDIF}
  {$IFDEF TMSDOTNET}
    Perform(EM_SETRECTNP, 0, Kutu);
    Perform(EM_GETRECT, 0, Kutu);
  {$ENDIF}
end;

procedure TupEditButon.SetOnButonClick(const Value: TNotifyEvent);
begin
  {Editteki butona basılazak...}
  FButon.OnClick := Value;
end;

procedure TupEditButon.WMSize(var Message: TWMSize);
var
  Boy: Integer;
begin
  inherited;
  Boy := GetMinHeight;
     {Edit nesnesinin bir buguymuş. Bu işlem yapılmazsa nesne büzüşür...}
  if (Height < Boy) then
      Height := Boy
  else
  if (FButon <> nil) then begin
      if NewStyleControls and Ctl3D
      then FButon.SetBounds(Width - FButon.Width - 4, 0, FButon.Width, Height - 4)
      else FButon.SetBounds(Width - FButon.Width, 1, FButon.Width, Height - 2);
      SetEditRect;
  end;
end;

end.
Cevapla