Delphi Can
Control Shirbazı gibi bir şey var mı? - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: Control Shirbazı gibi bir şey var mı? (/showthread.php?tid=1601)



Control Shirbazı gibi bir şey var mı? - nehirnnn - 02-12-2017

Mobil ve pc üzerinde çalışacak bir uygulama yazıyorum. MyDac kullanıyorum. Query ve tablolar ayrı bir DataModul dosyasında. Örneğin tablomda 30 tane alan var. Ve 25 tane tablom var.
Form üzerinde bu alanları (editbox, date, memo, combobox) otomatik olarak oluşturmanın bir yolu var mı?
HTML üzerinde çok kolay bir şekilde yapabildiğim bu konu delphide beni yordu.
Bir de bu kadar çok alanla çalışırken hangi layout u seçmeliyim? Örneğin controllerin sırasını değiştiremiyorum çoğunda, üsttekini alta, alttakini üste alamıyorum. En rahat hangisini kullanabilirim.
Bu konuda beni yönlendirirseniz çok sevinirim. Yoksa  çok fazla alan ve tabloyla çalışmak zulüm benim için Delphi de...


Cvp: Control Shirbazı gibi bir şey var mı? - Halil Han BADEM - 02-12-2017

(02-12-2017, Saat: 18:45)nehirnnn Adlı Kullanıcıdan Alıntı: Mobil ve pc üzerinde çalışacak bir uygulama yazıyorum. MyDac kullanıyorum. Query ve tablolar ayrı bir DataModul dosyasında. Örneğin tablomda 30 tane alan var. Ve 25 tane tablom var.
Form üzerinde bu alanları (editbox, date, memo, combobox) otomatik olarak oluşturmanın bir yolu var mı?
HTML üzerinde çok kolay bir şekilde yapabildiğim bu konu delphide beni yordu.
Bir de bu kadar çok alanla çalışırken hangi layout u seçmeliyim? Örneğin controllerin sırasını değiştiremiyorum çoğunda, üsttekini alta, alttakini üste alamıyorum. En rahat hangisini kullanabilirim.
Bu konuda beni yönlendirirseniz çok sevinirim. Yoksa  çok fazla alan ve tabloyla çalışmak zulüm benim için Delphi de...

Merhabalar,

Yanlış anlamadıysam, siz veriye göre nesne oluşturmak istiyorsunuz. Ve bunu manuel yerine otomatikman kodları ile yapmak istiyorsunuz.

Eğer doğru anlamış isem;

for ve nesne oluşturma ile bu dedikleriniz kolay. Size fikir verebilmesi için geçmişte yazdığım ve bakarken utandığım Rolleyes  bir kod bloğunu paylaşayım.

procedure TbiMainMenu.ProjeYenile(SQLSorgu: String);
var
aquery, aquerya: TUniQuery;
I, I2: Integer;
Panel: TbsSkinPanel;
Baslik, ProjeSahibi, Dil, Kisi, Tarih, ID: TbsSkinLabel;
Katil: TbsSkinButton;
ScrollPanel: TbsSkinScrollPanel;
begin
projeler.Close;
projeler.SQL.Text := SQLSorgu;
projeler.Open;
projeler.Active := True;


for I2 := biMainMenu.ComponentCount - 1 downto 0 do
begin
 if biMainMenu.Components[I2] is TbsSkinScrollPanel then
 biMainMenu.Components[I2].Destroy;
end;


ScrollPanel := TbsSkinScrollPanel.Create(Self);
ScrollPanel.SkinData := BiLogin.bsSkinData1;
ScrollPanel.Parent := biMainMenu;
ScrollPanel.Visible := False;
// ScrollPanel.ScrollType := stHorizontal;
// ScrollPanel.ScrollOffset := 100;
// ScrollPanel.ScrollTimerInterval := 100;
ScrollPanel.Top := 47;
ScrollPanel.Width := 617;
ScrollPanel.Left := 381;
ScrollPanel.Height := 477;
ScrollPanel.ScrollType := stVertical;
ScrollPanel.Name := 'bsSkinScrollPanel1';
ScrollPanel.Visible := True;

projeler.first;

 while not projeler.Eof do
begin
 for I := 0 to projeler.RecordCount - 1 do
 begin
  Panel := TbsSkinPanel.Create(self);
  Panel.Parent := ScrollPanel;
  Panel.Visible := False;
  Panel.SkinData := BiLogin.bsSkinData1;
  Panel.TransparentMode := True;
  Panel.Name := 'Panel'+IntToStr(I);
  Panel.BorderStyle := bvRaised;
  Panel.Top := 16 + I * 140;
  Panel.Left := 16;
  Panel.Height := 130;
  Panel.Width := 585;


  Baslik := TbsSkinLabel.Create(self);
  Baslik.Parent := Panel;
  Baslik.Visible := False;
  Baslik.SkinData := BiLogin.bsSkinData1;
  Baslik.Caption := projeler.FieldByName('BASLIK').AsString;
  Baslik.UseSkinSize := False;
  Baslik.UseSkinFont := False;
  Baslik.DefaultFont.Style := [fsBold];
  Baslik.DefaultFont.Size := 10;
  Baslik.Left := 14;
  Baslik.Top := 11;
  Baslik.Width := 529;
  Baslik.Height := 21;
  Baslik.Visible := True;



  ProjeSahibi := TbsSkinLabel.Create(self);
  ProjeSahibi.Parent := Panel;
  ProjeSahibi.Visible := False;
  ProjeSahibi.SkinData := BiLogin.bsSkinData1;
  aquery := TUniQuery.Create(nil);
  aquery.Connection := BiLogin.UniConnection1;
  aquery.Close;
  aquery.SQL.Text := 'select * from bilogin where ID='+projeler.FieldByName('SAHIPID').AsString;
  aquery.Open;
  aquery.Active := True;
  ProjeSahibi.Caption := 'Proje Sahibi: '+aquery.FieldByName('ADSOYAD').AsString;
  ProjeSahibi.Left := 16;
  ProjeSahibi.Top := 28;
  ProjeSahibi.Width := 529;
  ProjeSahibi.Height := 21;
  ProjeSahibi.Visible := True;


  Dil := TbsSkinLabel.Create(self);
  Dil.Parent := Panel;
  Dil.Visible := False;
  Dil.SkinData := BiLogin.bsSkinData1;
  Dil.Caption := 'Proje Dili: '+projeler.FieldByName('DIL').AsString;
  Dil.Left := 16;
  Dil.Top := 46;
  Dil.Width := 529;
  Dil.Height := 21;
  Dil.Visible := True;


  ID := TbsSkinLabel.Create(self);
  ID.Parent := Panel;
  ID.Visible := False;
  ID.SkinData := BiLogin.bsSkinData1;
  ID.Caption := projeler.FieldByName('ID').AsString;
  ID.Left := 16;
  ID.Top := 46;
  ID.Width := 529;
  ID.Height := 21;;


  Kisi := TbsSkinLabel.Create(self);
  Kisi.Parent := Panel;
  Kisi.Visible := False;
  Kisi.SkinData := BiLogin.bsSkinData1;
  Kisi.Caption := 'Proje Katılım Sayısı: '+IntToStr(projeler.FieldByName('KISI').AsInteger);
  Kisi.Left := 16;
  Kisi.Top := 63;
  Kisi.Width := 529;
  Kisi.Height := 21;
  Kisi.Visible := True;


  Tarih := TbsSkinLabel.Create(self);
  Tarih.Parent := Panel;
  Tarih.Visible := False;
  Tarih.SkinData := BiLogin.bsSkinData1;
  Tarih.Caption := 'Proje Başlangıç Tarihi: '+DateToStr(projeler.FieldByName('TARIH').AsDateTime);
  Tarih.Left := 16;
  Tarih.Top := 81;
  Tarih.Width := 529;
  Tarih.Height := 21;
  Tarih.Visible := False;


  Katil := TbsSkinButton.Create(self);
  Katil.Parent := Panel;
  Katil.Visible := False;
  Katil.SkinData := BiLogin.bsSkinData1;
  Katil.UseSkinSize := False;
  Katil.CanFocused := True;
  Katil.TabStop := True;
  Katil.Name := 'B'+IntToStr(projeler.FieldByName('ID').AsInteger);
  Katil.Caption := 'Ayrıntılar';
  Katil.Top := 90;
  Katil.Width := 75;
  Katil.Height := 35;
  Katil.Left := 480;
  Katil.UseSkinSize := False;
  Katil.CanFocused := False;
  Katil.OnClick := KatilButon;
  Katil.Visible := True;
  Panel.Visible := True;

  projeler.Next;
  end;
end;


// AQueryA := TUniQuery.Create(self);
// AQueryA.Connection := BiLogin.UniConnection1;
// AQueryA.Close;
// AQueryA.SQL.Text := 'select * from biprojeler where SAHIPID='+IntToStr(biLogin.UniQuery1.FieldByName('ID').AsInteger);
// AQueryA.ExecSQL;
// AQueryA.Open;
// AQueryA.Active := True;
//
// if AQuerya.RecordCount > 0 then
// begin
//  BiProjeEkle.Enabled := True;
// end
// else
// begin
//   biProjeEkle.Enabled := False;
// end;



end;



Saygılarımla,
İyi çalışmalar.


Control Shirbazı gibi bir şey var mı? - nehirnnn - 02-12-2017

Cevabınız için teşekkürler. Ben aslında design bölümünden oluşturmak istiyorum. Bu şekilde çok fazla değer girmem ve tüm x,y vb. değerleri belirtmem gerekir.
Sihirbaz yoksa bile manual olarak ekleyim, ama sonrasında yerlerini kolayca değiştirebileyim, araya kolayca eklemeler yapabileyim istiyorum. Html deki basit bir Table nesnesi işimi görebilecekken, bir dolu layout nesnesi var delphide, ancak pratik değiller...


Control Shirbazı gibi bir şey var mı? - Tuğrul HELVACI - 02-12-2017

İlgili TDataset nesnesinin üzerinde çift tıklayın, fields editöre field'ların dolmasını sağlayın. Sonra tüm fieldları seçin ve fields editörden formun üzerine sürükleyip bırakın.


Cvp: Control Shirbazı gibi bir şey var mı? - Hashshashin - 02-12-2017

Python kullanirken döngü ile nesneleri belirli bir sayıda ve mecburen ayni isimde oluşturuyordum. Buton ve label oluştururken sıkıntı olmuyordu ama edit vb nesnelerden veri Alman gerekirse sıkıntı olur diye düşünüyorum.

Kabaca şöyle:

for i in liste:
   label = Label(text=i)
   buton = Button(text=“Buton“+i, command=göster(i))

   label.pack()
   buton.pack()

Umarım bir fikir edinmenize yardımcı olmuşumdur. İyi çalışmalar...


Cvp: Control Shirbazı gibi bir şey var mı? - savasabd - 02-12-2017

(02-12-2017, Saat: 18:45)nehirnnn Adlı Kullanıcıdan Alıntı: Yoksa  çok fazla alan ve tabloyla çalışmak zulüm benim için Delphi de...
Hemen Delphi'yi suçlamayalım.Birçok doktrin ve sistem için üç aşağı beş yukarı şu doğrudur ki: çoğunlukla sorun sistemde değil uygulayanlardadır.Bir de Kevin Mitnick'in şu sözünü çok severim:"Bir sistemin en zayıf noktası insandır."


Cvp: Control Shirbazı gibi bir şey var mı? - nehirnnn - 03-12-2017

(02-12-2017, Saat: 21:23)savasabd Adlı Kullanıcıdan Alıntı:
(02-12-2017, Saat: 18:45)nehirnnn Adlı Kullanıcıdan Alıntı: Yoksa  çok fazla alan ve tabloyla çalışmak zulüm benim için Delphi de...
Hemen Delphi'yi suçlamayalım.Birçok doktrin ve sistem için üç aşağı beş yukarı şu doğrudur ki: çoğunlukla sorun sistemde değil uygulayanlardadır.Bir de Kevin Mitnick'in şu sözünü çok severim:"Bir sistemin en zayıf noktası insandır."

Benimki suçlama değil. Sadece böylesi büyük bir programdan beklentim çok. Belkide şu an yüzde 10 una hakimim sadece. Ama bana lazım olan tüm konularda makaleleri okuyorum, videoları izliyorum. Bunlarda sorun yok. Ama videolarda doğal olarak üç dört tane control nesnesi ekliyor. 30 tane ekleyince, sonra sıralamayı değiştirmek istediğimde, araya bir şey eklemek istediğimde beni çok zorluyor.

(02-12-2017, Saat: 20:29)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: İlgili TDataset nesnesinin üzerinde çift tıklayın, fields editöre field'ların dolmasını sağlayın. Sonra tüm fieldları seçin ve fields editörden formun üzerine sürükleyip bırakın.

Kullandığım diğer Connection larda bunu kullanıyordum. Ancak MyDac'da olmuyor maalesef. Dediğiniz gibi tekrar denedim. Query üzerinde sağ tıkladım, Fields Editor ü açtım. Alanları ekledim. Ancak bu alanları form üzerine sürükleyemiyorum. Eğer çalışsa büyük kolaylık olacaktı benim için.


Cvp: Control Shirbazı gibi bir şey var mı? - edo - 04-12-2017

(03-12-2017, Saat: 01:35)nehirnnn Adlı Kullanıcıdan Alıntı:
(02-12-2017, Saat: 21:23)savasabd Adlı Kullanıcıdan Alıntı: Hemen Delphi'yi suçlamayalım.Birçok doktrin ve sistem için üç aşağı beş yukarı şu doğrudur ki: çoğunlukla sorun sistemde değil uygulayanlardadır.Bir de Kevin Mitnick'in şu sözünü çok severim:"Bir sistemin en zayıf noktası insandır."

Benimki suçlama değil. Sadece böylesi büyük bir programdan beklentim çok. Belkide şu an yüzde 10 una hakimim sadece. Ama bana lazım olan tüm konularda makaleleri okuyorum, videoları izliyorum. Bunlarda sorun yok. Ama videolarda doğal olarak üç dört tane control nesnesi ekliyor. 30 tane ekleyince, sonra sıralamayı değiştirmek istediğimde, araya bir şey eklemek istediğimde beni çok zorluyor.

(02-12-2017, Saat: 20:29)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: İlgili TDataset nesnesinin üzerinde çift tıklayın, fields editöre field'ların dolmasını sağlayın. Sonra tüm fieldları seçin ve fields editörden formun üzerine sürükleyip bırakın.

Kullandığım diğer Connection larda bunu kullanıyordum. Ancak MyDac'da olmuyor maalesef. Dediğiniz gibi tekrar denedim. Query üzerinde sağ tıkladım, Fields Editor ü açtım. Alanları ekledim. Ancak bu alanları form üzerine sürükleyemiyorum. Eğer çalışsa büyük kolaylık olacaktı benim için.

Bu özellik Delphi'nin çok eski sürümlerinden beri mevcut, çalışmıyor ise bir şeyi yanlış yapıyor olma ihtimaliniz yüksek. Ayrıca yazdıklarınız sizin için net olabilir fakat yaşadığınız sorunu da net olarak aktarmadığınızı/aktaramadığınızı düşünüyorum. Neyin ne sıralamasını değiştirmek istiyorsunuz da zorlanıyorsunuz, emin olun buradaki insanların bir form üzerinde yüzlerce nesnesi olan en az bir kaç ekranı vardır ve dediğiniz gibi bir zorluk yaşadıklarını sanmıyorum. Siz yaşadığınız sıkıntıyı/zorluğu tam olarak ifade ederseniz eminim güzel çözümler/cevaplar zaten gelecektir.