Runtime da create edilen timage'ın drag drop parent sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Runtime da create edilen timage'ın drag drop parent soru

Mesaj gönderen mrmarman »

Evet sonuç olumlu.
Beni de her record için -ki genelde dinamik array ve string illa ki kullanıyorum- bir de bu record tipini dizginlemek için fazladan bir CONST tanımlama külfetinden kurtardınız. :D Class olsa Free ederiz ama Finalize kavramını hakikaten bilmiyordum.

- Araştırınca
Finalize Procedure yazdı:Description
The Finalize procedure cleans up strings, dynamic arrays, interfaces, Variants, and records or arrays that contain these types. Delphi automatically finalizes variables of string, dynamic array, interface, or Variant type, but if you allocate such types dynamically, you need to finalize the memory before freeing it.

If you are finalizing more than one item in an array, pass the count of the number of array elements as the Count parameter. The Count is the number of array elements, not the number of bytes to be freed.

Finalize is not a real procedure.
Kısaca der ki; Delphi aslında string, dinamik dizi, interface ve variant tipleri içeren değişkenleri otomatik olarak finalize eder, ancak bu değişkenlere - ki örnekteki gibi sadece ARMAN dediğimiz zaman statik ama biz bunu bir fonksiyon/procedure ürünü olarak vermiştik (örnek copy() fonksiyon) hatırlasınız.- bu gibi dinamik atama yaparsak o zaman FREE etmeden önce finalize edilmesine ihtiyaç duyulurmuş.

Eğer dinamik bir array finalize edilecekse, hele birden fazla da itemi varsa ( setlength() ile dizi boyunu tanımlarız ya ondan bahsediyor ) o zaman yanına virgül koyup dizideki eleman sayısını da vermek gerekiyormuş ( Finalize( ArrayAdi, itemsayisi );) . Bu parametre olarak verilen rakam dizinin eleman sayısı olup, aman bir yanlışlık olmasın diye sizeof() gibisinden byte değildir diye de eklemişler. :idea:
Resim
Resim ....Resim
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Runtime da create edilen timage'ın drag drop parent soru

Mesaj gönderen thelvaci »

Konu nereden nereye vardı ama faydalı bilgiler paylaştık sanırım beraberce :)
mss
Üye
Mesajlar: 16
Kayıt: 30 Eyl 2013 09:45

Re: Runtime da create edilen timage'ın drag drop parent soru

Mesaj gönderen mss »

Mrmarman hocam baya uzun zaman geçti. Veridiğiniz örnegi kendi projeme uyarlamaya çalıştım ancak ne yaptıysam aynı sonuca ulaşamadım hatta vazgeçtim bi ara yapmaktan ama bir sorun akla takıldımı gitmiyor. Sorunum dublor panel sadecepanelin çevresi kadar hareket edip başka yere ilerlememekte kodu aşağıdaki gibidir. Cevaplamanız beni müteşekkir eder.

Kod: Tümünü seç


var
  Form2: TForm2;
  pt1,ptf:tpoint;
  move:boolean;
  omp,//orjmousepoint
  frp,//orjimageformgenelindekireferanspoint
  oif:tpoint;//orjimagefarkpoint
  bt,bg:boolean;

const
  ximarjinx=4;
  ximarjiny=4;

Kod: Tümünü seç

Procedure tform2.imgmousedown (sender:tobject;button:tmousebutton;Shift:tshiftstate;
x,y:integer);
begin
    pnlmousedown(sender,button,shift,x,y);
end;


Procedure tform2.pnlmousedown (sender:tobject;button:tmousebutton;Shift:tshiftstate;
x,y:integer);
begin
  if button=mbleft then
    begin
      bt:=true;
      pd.Parent:=form2;
      omp:=point(x,y);
      frp:=self.ScreenToClient(timage(sender).ClientToScreen(Point(x,y)));
      oif.X:=frp.X-omp.X;
      oif.y:=frp.y-omp.y;
      image3.Picture.Assign(timage(sender).Picture);
      image3.autosize:=true;
      image3.Proportional:=true;
      image3.Left:=ximarjinx;
      image3.Top:=ximarjiny;
      pd.Width:=image3.Width+ximarjinx*2;
      pd.height:=image3.Height+ximarjiny*2;
      pd.Color:=clred;
      pd.Left:=oif.X-ximarjinx;
      pd.top:=oif.y-ximarjiny;
      PD.BringToFront;
      pd.Visible:=True;
      timage(sender).Visible:=false;

    end;
end;

Procedure Tform2.pnlmousemove(sender:tobject;shift:tshiftstate;x,y:integer);
begin
  if bt then
  begin

    pd.Left:=oif.X+x-omp.X-ximarjinx;
    pd.top:=oif.y+y-omp.y-ximarjiny;
    if (x>=tpanel(sender).Left) and (x<=tpanel(sender).width+tpanel(sender).left)
    and (y>=tpanel(sender).top) and (y<=tpanel(sender).height+tpanel(sender).top)
    then
     pd.Color:=cllime
    else
    pd.Color:=clred;
  end;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Runtime da create edilen timage'ın drag drop parent soru

Mesaj gönderen mrmarman »

DublorPaneli'n parenti Form olacak şekilde silip yeniden oluşturun. Sınırlarınız form olsun daha içerideki bir panel değil.

Başarılar
Resim
Resim ....Resim
Cevapla