Aktif Pencere

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Aktif Pencere

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar bir projem var ve yaklaşık 100 pencereden oluşuyor bunun 40 tanesi cari kart seçmek için bunun düşürmek için aktif pencereyi bulup "Cari_Kart_Id.Text" ıd atayacak fakat aktif pencereyi nasıl bulacağımı bilemiyorum :)

Kod: Tümünü seç

procedure THAVALE_ISLEM_PENCERE_CARI_SEC.SpeedButton1Click(Sender: TObject);
begin
        if (CARI_KART_DB.RecordCount<=0)
        then ShowMessage('               Kayıt Bulunumıyor                  ') else
begin

////önce aktif formu bulsun sonra ıd atasın.

         HAVALE_ISLEM_PENCERE.Edit1.Text:=CARI_KART_DB.fieldbyname('Cari_ID').asstring;
         Close;
  end;
end;
teşekkürler
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Aktif Pencere

Mesaj gönderen mkysoft »

Formlarınıza bir öznitelik ekleyin, formu create ederken, ilgili formu create eden formun adını yazın. Böylece cari kart arama formundan direk atama yapabilirsiniz. Aynı mantığı global bir değişkenle de yapabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Aktif Pencere

Mesaj gönderen erdogan_ozkaya »

hocam bir örnek eklemeniz mümkün mü acaba :)
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: Aktif Pencere

Mesaj gönderen ikutluay »

Neden böyle birşeye ihtiyaç duyuyorsunuz ?

Mesela ben olsam sadece bir tane arama formu yaparım. Grid içinde tıklanan kaydın bilgilerini gerekli global değişkenlere atarım ve seçim yapıldıysa 1 alan bir değişken tutarımç sonra bu formu işime gereken her yerde create eder arama işleminden sonra global dğeişkenlerden hangi cari olduğunu çekerim.

Kod: Tümünü seç

var
 WhereSql:string;
begin
  if Dm.TblFilter.Active then Dm.TblFilter.Close;
  Dm.TblFilter.SQL.Clear;
  Dm.TblFilter.SQL.Add('SELECT '+
  'left(dbo.STOKLAR.sto_kod,4) as Firma, '+
  'dbo.STOKLAR.sto_kod AS Stok_Kodu, '+
  'dbo.STOKLAR.sto_isim AS Artikel, '+
  'dbo.STOK_SATIS_FIYAT_LISTELERI.sfiyat_fiyati AS Fiyat, '+
  'dbo.BARKOD_TANIMLARI.bar_kodu AS Barkod, '+
  'dbo.fn_eldekimiktar(sto_kod) as Toplam_miktar, '+
  'dbo.STOKLAR.sto_birim1_ad as Birim '+
'FROM '+
  'dbo.stoklar '+
  'left JOIN dbo.STOK_SATIS_FIYAT_LISTELERI ON (dbo.STOK_SATIS_FIYAT_LISTELERI.sfiyat_stokkod = dbo.STOKLAR.sto_kod) '+
  'left JOIN dbo.BARKOD_TANIMLARI ON (dbo.STOKLAR.sto_kod = dbo.BARKOD_TANIMLARI.bar_stokkodu) ');
//  if UseLike then
   Wheresql:='Where dbo.STOKLAR.sto_kod like '''+(edt1.Text)+'%''';

  Dm.TblFilter.SQL.Add(Wheresql);
  if cbName.Checked then
   Dm.TblFilter.SQL.Add(' order by dbo.STOKLAR.sto_isim ')
  else
  Dm.TblFilter.SQL.Add(' order by dbo.STOKLAR.sto_kod ');
  SelectMode:=True;
  Dm.TblFilter.Open;
  FrmFilterG:=TFrmFilterG.Create(nil);
  Try
    FrmFilterG.ShowModal;
    finally
    FrmFilterG.Release;
  End;
  SelectMode:=False;
  if RecSelected then edt1.Text:=Dm.TblFilter.FieldByName('Stok_Kodu').AsString;
Tblfilter benim kullandığım boş bir sorgu. Önce ona neyi sorgulayacaksam gerekli sql kodlarını atıyorum.

Selectmode değişkeni gene benim kullandığım bir değiken. Hangi araç çubuğunu göstereceğini oradan alıyor ilgili arama formu.

Sonra formu oluşturup göstereiyorum.

formu kapattığımda selectmodu tekrar sıfırlayıp kayıt seçilmişmi ona bakıyorum. Pencere ile filan hiç uğraşmaya gerek kalmıyor
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Aktif Pencere

Mesaj gönderen erdogan_ozkaya »

hocam, bir örnek yapabilir misiniz pek bir şey anlamadım açıkcası :)
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Aktif Pencere

Mesaj gönderen erdogan_ozkaya »

çözümü şöyle buldum,

işine yarayan arkadaşlara fikir olur belki :)

Kod: Tümünü seç

procedure TCEK_BORDROSU.CARI_KOD_TEXTButtonClick(Sender: TObject);
begin
      ORTAK_CARI_KART_SECIMI.CARI_PENCERE_TEXT.Text:=Screen.ActiveForm.Name;
      ORTAK_CARI_KART_SECIMI.Showmodal;
end;

cari seçeceğim pencereden

Kod: Tümünü seç

procedure TORTAK_CARI_KART_SECIMI.SpeedButton1Click(Sender: TObject);
begin
        if (qryCARI_KART_DB.RecordCount<=0)
        then ShowMessage('               Kayıt Bulunumıyor                  ') else
   begin

      if CARI_PENCERE_TEXT.Text='FATURA_KAYIT'
      then FATURA_KAYIT.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      if CARI_PENCERE_TEXT.Text='CEK_BORDROSU'
      then CEK_BORDROSU.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      if CARI_PENCERE_TEXT.Text='SERVIS_KABUL_PENCERE'
      then SERVIS_KABUL_PENCERE.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      if CARI_PENCERE_TEXT.Text='STOK_HAREKET_ARAMA'
      then STOK_HAREKET_ARAMA.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      if CARI_PENCERE_TEXT.Text='SERVIS_KAYIT_TOPLU_FATURA_GONDER'
      then SERVIS_KAYIT_TOPLU_FATURA_GONDER.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      if CARI_PENCERE_TEXT.Text='NAKIT_GIRIS_CIKIS'
      then NAKIT_GIRIS_CIKIS.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      if CARI_PENCERE_TEXT.Text='HAVALE_ISLEM_PENCERE'
      then HAVALE_ISLEM_PENCERE.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      if CARI_PENCERE_TEXT.Text='FATURA_ARAMA_PENCERE'
      then FATURA_ARAMA_PENCERE.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      if CARI_PENCERE_TEXT.Text='CEK_BORDRO_ARAMA'
      then CEK_BORDRO_ARAMA.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      if CARI_PENCERE_TEXT.Text='Cari_Kart_Ekleme'
      then Cari_Kart_Ekleme.CARI_KOD_TEXT.Text:=qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;

      Close;
   end;
 end;
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Aktif Pencere

Mesaj gönderen csunguray »

Bu kadar uzatmaya gerek yok. Sadece arama penceresini çağırma şeklnizi şöyle değiştirin.

Kod: Tümünü seç

procedure TCEK_BORDROSU.CARI_KOD_TEXTButtonClick(Sender: TObject);
begin
    ORTAK_CARI_KART_SECIMI.CARI_PENCERE_TEXT.Text:=Screen.ActiveForm.Name;
    if ORTAK_CARI_KART_SECIMI.Showmodal = mrOK 
        then CARI_KOD_TEXT.Text := ORTAK_CARI_KART_SECIMI.qryCARI_KART_DB.fieldbyname('Cari_ID').asstring;
end;
Arama penceresini de şöyle değiştirin:

Kod: Tümünü seç

procedure TORTAK_CARI_KART_SECIMI.SpeedButton1Click(Sender: TObject);
begin
    if (qryCARI_KART_DB.RecordCount <= 0)
        then ShowMessage('               Kayıt Bulunumıyor                  ')  else
   begin
      Close;
      ModalResult := mrOK; // Böylece formdan vazgeçerek değil Okeyleyerek çıktığımızı anlayacağız.
   end;
 end;
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Aktif Pencere

Mesaj gönderen erdogan_ozkaya »

"Bu kadar uzatmaya gerek yok." demenizde ki kısa yolu anlayamadım ?

ModalResult := mrOK; // Bu kısım hariç :)

Kod: Tümünü seç

procedure TORTAK_CARI_KART_SECIMI.SpeedButton1Click(Sender: TObject);
begin
    if (qryCARI_KART_DB.RecordCount <= 0)
        then ShowMessage('               Kayıt Bulunumıyor                  ')  else
   begin
      Close;
      ModalResult := mrOK; // Böylece formdan vazgeçerek değil Okeyleyerek çıktığımızı anlayacağız.
   end;
 end;
Cevapla