Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Run Time paneller oluşturmak ve drag-drop ile panelin kordinatlarını bulmak?(ÇÖZÜLDÜ)
#1
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;
Cevapla
#2
Yukarıdaki sorumun Cevabını uğraşırkern kendim buldum.

edit7.text:=(inttostr((Sender as TPanel).left)+'x'+inttostr((Sender as TPanel).top));
Cevapla
#3
Kodlarınızı okunur halde paylaşmanız daha iyi olacaktır.
FMX - Software Developer | Serhat Yanalak
Cevapla
#4
Çok teşekkür ederim. şimdi düzenledim tekrar.
Cevapla
#5
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
Cevapla
#6
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;
Cevapla
#7
(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
Cevapla
#8
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;
Cevapla
#9
Mehmet bey yazdığınız kod çok işime yaradı.Çok Teşekkürler.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  AdoQuery ile ilgili bir sorun. (Çözüldü) Bay_Y 4 111 17-04-2024, Saat: 10:58
Son Yorum: Bay_Y
  Fastreport İçindekiler Sayfası Oluşturma [ÇÖZÜLDÜ] bydelphi 1 237 18-03-2024, Saat: 12:11
Son Yorum: bydelphi
  Çok Satırlı Filtreleme [Çözüldü] bünyamin68 12 1.352 14-02-2024, Saat: 22:42
Son Yorum: mustafaozpinar
  [ÇÖZÜLDÜ] macos işletim sistemine program yazmak shooterman 5 513 02-02-2024, Saat: 09:54
Son Yorum: shooterman
  COZULDU veritabani prg yerine ne kullanabilirim. sadikacar60 8 775 29-01-2024, Saat: 18:41
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi