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

edit alignment

Mesaj gönderen selimr »

selam arkadaşlar,,

benim yapmak istediğim, edit içine girilen text in
ortalanması veya sağa dayalı yazılması ama forumda anlatılan biçimde
talignment yoluyla değil,,

çünkü ben bunu lazarus ta yapmak istiyorum..

pascal koduyla nasıl yapılır bilgisi olan arkadaşlar varsa yardımlarınızı bekliyorum

şimdiden teşekkürler,
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Anladığım kadarıyla Component kullanmak istemiyorsunuz Ama Class larla uğraşmamız gerekeçek. Ben aşağıdaki şekilde yaptım belki işinize yarar Form un unitini yapıştırıyorum.

Kod: Tümünü seç

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TEdit = class(StdCtrls.TEdit)
  private
    FAlignment : TAlignment;
    procedure SetAlignment(Value: TAlignment);
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    property Alignment: TAlignment read FAlignment write SetAlignment;
end;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TEdit }

procedure TEdit.CreateParams(var Params: TCreateParams);
const
  Alignments : array[TAlignment] of LongWord= (ES_Left,ES_Right, ES_Center);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or Alignments[FAlignment];
end;

procedure TEdit.SetAlignment(Value: TAlignment);
begin
  if FAlignment <> Value then
  begin
    FAlignment := Value;
    RecreateWnd;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit1.Alignment := taRightJustify;
end;
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 »

teşekkürler..

ben aslında normal edit bileşenini bu şekle çevirmek istiyorum..

burda kullanılan talignment özelliğinde tanımlanan işlemler delphi de
bu işlemi yapıyor..

fakat lazarus ta talignment özelliğini tanımlasanız bile buna ait olan parametreler yani tacenter, tarightjustfy, taleftjustify özellikler istenen
işlemi yapmıyor..

bu parametreler herhalde delphide bir fonksiyon veya benzer bir olaya bağlı, ve orada belirtilen şekilde edit içindeki text i konumlandırıyor..

ama bunlar lazarusta işe yaramıyor..


kısacası taleftjusty özelliği atandığında yapılan işlemi oluşturan bir foksiyon ve benzeri birşey olması gerekir diye düşünüyorum..

biraz karışık oldu gibi, bilmem anlatabildimmi..
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

yol olarak şöyle birşey düşünüyorum ama nasıl yapacağımı bilmiyorum..

ödrek bir edit kutusunun genişliğini pixel cinsinden alacak,

daha sonra içindeki varsa olan text in genişliğini alacak,

arasındaki farktan itibaren edit kutusunun içine texti yerleştirecek,,

düşünce böylede nasıl yapılır :)
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Lazarus nedir ? :oops:

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 »

delphi benzeri
dil olarak yine pascal kullanan
gpl olarak dağıtılan
oldukça başarılı bir çalışma..


linux ve windows altında çalışıyor..


sourceforge.net den aratabilirsiniz..

denemenizi tavsiye ederim..
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n »

hocam dün veya evvelsi gün geçmişti forumda;

hıım buldum;
viewtopic.php?t=3825&highlight=free+pascal

sitesi sanki biraz yavaş çalışıyor yada çok yoğun; :)
kolay gelsin
;)
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

evet site olkuça yavaş
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

alignment özelliği sanırım tcustomedit sınıfının bir özelliği,,
bu özellik sanırım lazarus ta var fakat çalışmıyor.. hata vermiyor
fakat işlemide yapmıyor,


kısacası talignment özelliği kullanmadan normal edit içindeki text i sağa dayalı yazmanın bir yolu varmıdır..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- TEdit yerine TMemo kullanmanızı önericem...

:arrow: TMemo'yu herhabgi bir Edit bileşeni gibi boyutlandırın.

:arrow: TMemo.WordWrap özelliği false edin.

:arrow: TMemo.MaxLength değerini; kaç karakter istiyorsanız o rakamı girin. Böylece belirlenenden fazla karakter girişi engellenmiş olur.

:arrow: En son olarak OnKeyPress eventinde Enter tuşunu takibe alıp etkisiz hale getirin.

- İşte size Alignment özelliği olan bedava bir TEdit...

- Delphi ile ilüzyon bağıntısı :)
Resim
Resim ....Resim
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

:alkis: :alkis: @mrmcop hocam kırk yıl düşünsem aklıma gelmezdi..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

memo kullanarak delphide yapılabiliyor..
fakat lazarustaki memo bileşeninin alignment özelliği yok.

başka bir yol bulmam lazım..
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

lazarus ta
standart bölümündeki statictext bileşeninini talignment özelliği var
baktım bu özellik classes ünitinde ve classesh.inc dosyasında tanımlanıyor
ben kendi hazırladığım (hazırlamaya çalıştığım) bileşen unit ine classes
unitini ekliyorum, fakat işe yaramıyor.. yani hatasız olarak yeni bileşen oluşturuyorum ( delphideki gibi) özellikler kısmına eklenmiş oluyor
fakat yinede sola dayalı yazıyor. yani özelliklerden center seçsem bile
değişmiyor..

zannederim statictext bileşeninin üzerine canvas ile belirtilen koordinatlarda yazı yazılabiliyor ve bu yolla yapılmış..

peki edit üzerine de canvas ile yazı yazma olanağım varmı
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Delphi Canvas tan yararlanarak yapabilirsin. Lazarus u bilmiyorum ama :)

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var ACanvas: TCanvas;
   intLeftShift, intTopShift: Integer;
begin
 inherited;
 ACanvas := TCanvas.Create;
 try
   ACanvas.Handle := GetWindowDC(Edit1.Handle);
   with ACanvas do
   begin
     Font.Color := ClRed;
     intLeftShift := 20;
     intTopShift := 2;
     TextOut(intLeftShift, intTopShift, 'www.delphiturkiye.com')
   end;
 finally
   ReleaseDC(Edit1.Handle, ACanvas.Handle);
   ACanvas.Free
 end;
end;
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ı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...
@husonet'in bu güzel örneği yanında bişey ifade eder mi bilmem ama :wink: parametre olarak TEdit'i verip kullanabileceğin bir örnek sunayım.

- TControlCanvas adında özel bir Canvas nesnesi var.

- Vereceğim dinamik procedure, sağa yanaşıkmış gibi gösterecek ama Edit'e döndüğünde bu sihir ortadan kalkacak. OnExit olayına koyabilirsin.

1. TControlCanvas Create ediyor, TEdit'i kontrolüne veriyoruz.
2. İşlerimizi yaparken başka thread vb. etkisine karşı kilitliyoruz.
3. TEdit'in görünür yüzeyini boşaltıyoruz... Veriye dokunmuyoruz :)
4. Soldan başlangıç noktamızı belirliyoruz. İlerden başlatıp sağa yanaşıkmış hissi vermek için.. İlüzyon burada :)
5. ve yazımızı yazıyoruz.

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;
Resim
Resim ....Resim
Cevapla