Kodlama yaparken bazen nesneyi kod satırında oluşturup form üzerine ekleme gibi ihtiyaç duyabiliyoruz bu gibi durumlar için bu makalemde örnek olarak ListBox sınıfından bir inheritance(kalıtım) alıp form üzerine oluşturmuş olduğumuz nesneyi eklemeyi göreceğiz.
Öncelikle yapmamız gereken Uses Satırına Vcl.StdCtrls(Standart Kontroller Sınıfı)’nı ekliyoruz böylece standart kontrollerin class(sınıf)’ina erişebileceğiz. Embarcaderonun sürüm farklılıklarından dolayı uses satırına sadece StdCtrls eklemeniz gerekebilir üstteki kütüphaneye erişemezseniz birde “StdCtrls” kütüphanesini kullanmayı deneyin ikiside aynı ama Embarcadero’nun sürümüyle beraber gelen değişikliktir.
Örnek uses satırı
1 2 | uses Vcl.Forms, Vcl.StdCtrls; |
Global olarak tanımlama yapabileceğimiz variable(değişken) bloğuna aşağıdaki örnek kodda görüldüğü gibi TListBox sınıfından ListBox adından bir kalıtım alacağız.
1 2 3 4 | var Form1: TForm1; //TlistBox sınıfından ListBox adında bir kalıtım(inheritance) alınmıştır. ListBox: TListBox; |
En son olarakda Formun Oluşma Olayı olan OnCreate olayına isterseniz form üzerinden çift tıklayarak isterseniz formun boş bir alanına tıkladıktan sonra Object Inspector Kısmından Oncreate Adlı satırın sağındaki kısım eğer boşsa daha önce form create olayına herhangi bir olay bağlanılmamış demektir eğer yeni bir OnCreate olayı oluşturmak isterseniz çift tıklamanız yeterlidir böylece OnCreate Procedure’ne yönlendirileceksiniz.
Oncreate Olayına eklemeniz gereken kod satırları şu şekildedir;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | procedure TForm1.FormCreate(Sender: TObject); begin {TListBox Sınıfının Örneği Oluşturulmuştur Form1 yazan yere Self'de yazabilirsiniz aynı işi yapmaktadır.} ListBox := TListBox.Create(Form1); {ListBox nesnesinin hangi nesnenin alt üyesi olacağını belirtiyoruz buraya panel, groupbox gibi nesnelerinde alt üyesi olması için gerekli nesnenin adını Form1 kısmına yazabiliriz.} ListBox.Parent := Form1; //Oluşan nesnenin üstten alacağı boşluk. ListBox.Top := 15; //Oluşan nesnenin soldan alacağı boşluk. ListBox.Left := 10; //ListBox nesnesine Asp adında yeni bir eleman ekliyoruz. ListBox.Items.Add('Asp'); end; |
Kullanmış olduğumuz kodların tam halide şu şekildedir;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | uses Vcl.Forms, Vcl.StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; //TlistBox sınıfından ListBox adında bir kalıtım(inheritance) alınmıştır. ListBox: TListBox; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin {TListBox Sınıfının Örneği Oluşturulmuştur Form1 yazan yere Self'de yazabilirsiniz aynı işi yapmaktadır.} ListBox := TListBox.Create(Form1); {ListBox nesnesinin hangi nesnenin alt üyesi olacağını belirtiyoruz buraya panel, groupbox gibi nesnelerinde alt üyesi olması için gerekli nesnenin adını Form1 kısmına yazabiliriz.} ListBox.Parent := Form1; //Oluşan nesnenin üstten alacağı boşluk. ListBox.Top := 15; //Oluşan nesnenin soldan alacağı boşluk. ListBox.Left := 10; //ListBox nesnesine Asp adında yeni bir eleman ekliyoruz. ListBox.Items.Add('Asp'); end; end. |
“Ancak bu yazılan programı installshild türü bir program ile setup.exe haline çevirip başka PC veya PC lere kurduğumuzda, veritabanı adı değişmeyecek, ancak PC adı muhakkak ki değişecek, bu sorunu nasıl aşacağız.”
Exe’nizin bulunduğu klasöre bir tane “.ini” dosyası oluşturun. Bu dosyanın içine SQL INSTANCE NAME, DB Name, isterseniz LoginName ve LoginPasswordu yazın. MainForm’unuzun onCreate veya onShow eventında connection string oluşturup ADOConnection.String propertysine set edin.
Not: ADOConnection nesnesinin Connected propertysi design modda False olsun!!!
Örnek Kod;
procedure TMainMethods.Baglan(ALoginName: string = ”; APass: string = ”);
var
AStr, AServer, ADB: string;
AIniFile: TextFile;
begin
if FileExists(SM.FilesFolderPath + ‘config.ini’) then
begin
AssignFile(AIniFile, SM.FilesFolderPath + ‘config.ini’);
Reset(AIniFile);
Readln(AIniFile, AServer); // AServer değişkenine config.ini dosyasındaki brinci satırı set eder..
Readln(AIniFile, ADB); // ADB değişkenine config.ini dosyasındaki iinci satırı set eder..
if ALoginName = ” then
ALoginName := ‘XXX’;
if APass = ” then
APass := ‘YYY’;
SM.ADOConnAna.Connected := False;
AStr := AStr + ‘Provider=SQLOLEDB.1;Password=’ + QuotedStr(APass) + ‘;’;
AStr := AStr + ‘Persist Security Info=False;User ID=’ + QuotedStr(ALoginName) + ‘;’;
AStr := AStr + ‘Initial Catalog=’ + ADB + ‘;’;
AStr := AStr + ‘Data Source=’ + AServer +’;’;
AStr := AStr + ‘Use Procedure for Prepare=1;Auto Translate=True;’;
AStr := AStr + ‘Packet Size=4096;Use Encryption for Data=False;’;
AStr := AStr + ‘Tag with column collation when possible=False’;
SM.ADOConnAna.ConnectionString := AStr;
SM.ADOConnAna.Connected := True;
end;
end;
* “.ini” dosyasının içine isterseniz sadece PC Adı bilgisini yazabilirsiniz veya direk connection stringi de yazabilirsiniz. Nasıl arzu ederseniz.
* Ben kendi setuplarımda bu ini dosyasını exe klasörüne setup esnasında dinamik bir şekilde oluşturuyorum, siz de bu gibi aksiyonlara girebilirsiniz.
En basit açıklama bu sanırım internette çok teşekkürler
alabilirsin.Macten tut seri nolarına kadar alabilirsin.
source verebilseydin daha iyi olurdu aklımda başka şeyler vardı. en azından istediğim şeyleri create ile yapardım.ona buna visible yapıp şişirmezdim.
Soruma yanıt verebilecek Delphi diline hakim bir Allah’ımın kulu yokmu?
Merhaba,
2013-2014 yıllarında Delphi ile kodlama yaptım fakat sonrasındaki yıllarda tamamen .Net, Javascript ağırlıklı kodlamalar yaptım o yüzden Delphi ortamım olmadığından ve bilgiler ilk günkü gibi taze olmadığından yardımcı olamıyorum.
kurulum esnasında bilgisayardan yada kullanıcıdan bilgisayar adını alamaz mısınız
Selam halil, Delphi ile geliştirme yapmayı yaklaşık 3 yıl önce bıraktım o yüzden Delphi geliştirme ortamım v.s. ve o günkü bilgim olmadığından destek olamıyorum kusura bakma.
Delphi Kod İle Nesne Oluşturup Form Üzerine Yerleştirme konusunda benim başka bir sorunum var. Cevaplarsanız memnun olurum.
Bilgi Notu:
Delphi 10.2 versiyonu, MSSQL Management Studio programı ile de MSSQL veritabanına ulaşıyorum ve veri alabiliyorum. Bu işlemleri yaparken de hazır ADOQuery ile ADOConnection nesnelerini kullanıyorum.
Sorunum :
ADOConnection nesnesini oluşturup bağlantı kurarken, Bilgisayar adını ve veritabanı(Database) adı kod ile girmek zorundayız. Buraya kadar problem yok;
Ancak bu yazılan programı installshild türü bir program ile setup.exe haline çevirip başka PC veya PC lere kurduğumuzda, veritabanı adı değişmeyecek, ancak PC adı muhakkak ki değişecek, bu sorunu nasıl aşacağız.
Bilgilendirirseniz size minnetar olurum. Teşekkürler.
Setup haline çevirdin, kurarken mi sorun yaşıyorsun
işime yaradı sağol.
İhtiyacınızı görmüş olmasına sevindim.