var
PersonelKayit: Tclform;
PersonelScroll: TCLVertScrollBox;
DBConnection: TCLSQLiteConnection;
PersonelQuery: TCLSQLiteQuery;
// Paneller
pnlPersUst, pnlPersOrta, pnlPersAlt, pnlPersButton, pnlPersListe: TclProPanel;
// Üst Panel Bileşenleri
lblAd, lblSoyad, lblTCKN, lblDogumTarihi, lblTelefon, lblEposta: TClProLabel;
txtAd, txtSoyad, txtTCKN, txtDogumTarihi, txtTelefon, txtEposta: TclProEdit;
// Orta Panel Bileşenleri
lblAdres: TClProLabel;
txtAdres: TCLMemo;
lblPozisyon, lblMaas, lblAktif: TClProLabel;
cmbPozisyon: TClProComboBox;
txtMaas: TclProEdit;
chkAktif: TClProCheckBox;
// Button Panel
btnTemizle, btnKaydet, btnGuncelle, btnSil: TClProButton;
// Liste Panel
lblPersonelListesi: TClProLabel;
ListViewPersonel: TClProListView;
btnListeyiYenile: TClProButton;
{
// Form Oluşturma
PersonelKayit = Tclform.Create(self);
PersonelKayit.SetFormColor('#83a09f', '', clGNone);
PersonelKayit.Caption = 'Personel Kayıt Formu';
PersonelKayit.Width = 800;
PersonelKayit.Height = 700;
// Veritabanı Bağlantısı
DBConnection = PersonelKayit.AddNewSQLiteConnection(PersonelKayit, 'DBConnection');
DBConnection.DatabaseName = 'PersonelDB.db';
// SQL Sorgusu
PersonelQuery = PersonelKayit.AddNewSQLiteQuery(DBConnection, 'PersonelQuery');
PersonelQuery.SQL.Text = 'CREATE TABLE IF NOT EXISTS Personel (' +
'PersonelID INTEGER PRIMARY KEY AUTOINCREMENT, ' +
'Ad TEXT, Soyad TEXT, TCKN TEXT, DogumTarihi TEXT, ' +
'Telefon TEXT, Eposta TEXT, Adres TEXT, ' +
'PozisyonID INTEGER, Maas REAL, Aktifmi INTEGER)';
PersonelQuery.ExecSQL;
// Scroll Box
PersonelScroll = PersonelKayit.AddNewVertScrollBox(PersonelKayit, 'PersonelScroll');
PersonelScroll.Align = alClient;
//////////////////////////////////////////////////////////////////
// ÜST PANEL - Temel Bilgiler
pnlPersUst = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersUst');
pnlPersUst.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
pnlPersUst.SetclProSettings(pnlPersUst.clProSettings);
pnlPersUst.Align = alTop;
pnlPersUst.Height = 200;
// Ad
lblAd = PersonelKayit.AddNewProLabel(pnlPersUst, 'lblAd', 'Ad');
lblAd.clProSettings.FontColor = clAlphaColor.clWhite;
lblAd.clProSettings.FontSize = 12;
lblAd.clProSettings.TextSettings.Font.Style = [fsBold];
lblAd.Height = 25;
lblAd.Align = alTop;
txtAd = PersonelKayit.AddNewProEdit(pnlPersUst, 'txtAd', '');
txtAd.Height = 30;
txtAd.Align = alTop;
// Soyad
lblSoyad = PersonelKayit.AddNewProLabel(pnlPersUst, 'lblSoyad', 'Soyad');
lblSoyad.clProSettings.FontColor = clAlphaColor.clWhite;
lblSoyad.clProSettings.FontSize = 12;
lblSoyad.clProSettings.TextSettings.Font.Style = [fsBold];
lblSoyad.Height = 25;
lblSoyad.Align = alTop;
txtSoyad = PersonelKayit.AddNewProEdit(pnlPersUst, 'txtSoyad', '');
txtSoyad.Height = 30;
txtSoyad.Align = alTop;
// TCKN
lblTCKN = PersonelKayit.AddNewProLabel(pnlPersUst, 'lblTCKN', 'TC Kimlik No');
lblTCKN.clProSettings.FontColor = clAlphaColor.clWhite;
lblTCKN.clProSettings.FontSize = 12;
lblTCKN.clProSettings.TextSettings.Font.Style = [fsBold];
lblTCKN.Height = 25;
lblTCKN.Align = alTop;
txtTCKN = PersonelKayit.AddNewProEdit(pnlPersUst, 'txtTCKN', '');
txtTCKN.Height = 30;
txtTCKN.Align = alTop;
//////////////////////////////////////////////////////////////////
// ORTA PANEL - İletişim Bilgileri
pnlPersOrta = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersOrta');
pnlPersOrta.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
pnlPersOrta.SetclProSettings(pnlPersOrta.clProSettings);
pnlPersOrta.Align = alTop;
pnlPersOrta.Height = 180;
// Doğum Tarihi
lblDogumTarihi = PersonelKayit.AddNewProLabel(pnlPersOrta, 'lblDogumTarihi', 'Doğum Tarihi');
lblDogumTarihi.clProSettings.FontColor = clAlphaColor.clWhite;
lblDogumTarihi.clProSettings.FontSize = 12;
lblDogumTarihi.clProSettings.TextSettings.Font.Style = [fsBold];
lblDogumTarihi.Height = 25;
lblDogumTarihi.Align = alTop;
txtDogumTarihi = PersonelKayit.AddNewProEdit(pnlPersOrta, 'txtDogumTarihi', 'GG/AA/YYYY');
txtDogumTarihi.Height = 30;
txtDogumTarihi.Align = alTop;
// Telefon
lblTelefon = PersonelKayit.AddNewProLabel(pnlPersOrta, 'lblTelefon', 'Telefon');
lblTelefon.clProSettings.FontColor = clAlphaColor.clWhite;
lblTelefon.clProSettings.FontSize = 12;
lblTelefon.clProSettings.TextSettings.Font.Style = [fsBold];
lblTelefon.Height = 25;
lblTelefon.Align = alTop;
txtTelefon = PersonelKayit.AddNewProEdit(pnlPersOrta, 'txtTelefon', '');
txtTelefon.Height = 30;
txtTelefon.Align = alTop;
// E-posta
lblEposta = PersonelKayit.AddNewProLabel(pnlPersOrta, 'lblEposta', 'E-posta');
lblEposta.clProSettings.FontColor = clAlphaColor.clWhite;
lblEposta.clProSettings.FontSize = 12;
lblEposta.clProSettings.TextSettings.Font.Style = [fsBold];
lblEposta.Height = 25;
lblEposta.Align = alTop;
txtEposta = PersonelKayit.AddNewProEdit(pnlPersOrta, 'txtEposta', '');
txtEposta.Height = 30;
txtEposta.Align = alTop;
//////////////////////////////////////////////////////////////////
// ALT PANEL - İş Bilgileri
pnlPersAlt = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersAlt');
pnlPersAlt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
pnlPersAlt.SetclProSettings(pnlPersAlt.clProSettings);
pnlPersAlt.Align = alTop;
pnlPersAlt.Height = 250;
// Adres
lblAdres = PersonelKayit.AddNewProLabel(pnlPersAlt, 'lblAdres', 'Adres');
lblAdres.clProSettings.FontColor = clAlphaColor.clWhite;
lblAdres.clProSettings.FontSize = 12;
lblAdres.clProSettings.TextSettings.Font.Style = [fsBold];
lblAdres.Height = 25;
lblAdres.Align = alTop;
txtAdres = PersonelKayit.AddNewMemo(pnlPersAlt, 'txtAdres', '');
txtAdres.Height = 80;
txtAdres.Align = alTop;
// Pozisyon
lblPozisyon = PersonelKayit.AddNewProLabel(pnlPersAlt, 'lblPozisyon', 'Pozisyon');
lblPozisyon.clProSettings.FontColor = clAlphaColor.clWhite;
lblPozisyon.clProSettings.FontSize = 12;
lblPozisyon.clProSettings.TextSettings.Font.Style = [fsBold];
lblPozisyon.Height = 25;
lblPozisyon.Align = alTop;
cmbPozisyon = PersonelKayit.AddNewProComboBox(pnlPersAlt, 'cmbPozisyon');
cmbPozisyon.Items.Add('Yönetici');
cmbPozisyon.Items.Add('Muhasebe');
cmbPozisyon.Items.Add('Satış');
cmbPozisyon.Items.Add('Destek');
cmbPozisyon.Height = 30;
cmbPozisyon.Align = alTop;
// Maaş
lblMaas = PersonelKayit.AddNewProLabel(pnlPersAlt, 'lblMaas', 'Maaş');
lblMaas.clProSettings.FontColor = clAlphaColor.clWhite;
lblMaas.clProSettings.FontSize = 12;
lblMaas.clProSettings.TextSettings.Font.Style = [fsBold];
lblMaas.Height = 25;
lblMaas.Align = alTop;
txtMaas = PersonelKayit.AddNewProEdit(pnlPersAlt, 'txtMaas', '');
txtMaas.Height = 30;
txtMaas.Align = alTop;
// Aktif mi?
lblAktif = PersonelKayit.AddNewProLabel(pnlPersAlt, 'lblAktif', 'Aktif Çalışan');
lblAktif.clProSettings.FontColor = clAlphaColor.clWhite;
lblAktif.clProSettings.FontSize = 12;
lblAktif.clProSettings.TextSettings.Font.Style = [fsBold];
lblAktif.Height = 25;
lblAktif.Align = alTop;
chkAktif = PersonelKayit.AddNewProCheckBox(pnlPersAlt, 'chkAktif', '');
chkAktif.Checked = True;
chkAktif.Align = alTop;
chkAktif.Height = 30;
//////////////////////////////////////////////////////////////////
// BUTON PANELİ
pnlPersButton = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersButton');
pnlPersButton.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
pnlPersButton.SetclProSettings(pnlPersButton.clProSettings);
pnlPersButton.Align = alTop;
pnlPersButton.Height = 60;
// Temizle Butonu
btnTemizle = PersonelKayit.AddNewProButton(pnlPersButton, 'btnTemizle', 'Temizle');
btnTemizle.Align = alLeft;
btnTemizle.Width = pnlPersButton.Width / 4;
btnTemizle.OnClick = @TemizleClick;
// Kaydet Butonu
btnKaydet = PersonelKayit.AddNewProButton(pnlPersButton, 'btnKaydet', 'Kaydet');
btnKaydet.Align = alLeft;
btnKaydet.Width = pnlPersButton.Width / 4;
btnKaydet.OnClick = @KaydetClick;
// Güncelle Butonu
btnGuncelle = PersonelKayit.AddNewProButton(pnlPersButton, 'btnGuncelle', 'Güncelle');
btnGuncelle.Align = alLeft;
btnGuncelle.Width = pnlPersButton.Width / 4;
btnGuncelle.OnClick = @GuncelleClick;
// Sil Butonu
btnSil = PersonelKayit.AddNewProButton(pnlPersButton, 'btnSil', 'Sil');
btnSil.Align = alLeft;
btnSil.Width = pnlPersButton.Width / 4;
btnSil.OnClick = @SilClick;
//////////////////////////////////////////////////////////////////
// LİSTE PANELİ
pnlPersListe = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersListe');
pnlPersListe.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
pnlPersListe.SetclProSettings(pnlPersListe.clProSettings);
pnlPersListe.Align = alClient;
pnlPersListe.Height = 300;
// Liste Başlığı
lblPersonelListesi = PersonelKayit.AddNewProLabel(pnlPersListe, 'lblPersonelListesi', 'Personel Listesi');
lblPersonelListesi.clProSettings.FontColor = clAlphaColor.clWhite;
lblPersonelListesi.clProSettings.FontSize = 14;
lblPersonelListesi.clProSettings.TextSettings.Font.Style = [fsBold];
lblPersonelListesi.Align = alTop;
lblPersonelListesi.Height = 30;
// Yenile Butonu
btnListeyiYenile = PersonelKayit.AddNewProButton(pnlPersListe, 'btnListeyiYenile', 'Listeyi Yenile');
btnListeyiYenile.Align = alTop;
btnListeyiYenile.Height = 30;
btnListeyiYenile.OnClick = @ListeyiYenileClick;
// Personel Listesi
ListViewPersonel = PersonelKayit.AddNewProListView(pnlPersListe, 'ListViewPersonel');
ListViewPersonel.Align = alClient;
ListViewPersonel.clProSettings.ViewType = lvList;
ListViewPersonel.clProSettings.ColCount = 1;
ListViewPersonel.clProSettings.ItemHeight = 80;
ListViewPersonel.clProSettings.ItemSpace = 5;
ListViewPersonel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');
ListViewPersonel.OnItemClick = @ListeElemanSecildi;
// Formu Çalıştır
PersonelKayit.Run;
// Verileri Yükle
ListeyiYenileClick(nil);
}
// Temizle Butonu İşlevi
procedure TemizleClick(Sender: TObject);
begin
txtAd.Text := '';
txtSoyad.Text := '';
txtTCKN.Text := '';
txtDogumTarihi.Text := 'GG/AA/YYYY';
txtTelefon.Text := '';
txtEposta.Text := '';
txtAdres.Text := '';
cmbPozisyon.ItemIndex := -1;
txtMaas.Text := '';
chkAktif.Checked := True;
end;
// Kaydet Butonu İşlevi
procedure KaydetClick(Sender: TObject);
begin
PersonelQuery.SQL.Text := 'INSERT INTO Personel (Ad, Soyad, TCKN, DogumTarihi, ' +
'Telefon, Eposta, Adres, PozisyonID, Maas, Aktifmi) ' +
'VALUES (:Ad, :Soyad, :TCKN, :DogumTarihi, :Telefon, ' +
':Eposta, :Adres, :PozisyonID, :Maas, :Aktifmi)';
PersonelQuery.ParamByName('Ad').AsString := txtAd.Text;
PersonelQuery.ParamByName('Soyad').AsString := txtSoyad.Text;
PersonelQuery.ParamByName('TCKN').AsString := txtTCKN.Text;
PersonelQuery.ParamByName('DogumTarihi').AsString := txtDogumTarihi.Text;
PersonelQuery.ParamByName('Telefon').AsString := txtTelefon.Text;
PersonelQuery.ParamByName('Eposta').AsString := txtEposta.Text;
PersonelQuery.ParamByName('Adres').AsString := txtAdres.Text;
PersonelQuery.ParamByName('PozisyonID').AsInteger := cmbPozisyon.ItemIndex + 1;
PersonelQuery.ParamByName('Maas').AsFloat := StrToFloatDef(txtMaas.Text, 0);
PersonelQuery.ParamByName('Aktifmi').AsInteger := Integer(chkAktif.Checked);
try
PersonelQuery.ExecSQL;
ShowMessage('Personel başarıyla kaydedildi.');
ListeyiYenileClick(nil);
TemizleClick(nil);
except
on E: Exception do
ShowMessage('Hata: ' + E.Message);
end;
end;
// Güncelle Butonu İşlevi
procedure GuncelleClick(Sender: TObject);
var
SelectedID: Integer;
begin
if ListViewPersonel.Selected = nil then
begin
ShowMessage('Lütfen güncellenecek personeli seçin.');
Exit;
end;
SelectedID := Integer(ListViewPersonel.Selected.Data);
PersonelQuery.SQL.Text := 'UPDATE Personel SET ' +
'Ad = :Ad, Soyad = :Soyad, TCKN = :TCKN, ' +
'DogumTarihi = :DogumTarihi, Telefon = :Telefon, ' +
'Eposta = :Eposta, Adres = :Adres, ' +
'PozisyonID = :PozisyonID, Maas = :Maas, ' +
'Aktifmi = :Aktifmi WHERE PersonelID = :PersonelID';
PersonelQuery.ParamByName('Ad').AsString := txtAd.Text;
PersonelQuery.ParamByName('Soyad').AsString := txtSoyad.Text;
PersonelQuery.ParamByName('TCKN').AsString := txtTCKN.Text;
PersonelQuery.ParamByName('DogumTarihi').AsString := txtDogumTarihi.Text;
PersonelQuery.ParamByName('Telefon').AsString := txtTelefon.Text;
PersonelQuery.ParamByName('Eposta').AsString := txtEposta.Text;
PersonelQuery.ParamByName('Adres').AsString := txtAdres.Text;
PersonelQuery.ParamByName('PozisyonID').AsInteger := cmbPozisyon.ItemIndex + 1;
PersonelQuery.ParamByName('Maas').AsFloat := StrToFloatDef(txtMaas.Text, 0);
PersonelQuery.ParamByName('Aktifmi').AsInteger := Integer(chkAktif.Checked);
PersonelQuery.ParamByName('PersonelID').AsInteger := SelectedID;
try
PersonelQuery.ExecSQL;
ShowMessage('Personel bilgileri güncellendi.');
ListeyiYenileClick(nil);
except
on E: Exception do
ShowMessage('Hata: ' + E.Message);
end;
end;
// Sil Butonu İşlevi
procedure SilClick(Sender: TObject);
var
SelectedID: Integer;
begin
if ListViewPersonel.Selected = nil then
begin
ShowMessage('Lütfen silinecek personeli seçin.');
Exit;
end;
if MessageDlg('Uyarı', 'Bu personeli silmek istediğinize emin misiniz?',
mtConfirmation, [mbYes, mbNo], 0) = mrNo then Exit;
SelectedID := Integer(ListViewPersonel.Selected.Data);
PersonelQuery.SQL.Text := 'DELETE FROM Personel WHERE PersonelID = :PersonelID';
PersonelQuery.ParamByName('PersonelID').AsInteger := SelectedID;
try
PersonelQuery.ExecSQL;
ShowMessage('Personel silindi.');
ListeyiYenileClick(nil);
TemizleClick(nil);
except
on E: Exception do
ShowMessage('Hata: ' + E.Message);
end;
end;
// Listeyi Yenile Butonu İşlevi
procedure ListeyiYenileClick(Sender: TObject);
var
Item: TClProListViewItem;
begin
ListViewPersonel.Items.Clear;
PersonelQuery.SQL.Text := 'SELECT * FROM Personel ORDER BY Ad, Soyad';
PersonelQuery.Open;
while not PersonelQuery.Eof do
begin
Item := ListViewPersonel.Items.Add;
Item.Data := Pointer(PersonelQuery.FieldByName('PersonelID').AsInteger);
Item.Text := PersonelQuery.FieldByName('Ad').AsString + ' ' +
PersonelQuery.FieldByName('Soyad').AsString + #13#10 +
'TCKN: ' + PersonelQuery.FieldByName('TCKN').AsString + ' | ' +
'Pozisyon: ' + IntToStr(PersonelQuery.FieldByName('PozisyonID').AsInteger) + #13#10 +
'Maaş: ' + FloatToStr(PersonelQuery.FieldByName('Maas').AsFloat) + ' TL | ' +
'Durum: ' + BoolToStr(PersonelQuery.FieldByName('Aktifmi').AsBoolean, 'Aktif', 'Pasif');
PersonelQuery.Next;
end;
PersonelQuery.Close;
end;
// Liste Elemanı Seçildiğinde
procedure ListeElemanSecildi(Sender: TObject; Item: TClProListViewItem);
begin
if Item = nil then Exit;
PersonelQuery.SQL.Text := 'SELECT * FROM Personel WHERE PersonelID = :PersonelID';
PersonelQuery.ParamByName('PersonelID').AsInteger := Integer(Item.Data);
PersonelQuery.Open;
if not PersonelQuery.IsEmpty then
begin
txtAd.Text := PersonelQuery.FieldByName('Ad').AsString;
txtSoyad.Text := PersonelQuery.FieldByName('Soyad').AsString;
txtTCKN.Text := PersonelQuery.FieldByName('TCKN').AsString;
txtDogumTarihi.Text := PersonelQuery.FieldByName('DogumTarihi').AsString;
txtTelefon.Text := PersonelQuery.FieldByName('Telefon').AsString;
txtEposta.Text := PersonelQuery.FieldByName('Eposta').AsString;
txtAdres.Text := PersonelQuery.FieldByName('Adres').AsString;
cmbPozisyon.ItemIndex := PersonelQuery.FieldByName('PozisyonID').AsInteger - 1;
txtMaas.Text := FloatToStr(PersonelQuery.FieldByName('Maas').AsFloat);
chkAktif.Checked := PersonelQuery.FieldByName('Aktifmi').AsBoolean;
end;
PersonelQuery.Close;
end;