create olayı ile ilgili

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

create olayı ile ilgili

Mesaj gönderen osman_simsek »

merhabalar...
ben web sitem ile senkron çalışabilecek bir tür chat programı ile uğraşıyorum.
bir mesaj gönderme formum var (form4)
diyelim ki contact list imde 3 kişi var.
birinin ismine çift tıklayınca mesaj göndermek için form4 ten bir tane daha oluşturulmasını istiyorum ki başka bir kullanıcıya da mesaj göndermek için mevcut formu kapatmadan bir tane daha oluşturabileyim.
hem form oluşturma hem de oluşturduğum formu kullanma konusunda yardımcı olursnız sevinirim.
(vt için ado ve ms access kullanıyorum)
...[ at, avrat, delphi ]...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

- Web sitenizle senkron kısmını biraz açar mısınız ..?

- Form oluşturmak deyince ana formunuz MDI form da create edilecekler MDIChild mi olacak ..?

- Formlar arası haberleşme kolay ama WebSitesinden tetikleme için daha kısa bir süre önce yazdığım bir mesajı inceleyin...

- Ref : viewtopic.php?p=7606&highlight=#7606
Resim
Resim ....Resim
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

Mesaj gönderen osman_simsek »

senkornizasyondan kastettiğim asp dosyalarım da, yazacağım program da aynı tabloları kullanacaklar, bunu yazmamın nedeni tablolar web alanında olacak bunu belirtmek istemiştim, sanırım yanlış anlaşıldı.

mdi child kullanmadım daha önce. daha kolay olacaksa child form kullanayım.

benim asıl sorunum. formu create etme ve yeni oluşturduğum forma vereceğim ismin sabit olmaması. yani ben değişken bir isim verebilmek istiyorum
...[ at, avrat, delphi ]...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Size form create hakkındaki çözümü sunuyorum...

- Denenmiştir. :)

:arrow: Önce Global bir değişken tanımlıyoruz. Bu değer gördüğünüz gibi varsayılan olarak 0'landı. (alışkanlık olsun, global değişkenleri local olanlardan ayırtedebilmek için başına x gibi bir karakter koyun... Ben hep bu şekilde uygularım. Çok faydasını gördüm)

Kod: Tümünü seç

Var
  xFormNumarasi : Integer=0;
:arrow: Form Create fonksiyonumuz burda... Dikkat ederseniz ilk önce değişkenimizin değerini bir arttırdık ki formumuzun ismi Unique (benzersiz) olsun.
- Tag değeri delphi tarafından bize sunulmuş bir değiken. Integer tipinde veri saklanıyor. Ben buraya şimdiki gibi index olsun diye (gelecekte bu formu kapatmak için klavuz olacak) kullanıyorum. Her formun sıra numarasını buraya da yazıyoruz.

Kod: Tümünü seç

procedure TForm1.YeniFormOlustur;
Var
  xxx    : TForm;
begin
  Inc(xFormNumarasi);
  xxx := TForm.Create(Self);
  With xxx do
  begin
    Name      := Format('Form_%.3d', [xFormNumarasi]);
    Caption   := Name;
    Width     := 200;
    Height    := 100;
    Visible   := True;
    Left      := xFormNumarasi*100;
    Tag       := xFormNumarasi;
  end;
end;
:arrow: Kullanıcı formu köşedeki close butonu ile kapatabilir ama işi biten formu ana formdan kapatmak isterseniz ihtimaline karşı ekledim. Bulup yokeden procedure... Application içinde TForm olanların Tag değişkenine bakar. Eğer aradığımız ise bingo...

Kod: Tümünü seç

Procedure TForm1.FormuYoket(FormNo:Integer);
Var
  Sayac : Integer;
begin
  Sayac := 0;
  Repeat
    If (Components[Sayac] is TForm)
    then If TForm(Components[Sayac]).Tag = FormNo
         then TForm(Components[Sayac]).Free;
    Inc(Sayac);
  Until (Sayac >= ComponentCount);
end;
:arrow: Bunlar da uygulama....
Form Oluştur Butonu

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  YeniFormOlustur();
end;
Formu yoket Butonu

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
begin
   FormuYoket(StrToInt(Trim(InputBox('FormYoket','FormNumarası',''))));
end;
Resim
Resim ....Resim
osman_simsek
Üye
Mesajlar: 69
Kayıt: 17 Haz 2003 12:14
Konum: Alanya
İletişim:

Mesaj gönderen osman_simsek »

evde internet problemim olduğu için şu anda internet cafedeyim,
kodları aldım, akşam deneyeceğim.
ilginiz için teşekkürler..
...[ at, avrat, delphi ]...
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

imzamı taklit etmeyiniz :P
Ben Form Handle larını TList içinde tutmuştum eski bir projemde. TList Pointer olduğu için oldukça kolay

Kod: Tümünü seç

MyFormList : TList;
......
   MyFormList.Add(TFalanForm.Creat(Nil));
Erişmek içinde cast etmeyi Inutmayın

Kod: Tümünü seç

TFalanForm(MyFormList.Item[x]).Tag
gibi

ha birde püf noktası,
MyFormList.Delete satedece Handle ı uçurur, yani form u değil, form memoryde kalır, onun için Formu manual olarak free etmek gerek

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ı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

freeman35 yazdı:imzamı taklit etmeyiniz :P
o artık foruma mâl oldu abi :D

Zoru başarırım imkansız zaman alır :)

Kolay gele.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

yaw şakasına yazdımdı zaten :)
Hemen belirtmek lazım ozaman, ben bu lafı fii tarihinde gırgır dergisinin orta sayfasında görmüştüm. Yani yiğidi öldür, yoğurdunu yeme :P telif hakkı bana ait değildir, yani sözü ben uydurmadım.
Ama saolsun @mrmcop hocam da çok iyi oturtmuş walla :)
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 »

:lol: :lol: :lol:
- Delphi diyorum başka bişey demiyorum... :lol:

- Form handle'larını listede tutmak mantıklı, Create edilen formu ana formdan Free etmek istenirse Application içinde TForm'mu diye aramaya gerek kalmaz, nokta tespiti hemen yokedilebilir...

- Pointer olan bir TList'in ayrıcalığını ben anlamadım.. Aslında Global bir TStringList, Memo vs. herşeyde tutulabilirken ?

- Biraz açar mısınız ? Kaçırdığım bişi olabilir...

Önemli Ek : :!: Alttaki lafı vallahi yeni gördüm... Bunu daha yakın bir zaman önce bir forumunda görmüştüm... Allahtan imza kısmında kaldırması kolay... :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Öncelikle Lütfen eski haline getir, Mustafa nın dediği gibi slogan olması hoşuma gitti :)
TList e gelincede. Bu aslında, daha çokta sanırım, Delphi eski sürümlerinde dynamicarray yoktu. ve class ı bu yüzden yaptılar :P
TStrings yada Tmemo yada başka class larla yukarıda ki işi tabiki yaptırtabilirsiniz. Ama TList en uygunu, çünki diğerlerinde birazda Ali cengiz oyunu yapmak gerek. yani hemen aklıma gelen addObject i kullanabilirsiniz
Ama TList çok yalın ve sade bir class tır uzun koda gerek yok. Bende birazda eskiden kalma, taa dos zamanından düşük ram lerle proje yapmaya çalışırdık ve byte ın hesabını yapardık, eh işte üzerime sinmiş, hala gereksiz memory kullanmak tan kaçınıyorum.
Yukarıdaki örneği bir dynamic array lede yapabiliriz ama bunun için code yazmak gerekir ve kontrol ler yapmak gerekir. TList bu yükü alıyor. Ben bu yüzden kullanıyorum. Az önce Help ten baktım, Bir örnek code yazılmış, TList in başka bir kullanımı için. Kendi yazdığın bir class ı biriktirebiliyorsun.

Yukarıdaki örneğe göreşöyle kısa code yazabilirsin

Kod: Tümünü seç

 
        MyList.Add(MyForm.Create(Nil));//Form Create edildi ve Listeye eklendi

Kod: Tümünü seç

 
        I := MyList.Add(MyForm.Create(Nil));
       // Eğer Form TForm ise
       TForm(MyList.Items[I]).Tag := Integer(MyList.Items[I]);

      //Eğer Formun kendi yazdığınız bir elemanına erişmek isterseniz
      TMyForm(MyList.Items[I]).HedeHodo(Cart, Curt :string);
formu dışarıdan kapatacaksanız

Kod: Tümünü seç

   
var AhaBuForm : Pointer;
..............
    AhaBuForm :=  Pointer(Self.Tag);
    I := MyList.IndexOf( AhaBuForm );
   if I>=0 then TForm(MyList.Items[I]).Close;

Bir hatırlatma, Tlist Kullıldığında Program crash olduğunda yada kapatıldığında eğer formları kapatmazsanız O formların açıldığı memory blokları bloke olarak kalır. Taki makinayı açıp kapatana kadar.

Çok Az kod yazarak ve nerdeyse hiç kotrol yapmadan işimi halletmiş oldum. Ben bu yüzden TList tercih ediyorum

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 »

@freeman35 Vakit ayırıp verdiğin bilgi için teşekkürler... Zaten TMemo vs. sadece formların handle listesini tutmak adına önermiştim.. Object'in kendini değil :D

- Çalışmalarında başarılar...
Resim
Resim ....Resim
Cevapla