Form style özelliğini databaseden alma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Form style özelliğini databaseden alma

Mesaj gönderen brs »

Selamlar...

Projemde kullanıcılara farklı style özellikleri seçeneği ekledim.
Proje ilk çalıştığında, sorunsuz olarak çalışıyor, daha sonra style değişiklik yapıldığında bu değişikliği databaseye kayıt ediliyor, buraya kadar hiçbir sıkıntı yok.

Proje kapatılıp tekrar açıldığında, resimdeki deki hatayı alıyorum...

Resim

Proje show:

Kod: Tümünü seç

procedure TMainForm.FormShow(Sender: TObject);
begin
    AyarlarDatabase(Sender);
end;
Databaseden styles özelliği alınıyor:

Kod: Tümünü seç

procedure TMainForm.AyarlarDatabase(Sender: TObject);
begin
  try
    with AYARLARQuery do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Select * From AYARLAR');
      Prepared := True;
      Open;
      if Not IsEmpty then 
      begin
        TStyleManager.SetStyle(FieldByName('STYLES').AsString);
      end;
    end;
  except
  end;
end;
Bu durumun nasıl çözebilirim???
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mia
Üye
Mesajlar: 239
Kayıt: 17 Nis 2015 02:18

Re: Form style özelliğini databaseden alma

Mesaj gönderen mia »

why you use (Sender)
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
in god i trust with every movement i do
graduated student and looking for knowledge
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Form style özelliğini databaseden alma

Mesaj gönderen brs »

listing data

verileri listelemek için...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mia
Üye
Mesajlar: 239
Kayıt: 17 Nis 2015 02:18

Re: Form style özelliğini databaseden alma

Mesaj gönderen mia »

listing data can be in function or procedure without using (Sender) have you tried (Self) instead of (Sender) ?
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
in god i trust with every movement i do
graduated student and looking for knowledge
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Form style özelliğini databaseden alma

Mesaj gönderen thelvaci »

Aslında hata mesajı kendisini izah ediyor ama yine de yardımcı olmaya çalışayım. Derinlerdeki kod yapısını incelemedim ama SetStyle muhtemelen ilgili formları gizleyip, stili uygulayıp yeniden formları görünür yapıyor. Siz de bu kodu form'un OnShow olayında çağırdığınız için hata alıyorsunuz. Pencerenin görüntülenmesinden sonra çağırmalısınız kodunuzu. Bunun için en basitinden aşağıdaki gibi bir yapı kullanabilirsiniz:

Kod: Tümünü seç

const
  WM_AFTER_SHOW = WM_USER + $1453;
  
  ..
  ..
  ..
  
  procedure WMAfterShow(var Message : TMessage); message WM_AFTER_SHOW;
  
  ..
  ..
  
implementetion

procedure TForm1.WMAfterShow(var Message : TMessage);
begin
   // kodunuzu burada çağırın...
end;

procedure TForm1.FormShow(Sender : TObject);
begin
  PostMessage(Handle, WM_AFTER_SHOW, 0, 0);
end;

Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Form style özelliğini databaseden alma

Mesaj gönderen brs »

thelvaci yazdı:Aslında hata mesajı kendisini izah ediyor ama yine de yardımcı olmaya çalışayım. Derinlerdeki kod yapısını incelemedim ama SetStyle muhtemelen ilgili formları gizleyip, stili uygulayıp yeniden formları görünür yapıyor. Siz de bu kodu form'un OnShow olayında çağırdığınız için hata alıyorsunuz. Pencerenin görüntülenmesinden sonra çağırmalısınız kodunuzu. Bunun için en basitinden aşağıdaki gibi bir yapı kullanabilirsiniz:

Kod: Tümünü seç

const
  WM_AFTER_SHOW = WM_USER + $1453;
  
  ..
  ..
  ..
  
  procedure WMAfterShow(var Message : TMessage); message WM_AFTER_SHOW;
  
  ..
  ..
  
implementetion

procedure TForm1.WMAfterShow(var Message : TMessage);
begin
   // kodunuzu burada çağırın...
end;

procedure TForm1.FormShow(Sender : TObject);
begin
  PostMessage(Handle, WM_AFTER_SHOW, 0, 0);
end;

Teşekkür ederim; form açıldıktan sonra timer de kullanabilirdim fakat timer ile programı ağırlaştırır diye vazgeçtim...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Cevapla