edit alignment

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

husonet çok teşekkürler..
tamam lazarusta da çalıştı.. :lol:

şimdi benim yapmak istediğim edit in text ini sağa dayalı yazmasıydı..

bunun içinde edit içinde mevcut olan text in genişliğini bulmak..
ve buna göre canvas ile yazıyı yazdırmak..

yani editin içindeki text in genişliğini pixel cinsinden bulmak

bunu nasıl yapabilirim..
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

çok teşekkürler husonet
çok teşekkürler mrmcop

verdiğiniz kodlar lazarusta mükemmel çalıştı..

şimdi bunları kullanarak lazarus için bir edit bileşeni oluşturmayı deniycem

bileşenin adi da EditHusoMrmcop olacak :D
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

selimr yazdı:çok teşekkürler husonet
çok teşekkürler mrmcop

verdiğiniz kodlar lazarusta mükemmel çalıştı..

şimdi bunları kullanarak lazarus için bir edit bileşeni oluşturmayı deniycem

bileşenin adi da EditHusoMrmcop olacak :D
Bileşen yazmak acaip zevkli :D Başlarsan bırakamazsın benden söylemesi ;)

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

evet zevkli olduğunu biliyorum..
bir kaç denemem var
siteye de gönderdim

srfloatedit
sredit
srdbedit

siteye gönderdiğim denemelerim.
Misafir

Mesaj gönderen Misafir »

merhaba.
bugünlerde yoğunlaşmak istediğim konuların başında "object oriented" (yanlış mı yazdım acep :) ) geliyor.az çok bişeyler bilsem de püf noktaları araştırdıktan sonra özellikle Hüseyin abinin başını ağrıtmayı düşünüyorum :) tabii kendisinin uygun bi zamanında ve sakıncası olmazsa..
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

bileşeni aşağıdaki şekilde yazdım.

sağa yanaşmasını da bileşenin exit olayına koydum
yani edit ten çıkışta text içindeki bilgileri sağa dayalı yazıyor.

fakat ilk çalıştığında normal halde görünüyor.. create olayında yaparsamda hata veriyor.. başlarkende sağa dayalı olmasını nasıl sağlarım..

nerde hata yapıyorum..

şimdiden teşekkürler..

Kod: Tümünü seç


unit SrEditFloat;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, windows,
  Graphics, Dialogs, StdCtrls, messages;

type
   TSrEditFloat = class(TEdit)

  private
     FColorPassive     : TColor;
     FColorActiveText  : TColor;
     FColorPassiveText : TColor;
     FColorActive      : TColor;
     Fdecimal          : integer;
     Frm               : string;
     Fvaluefloat       : real;

     procedure gundecimal(const Value: integer);
     procedure gunvaluefloat(const Value: real);
     procedure ALColorPassive(const Value: TColor);
     procedure ALColorPassiveText(const Value: TColor);
     procedure rightjstifyedit(var xedit: TEdit);

  protected
     procedure DoEnter; Override;
     procedure DoExit ; Override;
     procedure KeyPress (var Key: Char); Override;

  public
    Constructor Create (AOwner : TComponent); Override;

  published
     property Autosize;
     property BorderStyle;
     property Ctl3D;
     property Cursor;
     property DragCursor;
     property DragKind;
     property DragMode;
     property Enabled;
     property Font;
     property maxlength;
     property Name;
     property ParentColor;
     property parentCtl3D;
     property ParentFont;
     property ParentShowhint;
     property PopupMenu;
     property ReadOnly;
     property ShowHint;
     property TabOrder;
     property Visible;

     property OnChange;
     property OnClick;
     property OnDblClick;
     property OnDragDrop;
     property OnDragOver;
     property OnEndDrag;
     property OnEnter;
     property OnExit;
     property OnKeyDown;
     property OnKeyPress;
     property OnKeyUp;
     property OnMouseDown;
     property OnMouseMove;
     property OnMouseUp;
     property Decimal : integer read Fdecimal write gundecimal;
     property ValueFloat : real read Fvaluefloat write gunvaluefloat;
     property ColorActive : TColor read FColorActive write FColorActive;
     property ColorActiveText : TColor read FColorActiveText write FColorActiveText;
     Property ColorPassive : TColor read FColorPassive write ALColorPassive;
     property ColorPassiveText : TColor read FColorPassiveText write ALColorPassiveText;
end;

procedure Register;

implementation

///**************************************************************************///
{ TSrEditFloat }
///**************************************************************************///
procedure Register;
begin
  RegisterComponents('fsh', [TSrEditFloat]);
end;
///**************************************************************************///
constructor TSrEditFloat.Create(AOwner: TComponent);
begin
  inherited Create (AOwner);
  ParentCtl3D      := False;
  Ctl3D            := False;
  Height           := 19;
  ColorActive      := ClInfoBk;
  ColorPassive     := ClInfoBk;
  ColorActiveText  := clblue;
  ColorPassiveText := clblue;
  Color            := fColorPassive;
  Font.Color       := fColorPassiveText;
  width            := 120;
  Text             := '0,00';
  decimal          := 2;
  Valuefloat       := 0;
end;
///**************************************************************************///
procedure TSrEditFloat.DoEnter;
begin
  inherited;
  Color      := ColorActive;
  Font.Color := ColorActiveText;
end;
///**************************************************************************///
procedure TSrEditFloat.DoExit;
var
edt: string;
begin
  inherited;
  Color      := ColorPassive;
  Font.Color := ColorPassiveText;
  if text='' then  edt:='0' else edt:= text;
  while pos('.',edt)<>0 do delete(edt,pos('.',edt),1);
  text   := formatfloat(frm,strtofloat(edt));
  valuefloat := strtofloat(edt);
  rightjstifyedit(self);
end;
///**************************************************************************///
procedure TSrEditFloat.gundecimal(const Value: integer);
begin
  if Fdecimal <> Value then
  begin
  Fdecimal := Value;
  if decimal=0 then frm:=',0' else frm:=',0.'+stringofchar('0',decimal);
  text := formatfloat(frm,valuefloat);
  end;
end;
///**************************************************************************///
procedure TSrEditFloat.gunvaluefloat(const Value: real);
begin
  if fvaluefloat <> Value then
  begin
  Fvaluefloat := Value;
  text        := formatfloat(frm,valuefloat);
  end;
end;
///**************************************************************************///
procedure TSrEditFloat.KeyPress(var Key: Char);
var
tus: char;
edt: string;
yer,nk1,nk2,i : integer;
begin
  inherited;
  tus:=key;
  key:=#0;
  yer:=selstart;

case tus of   {case başla}
#13      : begin
           PostMessage(Handle,WM_KEYDOWN,39,0);
           PostMessage(Handle,WM_KEYDOWN,09,0);
           end;

',','.'  : if decimal<>0 then selstart:=pos(',',text);
'0'..'9' : begin
           if sellength=length(text) then text:=''; //clear;
           nk1:=0;
           for i:=1 to length(Text) do if copy(Text,i,1)='.' then nk1:=nk1+1;
           edt:=copy(text,1,yer)+tus+copy(text,yer+1,length(text));
           while pos('.',edt)<>0 do delete(edt,pos('.',edt),1);
           text:=formatfloat(frm,strtofloat(edt));
           nk2:=0;
           for i:=1 to length(Text) do if copy(Text,i,1)='.' then nk2:=nk2+1;
           if nk2>nk1 then yer:=yer+2 else yer:=yer+1;
           selstart:=yer;
           end;
           
#8       : begin
           nk1:=0;
           if ((yer+1>pos(',',text)) and (decimal>0)) then
              begin
                if yer>pos(',',text) then
                   begin
                     text:=copy(text,1,yer-1)+'0'+copy(text,yer,length(text)-1);
                     postmessage(handle,WM_KEYDOWN,46,0);
                   end;
                postmessage(handle,WM_KEYDOWN,37,0);
                selstart:=yer;
                exit;
              end;
           for i:=1 to length(Text) do if copy(Text,i,1)='.' then nk1:=nk1+1;
           edt:=copy(text,1,yer-1)+copy(text,yer+1,length(text));
           while pos('.',edt)<>0 do delete(edt,pos('.',edt),1);
           if edt='' then edt:='0';
           text:=formatfloat(frm,strtofloat(edt));
           nk2:=0;
           for i:=1 to length(Text) do if copy(Text,i,1)='.' then nk2:=nk2+1;
           if nk1>nk2 then yer:=yer-2 else yer:=yer-1;
           if text='' then valuefloat:=0;
           selstart:=yer;
           exit;
           end;
end;       {case bitti}
end;
///**************************************************************************///
procedure TSrEditFloat.ALColorPassive(const Value: TColor);
begin
  if fcolorpassive<>value then
  begin
  FColorPassive := Value;
  color:=fcolorpassive;
  end;
end;
///**************************************************************************///
procedure TSrEditFloat.ALColorPassiveText(const Value: TColor);
begin
  if fcolorpassivetext<>value then
  begin
  FColorPassiveText := Value;
  font.Color:=fcolorpassivetext;
  end;
end;
///**************************************************************************///
procedure TSrEditFloat.rightjstifyedit(var xedit: TEdit);
var
soldan, uzunluk : integer;
yazi            : string;
xcanvas         : TControlCanvas;
begin
  yazi    := xedit.Text;
  while pos('.',yazi)<>0 do delete(yazi,pos('.',yazi),1);
  yazi    := formatfloat(frm,strtofloat(yazi));
  xcanvas := Tcontrolcanvas.Create;
  xcanvas.Control:=xedit;
  xcanvas.Lock;
  xcanvas.FillRect(xedit.ClientRect);
  uzunluk:= xcanvas.TextWidth(yazi);
  soldan := xedit.ClientRect.Right - uzunluk - 7;
  xCanvas.TextRect(xEdit.ClientRect, Soldan, 1, Yazi);
  xCanvas.UnLock;
  xCanvas.Free;
end;
///**************************************************************************///
end.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

Kod: Tümünü seç

procedure RightJustifyEdit(var xEdit : TEdit);
var
 Soldan,
 Uzunluk : Integer;
 Yazi    : String;
 xCanvas : TControlCanvas;
begin
  Yazi  := xEdit.Text; // Yazıyı çektik

  // TControlCanvas Create ediyor
  // TEdit'i kontrolüne veriyoruz.
  xCanvas := TControlCanvas.Create;
  xCanvas.Control := xEdit;

  // İşlerimizi yaparken başka thread vb.
  // etkisine karşı kilitliyoruz.
  xCanvas.Lock;

  // TEdit'in görünür yüzeyini boşaltıyoruz...
  // Veriye dokunmuyoruz :)
  xCanvas.FillRect(xEdit.ClientRect);
  Uzunluk := xCanvas.TextWidth(Yazi);
  // Soldan başlangıç noktamızı belirliyoruz.
  // İlerden başlatıp sağa yanaşıkmış hissi vermek için..
  // İlüzyon burada :)
  Soldan  := xEdit.ClientRect.Right - Uzunluk - 1;
  // Sonunda Yazımızı yazıyoruz.
  xCanvas.TextRect(xEdit.ClientRect, Soldan, 0, Yazi);
  xCanvas.UnLock; // Kilidi açtık.
  xCanvas.Free; // Free ettik.
end;

bu kod windows / lazarus üzerinde gayet güzel çalışıyor..

fakat linuxs üzerinde hata vermemekle birlikte;

// TEdit'in görünür yüzeyini boşaltıyoruz...
// Veriye dokunmuyoruz :)
xCanvas.FillRect(xEdit.ClientRect);

burda ve;

xCanvas.TextRect(xEdit.ClientRect, Soldan, 0, Yazi); burda bir etki yapmıyor.. neden olabilir acaba .. bilgisi olan arkadaş varmıdır..
Cevapla