Delphi Can
Run Time paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak?(ÇÖZÜLDÜ) - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Run Time paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak?(ÇÖZÜLDÜ) (/showthread.php?tid=5892)



Run Time paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak?(ÇÖZÜLDÜ) - Hsavci - 07-04-2021

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;



Run Time oluşan panelin form üzerinde sürüklendikten sonraki kordinatları? - Hsavci - 07-04-2021

Yukarıdaki sorumun Cevabını uğraşırkern kendim buldum.

edit7.text:=(inttostr((Sender as TPanel).left)+'x'+inttostr((Sender as TPanel).top));


Cvp: Run Time oluşan panelin form üzerinde sürüklendikten sonraki kordinatları? - Mr.X - 07-04-2021

Kodlarınızı okunur halde paylaşmanız daha iyi olacaktır.


Run Time oluşan panelin form üzerinde sürüklendikten sonraki kordinatları? - Hsavci - 07-04-2021

Çok teşekkür ederim. şimdi düzenledim tekrar.


Cvp: Çalışma zamanında paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak? - Hsavci - 07-04-2021

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


Çalışma zamanında paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak? - mustafaozpinar - 07-04-2021

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;



Cvp: Çalışma zamanında paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak? - Hsavci - 07-04-2021

(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


Çalışma zamanında paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak? - ozcanm - 08-04-2021

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;



Çalışma zamanında paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak? - Hsavci - 08-04-2021

Mehmet bey yazdığınız kod çok işime yaradı.Çok Teşekkürler.