Splash formun hemen kaybolmaması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
neoerhans
Üye
Mesajlar: 19
Kayıt: 10 Ağu 2003 01:48
Konum: Izmir
İletişim:

Mesaj gönderen neoerhans »

Merhaba :roll:

valla bu yazdığım sorunsuz olarak calısıyo...
Sorunlu diyorsan sorunu soylersen cozmeye calısırız...

Donguye gelicek olursak interval'i kod icerisinden verince anlayamadığım bi sorun cıkıyor... Interval değerini timer'ın ozelliğinden verdiğimde bi sorun yok onun icin For i:=Timer1.interval Downto 1000 dedim yani ordaki interval bir değişken olarak çalışmış olacak...

Gündüz saatlerinde kodu incelemen daha sağlıklı olur diye düşündüyorum...
Kolay Gelsin..

Saygılar..
Bizler birer atoma benziyoruz ve gün geldiğinde bir ülkeyi dahi yok edebilecek güce sahibiz. Ama gücümüz aklımızın esiri! Bu yüzden Sıyırdınız gene :P

http://www.MindoMs.com
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

@neoerhans hiç uğraşma bu kodu değil gündüz gece yarısında bile @mrmcop incelediğinde sana nelerin nerede yanlış kullanıldığını açıklamış..

@mrmcop un yazdıklarını tekrar dikkatlice oku.. :wink:

Mesela timer1 in enabled özelliği true mu bende bunu merak ettim açıkcası :?:

Lütfen yanlış anlama ama sana kodundaki kullanım hatalarını incelemeni tavsiye ederim ki hem siz hemde daha sonra bu mesajı okuyacak arkadaşlar yanlış yönlenmesin..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Kod: Tümünü seç

  FRM_AboutUGS:=TFRM_AboutUGS.Create(Application);
  FRM_AboutUGS.LBL_Prog.Caption := 'UGS Yazılım';
  FRM_AboutUGS.BuildNo := BuildNum;
  FRM_AboutUGS.Show;
  FRM_AboutUGS.Update;
  Application.ProcessMessages;
Bu kodu dpr içine koy, ilk çalıştırılacak kod bu olur tabi create işlemlerinin en üstüne koyacaksın. Bunu kapatmasıda Ana formun OnShow Event 'ınada

Kod: Tümünü seç

    if Assigned(FRM_AboutUGS)then
      try
        FRM_AboutUGS.Close;
      finally
        FreeAndNil(FRM_AboutUGS)
      end;
ekle. Ana form açıldığındada kalması içinde 1den 10 a kadar bir döngü kur ve Application.Progressmesages; yaz
@mrmcop dediklerini bencede iyi oku.

Kod: Tümünü seç

property Interval: Cardinal;
yani bir değişken
7000 den 1000 e kadar demek 6000 kez çalışacak demek. form1 free le form2 yi aç 6,000 kez ????

kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
neoerhans
Üye
Mesajlar: 19
Kayıt: 10 Ağu 2003 01:48
Konum: Izmir
İletişim:

Mesaj gönderen neoerhans »

Sadece bi deneyin derim....Kod da hata olabilir belki ama hatayı ancak deneyererk gorebilirsiniz....
yani bir değişken
7000 den 1000 e kadar demek 6000 kez çalışacak demek. form1 free le form2 yi aç 6,000 kez ????
Eğer boyle dusunuyosan benim yazdığım kodu bir dene senin soylediğine gore direk makinanın cakılması gerekiyor....dene...
Kolay gelsin.
Saygılar..
Bizler birer atoma benziyoruz ve gün geldiğinde bir ülkeyi dahi yok edebilecek güce sahibiz. Ama gücümüz aklımızın esiri! Bu yüzden Sıyırdınız gene :P

http://www.MindoMs.com
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Kod: Tümünü seç

Timer1.interval:=7000; //7 Saniye ama koddan interval değerini verince bi sorun cıkıyo özellikler kısmından verirsen sorun yok...

for i:=timer1.interval Downto 1000 do
begin
        Form1.hide;
        form1.free;
        Form2.show;
end;
deniycem, birde bunu nereye yazdığını söyle. kendi kodunda "Form1.hide;" kısmına breakpoint koyup kodunu bi çalıştır bakalım, kaç kez çalışacak, yada bu gönderdiğin kod çalışıyormu, yani bu kod tetikleniyormu ? derleyici bunu işletiryormu ?. Kodunun tamamını bilemem ama bu gönderdiğin kod için aynı şeyleri söylüyorum 6000 kez çalışır.

kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhabalar...
@neoerhans yazdı:senin soylediğine gore direk makinanın cakılması gerekiyor....dene...
:!: @neoerhans Hatayı önce kendinde ara... Dayanaksız yorum yapıyorsun... Al sana kod işte. Aşağıda bulacağın örnek dediğinin tersine çakılmıyor... Denenmiştir...

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
  Sayac : Integer;
begin
  For Sayac := 7000 downto 1000
  do begin
    Form1.Free;
    Form2.Caption := Format('%d', [Sayac]);
    Form2.Show;
  end;
end;
- Kendi yazdığın koddan daha kendin emin değilsin. :?: Timer nesnesine runtime'da veya design time'da değer atamadan dolayı aldığın hatanın kaynağını dahi araştırmak gereği duymadan, program etiğine aykırı kod verip arkasında durabiliyorsun... Pes... :shock: Yukardaki verdiğim gibi bir kod, Delphi tarafında belki koruma altına alınmış olabilir ve aynı nesne daha önce free edilmiş deyip sorun çıkarmayarak iyi ve kötü programcı ayrımını daraltsa da :idea: :? Forumlarda verdiğin örnekler ise tersi olarak bu ayrımı daha açık hale getirmektedir. Bunu unutmayalım...

- Burası ve benzeri forumlar aynı zamanda bir tür vitrindir. Her üyenin kendi program mantığının yanı sıra düşünce tarzını da deşifre ettiği yerdir... Ben ve diğer tüm üyeler olduğu gibi, yine bir üye olan sen de bu tanım içerisindesin...

- Burada yorum yazan hemen hemen herkes iğneyi sunarken çuvaldızı kendisine saklar... Hadi kendi yorumumu ve verdiğin cevabı bir kenara koyalım (önemli önemsiz olarak değil, kişisel olarak verdiğin cevaptan dolayı... Hani gecenin bu vaktinde kendinde değilsin sabah uyanınca bak yorumundan bahsediyorum), @freeman35, @TRSoft buradaki en eskilerden ve forumdan tanıdığım kadarıyla Delphi bilgisi adına üst seviye programcılardandırlar... Değerli yorumlarını kendine öğreti olarak almanı tercih ederdim, deneme yapmaksızın muhalefet etmeni değil...

- Verdiğin kodla ilgili yorumum oldukça açıktı. Deneme yapıp bu farkı analiz etmen için biraz da espiriyle yaklaşarak bir kaç alternatif sundum... Yerine ulaşmadığını görmekteyim ve bundan dolayı üzgünüm...

- Programcılık hayatında başarılar dilerim... :roll:
Resim
Resim ....Resim
neoerhans
Üye
Mesajlar: 19
Kayıt: 10 Ağu 2003 01:48
Konum: Izmir
İletişim:

Mesaj gönderen neoerhans »

Merhaba,
Öncelikle şunu soylemeliyim ben bi kod yazıcaksam eğer kesinlikle ilk önce deneyerek yani sizin deyiminizle ilk önce çuvaldızı kendime batırarak kodu koyuyorum...

Daha sonrasıda bu kadar uztmanız gerçekten beni cok şaşırttı ben burda Ben süper programcıyım benim yazdığım kod sorunsuz sizin yazdığınız çalışmıyor gibi bir deyimde bulunmadım TrSoft ve Freeman35 isimli arkadaşlarında yazdıkları değerli yorumları hakkında bişey söylemedim ben sadece kodun sorunsuz olarak bende çalıştığını söyledim ve ben bu kodu Bitirme tezi olarak yazdığım bi programdada kullanmış bulunmaktayım.

Uzatmanızıda gereksiz bulduğumu açıkça belirtmek isterim.

Burda yazılan herşeyin insanlara yardım amaçlı yazıldığını hatırlatarak bende yardım amacı ile yazıdğımı üstüne basa basa belirtirim.

Kodun açıklanması ( Anlamayan veya Anlamak İstemiyen Arkadaşlar için)

Forma 1 adet Timer nesnesi ve yeni bir Form eklenerek başlanmalıdır
İlk formumuz yani Form1 Ekranda 6 saniye bekledikten sonra Form2 yani Ana formumuza gitmesi istenmektedir. Form1'e Timer nesnesi konulduktan sonra Timer nesnesinin İnterval özelliğine 7000 değeri verilmelidir.

form tasarım kısmında iken Timer nesnesinin Ontimer olayına Aşğıdaki kodlar yazılmalıdır.

i değişkeni Procedure başlangıcından sonra Var Bloğu konulduktan sonra

Kod: Tümünü seç

i:integer;
diye tanımlanmalıdır...

Kod: Tümünü seç

for i:=timer1.interval Downto 1000 do 
begin 
        Form1.hide; 
        form1.free; 
        Form2.show; 
end;
Daha sonra yine Form tasarım kısmında iken Timer nesnesinin özelliklerinde olan Enable true değeri verilmelidir. Yada Form un OnActivate olayına aşağıdaki kod yazılmalıdır.

Kod: Tümünü seç

Timer1.Enabled:=True;
Form2'nin OnClose olayınada aşağıdaki kod yazılmalıdır

Kod: Tümünü seç

 Application.Terminate; 
Belirtilen işlemler tamalandıktan sonra Ctrl + F9 tuş kombinasyonu ile yazılan kod lar derlendikten sonra eğer hiç bir hata söz konusu değil ise F9 Fonksiyon tuşuna basılarak Program çalıştırılır ve sonuç gözlemlenir.

Yukarıda verilen kodlar kesinlikle denenmiş olup yorumlara açıktır.

Kolay gelsin..

İnternet cafede yazıldığı için tekrar kontrol edilip Editlenmiştir...

Saygılarımla....
En son neoerhans tarafından 26 Tem 2004 12:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Bizler birer atoma benziyoruz ve gün geldiğinde bir ülkeyi dahi yok edebilecek güce sahibiz. Ama gücümüz aklımızın esiri! Bu yüzden Sıyırdınız gene :P

http://www.MindoMs.com
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

@neoerhans,

burda cevap yazan arkadaşların amacı yanlışları düzeltmek ve daha uygun kodlar yazmaya yardımcı olmak. Başka bir art niyetleri olacağını sanmam.

Böyle birşey bana yapılsa, beni ziyadesiyle memnun eder. Çünki amacım her zaman için daha iyi ve sorunsuz kod yazmaktır. Bunun bir sonu olduğunu düşünmem. Olaya bu gözle bakmak lazım diye düşünüyorum.

Paylaşımların için teşekkürler :)

Kolay gelsin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
splash forma güzel bir imaj ve formun altına bir adet progresbar (GP)koyuyoruz.
dpr dosyasında değişiklik yapıyoruz...

Kod: Tümünü seç

Begin
  Application.HintPause := 0;
  Application.Initialize;
  Application.Title := 'Bilgi Girişi';
  Application.CreateForm(TFBilgiGirisi, FBilgiGirisi);
  Application.CreateForm(TFSplash, FSplash);
  FSplash.GP.MaxValue:=6;
  Fsplash.Show;
  fsplash.Update;
  Application.CreateForm (TAMod, AMod);        FSplash.GP.Stepit;
  Application.CreateForm (TDMBilgi, DMBilgi);  FSplash.GP.Stepit;
  Application.CreateForm(TDMSifre, DMSifre);  FSplash.GP.Stepit;
  Application.CreateForm(TFrmSPAsilar, FrmSPAsilar);  FSplash.GP.Stepit;
  Application.CreateForm (TLogonF, LogonF);   FSplash.GP.Stepit;
  logonf.showmodal;
  FSplash.GP.Stepit;
  Fsplash.Close;
  Application.Run;
End.
böylece splash form görünürken progres barda ilerliyor...

Kolay Gelsin...
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla