çalışma anında bileşenlerin boyutlarını değiştirmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

çalışma anında bileşenlerin boyutlarını değiştirmek

Mesaj gönderen cfyasar »

tasarım anında yapabildiğimiz gibi çalışma sırasında da bileşenlerin boyunu değiştirmek istiyorum. bileşene tıklayında etrafında karelerin belirmesi ve sağ alta gelip mouse a basıp sürükleyince boyutlarının değişmesini nasıl yapabilirim.
öğrenmek, zorlukları yenmektir.
Kullanıcı avatarı
Pulp
Üye
Mesajlar: 21
Kayıt: 04 Mar 2005 04:25
Konum: BURSA

Mesaj gönderen Pulp »

BENDE BU DENEMEYİ YAPMIŞTIM İSTERSEN ÖRNEK KODLARI VEREYİM İNCELE, BANA MSN DEN ULAŞABİLİRSİN. msn: ncavus.ihlas.net.tr
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

arkadaşlar paylaşılacak bişey varsa ve bunu paylaşmanın bir sakıncası yoksa lütfen forumu kullanalım.. :!:
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
Pulp
Üye
Mesajlar: 21
Kayıt: 04 Mar 2005 04:25
Konum: BURSA

Mesaj gönderen Pulp »

arkadaşımıza kolaylık olması açısından bu şekilde bir yanıt verdim, yoksa öyle bir kod neden paylaşılmasın artı bunu nereye upload edeceğimide bilmiyorum :oops:
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

MESELA:

Kod: Tümünü seç

button1.width:=100;
button1.height:=150;
kod içinde bunlarla oynayabilirsin...
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

yanlış anlama paylaşacağın şek kod ise foruma yazabileceğinden bahsettim.
mesela;
viewtopic.php?t=5743
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhabalar...

@Pulp; herhalde sorunsalı @cyasar ile kendi aranızda çözmüşsünüzdür...

Sadece sana değil bu yazıyı genel için yazıyorum....

- Kodlar kimsenin tekelinde değildir. Eğer burada bir soru sorulmuşsa, soru topluma mal olmuştur ve cevabını biliyorsanız lütfen yine bu etik kural çerçevesinde ...

1. ya yine açık şekilde yayınlayın
2. ya cevabını biliyorum ama sana özel moduna girmeyin
3. hiç cevap vermeyin
4. soruyu sorana özel mesaj ile iletin bizi karıştırmayın... :idea:

@cfyasar ve @forum sakinleri

- Bu tip bir sorunun çözümünü normalde nesneye göre değişkenlik gösterse de mümkün olduğunca ortak bir dil kullanmak için modifiye ettim... TEdit, TPanel, TListBox gibi nesnelerle deneyip, örnekleri çoğaltabirsiniz.

- Kullanım alanı olarak RunTime form tasarımları diyebiliriz... -ben kullanıcı tanımlı baskı formu tanımlama olayında kullanmıştım- :roll:

- Kullandığınız bileşenlerin BorderStyle özelliklerini None yapın... Çünkü kenarlarını algılamak zor oluyor...

- Aşağıdaki örnekte Forma bir tane panel koyuyoruz... Adı Panel1

- Bu TPanel'in OnMouseDown olayına ve OnMouseMove olayına istisnasız aşağıdaki iki grubu kopyala/yapıştır yapıyorsunuz. Tüm hesaplamalar dinamik yapıldığından herhangi bir güncellemeye gerek yok... 8)

- Neler yapıldığınını özetleyeyim... OnMouseMove olayında nesnenin kenarlarına yaklaşıldığında Mouse Cursor Karakteri, hangi kenara yaklaşmışsa ona göre boyutlandırmayı hangi yönde yapacaksak o yönde bir şekil alması sağlanıyor... :)

- OnMouseDown olayında ise eğer sol mouse butonu basılı ise işlem yapmak üzere tetiklenen bir blok bekliyor...

:) - Bu blokta tahmin edeceğiniz üzere mouse koordinatları eğer eski sınırlarımızdan farklı bir yerde ise bu yeni alana kadar büyütme veya küçültme yapılmakta. Yani karmaşık bişi yok basit bir işlem... :)

- Const ifadesinde ise (global) olarak yukarılarda bir yere koymakta fayda var, tüm Unit içerisinde ortak olan; Mouse hareketlerinin güdümünde, nesneye büyütme/küçültme yönünü system komutu olarak aktarmak için kullanılan sabitleri içeriyor.

:) - Kendiniz denerken ise bir tane panel'e bunu yazın ve diğer bileşenlerin -mesela TEdit- Object Inspector'deki event sayfasında OnMouseMove eventinin yanındaki açılır liste kutusundan TPanel'e ait olan OnMouseMove olayını seçin... OnMouseMove için de aynı işlemi tekrarlayın. :idea:

- Formunuzdaki her nesne için aynı TPanel'e ait kaynağı gösterebilirsiniz. Bu şekilde tek satır fazladan kod yazmadan aynı özelliği TEdit'e ve diğer yapacağınız nesnelere de yüklemiş olursunuz... :idea:

Kod: Tümünü seç

const
  sizeBorder         = 2;
  sc_SizeLeft        = $F001;
  sc_SizeRight       = $F002;
  sc_SizeTop         = $F003;
  sc_SizeTopLeft     = $F004;
  sc_SizeTopRight    = $F005;
  sc_SizeBottom      = $F006;
  sc_SizeBottomRight = $F008;
  sc_SizeBottomLeft  = $F007;
  sc_DragMove        = $F012;

Kod: Tümünü seç

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  With TCustomControl(Sender) do
  begin
    ReleaseCapture;
    if(X >= Width - sizeBorder) And
       NOT((Y <= sizeBorder)  or (Y >= Height -sizeBorder)) then
       Perform(WM_SysCommand, sc_SizeRight, 0)
    else
    if Not((X <= sizeBorder) or (X >= Width -sizeBorder)) And
       (Y <= sizeBorder) then
       Perform(WM_SysCommand, sc_SizeTop, 0)
    else
    if (X <= sizeBorder) And (Y <= sizeBorder) then
       Perform(WM_SysCommand, sc_SizeTopLeft, 0)
    else
    if (X >= Width -sizeBorder) and (Y <= sizeBorder) then
       Perform(WM_SysCommand, sc_SizeTopRight , 0)
    else
    if Not((X <= sizeBorder) or (X >= Width -sizeBorder)) And
       (Y >= Height - sizeBorder)  then
       Perform(WM_SysCommand, sc_SizeBottom , 0)
    else
    if (Y >= Height -sizeBorder)  And (X <= sizeBorder)  then
       Perform(WM_SysCommand, sc_SizeBottomLeft , 0)
    else
    if (Y >= Height -sizeBorder) and (X >= Width - sizeBorder)
    then
       Perform(WM_SysCommand, sc_SizeBottomRight , 0)
    else
    if Not((Y <= sizeBorder) or (Y >= Height -sizeBorder)) And
       (X <= sizeBorder)  then
       Perform(WM_SysCommand, sc_SizeLeft , 0)
    else
    begin
       Perform(WM_SysCommand, SC_DragMove, 0);
    end;
  end;
end;

Kod: Tümünü seç

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   With TCustomControl(sender) do
   begin
     if ( X <= sizeBorder ) or ( X >= Width -sizeBorder ) then
     begin
        if ( Y >= Height - sizeBorder ) then
        begin
          if ( X >= Width - sizeBorder ) then
            Cursor := crSizeNWSE
          else
            Cursor := crSizeNESW;
        end
        else
        if ( Y <= sizeBorder ) then
        begin
          if ( X >= Width -sizeBorder ) then
            Cursor := crSizeNESW
          else
            Cursor := crSizeNWSE;
        end
        else
          Cursor := crSizeWE;
     end
     else
     if ( Y <= sizeBorder ) or ( Y >= Height - sizeBorder ) then
     begin
        Cursor := crSizeNS;
     end
     else
        Cursor := crDefault;
   end;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

Mesaj gönderen cfyasar »

kod için teşekkürler. panel de çalışıyor, diğer bileşenler için de ayarlayabilirim. @pulp da iyi niyetle yardım etmeye çalıştı ama form da yeni olduğumuz için hata yapmış olabiliriz. doğrusunu gösterdiniz, sağolun
öğrenmek, zorlukları yenmektir.
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

Mesaj gönderen cfyasar »

bu kodlarla neden label image i boyutlandıramıyorum?
öğrenmek, zorlukları yenmektir.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Merhaba.
Image TGraphic sınıfından, o nedenle boyutlandıramıyorsunuz..
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

Mesaj gönderen cfyasar »

label neden olmuyor o zaman?
öğrenmek, zorlukları yenmektir.
ibr_ozdemir
Üye
Mesajlar: 25
Kayıt: 27 Nis 2005 02:09

Mesaj gönderen ibr_ozdemir »

kolay gelsin
Perform windows biriminden biryordam yanlış hatırlamıyorsam api olması lazım yanlışsam kusura bakmayın windowsun bileşene hükemdebilmesi için bileşeninin kulpu yani handle olmalı faka (başka bir deyişle TWinControl den türemiş olmalı) TLabel , TImage bu gibi nesneler TGraphicControl den türer windowsda kulpsuz oldukları için bu bileşenlere erişemez
buna benzer bir şekilde bileşenlerin Anchors olayları TGraphicControl - TWinControl sonrasında biribirini tutmaz farklı telden çalar galiba birisini windows birisini delphi düzenlemeye çalıştığı için :roll:
kolay gelsin
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

TLabel yerine TStaticText kullanabilirsiniz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba,
Yanlış hatırlamıyorsam Developer Express'in kaynak kodlarıyla birlikte dağıttığı Forum Library adında bir paketi vardı, ve bu pakette bu işi gören bir adet bileşen mevcuttu, incelemeni tavsiye ederim...

Ayrıca Greatis Form Designer diye bir bileşen var, ama ücretli
Cevapla