Delphi Can

Orjinalini görmek için tıklayınız: Run Time paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak?(ÇÖZÜLDÜ)
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba,

Delphi 7 ve paradox ile hazırladığım bir çalışmam mevcut. form açıldığında data.db içinde kayıtlı bulunan isim ve bilgilere göre (isim-left-top-renk) otomatik paneller oluşturuyorum. bu paneller içinden istediğimi form üzerinde sürükleyip bırakmak istiyordum bunu çözdüm ancak seçtiğim paneli sürükledikten sonra bu panelin yeni left ve top değerini tabloya kayıt etmem gerekiyor o kısmı çözemedim.

form üzerine oluşan panellerden herhangi birini seçip sürükleyip formda bir yere bıraktıktan sonra bu taşıdığım panelin son bırakıldığı yerin left ve top değerini alabilirmiyiz? yardımcı olursanız sevinirim.
Saygılarımla 



unit Unit58;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtDlgs, DB, DBTables, DBCtrls, Buttons, StdCtrls, ExtCtrls,
 ComCtrls, Mask, Grids, DBGrids, pngimage, RzBckgnd;

type
 TForm58 = class(TForm)
   Button1: TButton;
   DBGrid1: TDBGrid;
   DBEdit1: TDBEdit;
   DBEdit2: TDBEdit;
   DBEdit3: TDBEdit;
   DBEdit4: TDBEdit;
   DBEdit5: TDBEdit;
   PageControl1: TPageControl;
   TabSheet1: TTabSheet;
   DBImage5: TDBImage;
   TabSheet2: TTabSheet;
   DBImage6: TDBImage;
   TabSheet3: TTabSheet;
   DBImage7: TDBImage;
   TabSheet4: TTabSheet;
   DBImage8: TDBImage;
   DBEdit6: TDBEdit;
   Edit1: TEdit;
   Edit4: TEdit;
   Edit2: TEdit;
   DBEdit7: TDBEdit;
   Edit3: TEdit;
   Edit5: TEdit;
   Button2: TButton;
   Button3: TButton;
   Button4: TButton;
   Button5: TButton;
   Button6: TButton;
   Edit6: TEdit;
   DBGrid3: TDBGrid;
   Panel4: TPanel;
   Label2: TLabel;
   DBEdit9: TDBEdit;
   DBEdit10: TDBEdit;
   DBEdit12: TDBEdit;
   DBEdit11: TDBEdit;
   BitBtn11: TBitBtn;
   BitBtn6: TBitBtn;
   DBEdit8: TDBEdit;
   DataSource1: TDataSource;
   Table1: TTable;
   DataSource2: TDataSource;
   Table2: TTable;
   DataSource3: TDataSource;
   Table3: TTable;
   OpenPictureDialog1: TOpenPictureDialog;
   BitBtn5: TBitBtn;
   BitBtn12: TBitBtn;
   TabSheet5: TTabSheet;
   DBImage1: TDBImage;
   Button7: TButton;
   DBEdit13: TDBEdit;
   DBEdit14: TDBEdit;
   RzBackground1: TRzBackground;
   Image3: TImage;
   Image1: TImage;
   Image2: TImage;
   Image4: TImage;
   Label1: TLabel;
   Edit7: TEdit;
   Edit8: TEdit;

   procedure FormShow(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
   procedure KMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);


 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form58: TForm58;
   K:TPanel;



implementation

uses Unit59, Unit1, Unit12, Unit62;



{$R *.dfm}




procedure TForm58.KMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const 

sc_DragMove=$F012;

begin

ReleaseCapture;

(Sender as TPanel).Perform(WM_SYSCOMMAND, sc_DragMove, 0);


edit7.text:=(inttostr((Sender as TPanel).left)+'x'+inttostr((Sender as TPanel).top)); // bu satırı ekleyince şimdi sorun çözüldü.

end;


procedure TForm58.FormShow(Sender: TObject);
begin
button1.Click;
end;

procedure TForm58.Button1Click(Sender: TObject);
var
BMrk:String;
y: Variant;
begin
BMrk:=Table1.BookMark;
with table1 do
begin
First;
while not EOF do
begin
K:=TPanel.Create(form1);
K.left:=StrToInt(dbedit2.text);
K.Top:=StrToInt(dbedit3.text);
K.Width:= StrToInt(dbedit4.text);
K.Height:= StrToInt(dbedit5.text);
K.Color:=StrToInt(DBedit14.text);
K.ParentColor:=False;
K.ParentBackground:=False;
K.ParentBiDiMode:=False;
K.parent:=Form58.PageControl1.Pages[StrToInt(dbedit7.Text)];
K.caption:=dbedit1.text;
K.font.size:=StrToInt(edit5.text);
K.Font.Name:='Times New Roman';
K.Font.color:=clblack;
K.OnMouseDown:=KMouseDown;
K.Cursor:=crHandPoint;


y :=Table2.Lookup('Masano', K.caption,'Masano');

if VarIsNull (y) then

begin


end
else
begin

end;
next;
end;
Table1.Bookmark:=BMrk;
end;
end;
Yukarıdaki sorumun Cevabını uğraşırkern kendim buldum.

edit7.text:=(inttostr((Sender as TPanel).left)+'x'+inttostr((Sender as TPanel).top));
Kodlarınızı okunur halde paylaşmanız daha iyi olacaktır.
Çok teşekkür ederim. şimdi düzenledim tekrar.
Bu oluşturduğum panellerin hepsini yok etmem gerekiyor.

K.destroy;

komutu ile sadece bir tanesini yok edebiliyorum. döngüye sokarak form üzerinde oluşan panellerin hepsini  nasıl yok edebiliriz?

Saygılarımla
Selamlar,
Bir kontrol yok edilirken Destroy değil Free kullanılmalıdır. Aksi halde ciddi sorun yaşarsınız.
  for i:=0 to Form1.ControlCount-1 do
    if Form1.Controls[i] is TPanel then
      Form1.Controls[i].Free;
(07-04-2021, Saat: 21:29)mustafaozpinar Adlı Kullanıcıdan Alıntı: [ -> ]Selamlar,
Bir kontrol yok edilirken Destroy değil Free kullanılmalıdır. Aksi halde ciddi sorun yaşarsınız.
  for i:=0 to Form1.ControlCount-1 do
    if Form1.Controls[i] is TPanel then
      Form1.Controls[i].Free;


procedure TForm58.Button9Click(Sender: TObject);
    var
 i:integer;

begin
for i:=0 to Form58.ControlCount-1 do
if Form58.Controls[i] is TPanel then
Form58.Controls[i].Free;

end;

Bir deneme yaptım ama form üzerinde bulunan ve proje tasarımı sırasında oluşturduğum paneli yok etti.
PageControl1-TabSheet1 üzerinde bulunan ve çalışma zamanında oluşturulan panelleri yok etmem gerekiyor.
Yardımcı olabilirseniz sevinirim.
Saygılarımla
procedure TForm1.PanelTemizle;
var
 i: Integer;
begin
for i := ComponentCount - 1 downto 0 do
 begin
   if (Components[i] is TPanel) and (TPanel(Components[i]).Parent = TabSheet1) then
     TPanel(Components[i]).Free;
 end;
end;
Mehmet bey yazdığınız kod çok işime yaradı.Çok Teşekkürler.