Form kapatma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:
Form kapatma
1 fsMDIForm formun var içinde 3 tane buton var
bu butonlarla bu formları acıyorum
3 tane fsMDIChild Form1,Form2,Form3
ancak form1 actım form2yide acınca form1 acık kalıyor form3 acınca 3 de acık kalıyor
form bir acık form2 yi acınca form1 in kapanmasını istiyorum
nasıl yapılır henüz acemiyizde ayrdımcı olursanız memnun olurum
tesekkürler BASARILAR.
bu butonlarla bu formları acıyorum
3 tane fsMDIChild Form1,Form2,Form3
ancak form1 actım form2yide acınca form1 acık kalıyor form3 acınca 3 de acık kalıyor
form bir acık form2 yi acınca form1 in kapanmasını istiyorum
nasıl yapılır henüz acemiyizde ayrdımcı olursanız memnun olurum
tesekkürler BASARILAR.
-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:
-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:
Merhaba,
MDI formlar için :
1. Project Options->Forms'tan Avaible Forms kısmına alın.
2. Formismi := TFormismi.Create(Application); diye oluşturun, form ekranda gözükür.
3. Kapatırkende Onclose olayına Action := caFree; yazın.
Benim kullandığım (gördüğüm kadarıyla genelde de kullanılan) yöntem bu.
Kolay gelsin.
MDI formlar için :
1. Project Options->Forms'tan Avaible Forms kısmına alın.
2. Formismi := TFormismi.Create(Application); diye oluşturun, form ekranda gözükür.
3. Kapatırkende Onclose olayına Action := caFree; yazın.
Benim kullandığım (gördüğüm kadarıyla genelde de kullanılan) yöntem bu.
Kolay gelsin.
-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:
ilginize tesekkür ederim
Sorunu daha iyi anlayasınız diye kodlarıda asagıya yazıcam
Bendemi hata nedir cıksın ortaya bu işlemi yapamassam hayallerim yıkılır
------ANA MENU FORMU-----( fsMDIForm)---------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
Tana_menu = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ana_menu: Tana_menu;
implementation
uses Unit2,Unit3,Unit4;
{$R *.dfm}
procedure Tana_menu.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm1,Form1);
Form1.Show;
end;
procedure Tana_menu.Button2Click(Sender: TObject);
begin
Application.CreateForm(TForm2,Form2);
Form2.Show;
end;
procedure Tana_menu.Button3Click(Sender: TObject);
begin
Application.CreateForm(TForm3,Form3);
Form3.Show;
end;
end.
----ANA MENU BİTTİ-----------------------
-------FORM1---( fsMDCIChild Fomlar )-----------
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
end.
-------FORM1-----BİTTİ---------
Simdi üstteki ve soldaki paneller kapanızı karıstırmasın ( Panel1: TPanel; Panel2: TPanel;)
acılan formları bu panelin altında acıyorum ve button lar panelin üstünde
form1 actım simdi form2 yi acınca Onclose olayımı meydana geliyor
yani ben form1 kapatmadan form2 yi actım
Action := caFree; //işe yarıyormu denedim ama olmadı
----------------------------------------
Siz bir veb sayfası düsünün üstte barneriniz var
solda linkleiniz linklere tıkladıkca sayfalar sagda acılıyor
1. sayfa acıkken siz 2. sayfanın linkine tıklıyorsunuz
1. sayfa kapanır 2. sayfa acılır yani bunu delphi formlarında yapmak
kolay olsa gerek ama yanlıs ne
----------------------
birde böyle denedim
procedure Tana.Button1Click(Sender: TObject);
begin
//Form1.Free;
Form2.Free;
Form3.Free;
Application.CreateForm(TForm1, Form1);
Form1.show;
end;
procedure Tana.Button2Click(Sender: TObject);
begin
Form1.Free;
//Form2.Free;
Form3.Free;
Application.CreateForm(TForm2, Form2);
Form2.show;
end;
procedure Tana.Button3Click(Sender: TObject);
begin
Form1.Free;
Form2.Free;
//Form3.Free;
Application.CreateForm(TForm3, Form3);
Form3.show;
end;
---------<<<---uygulama kitleniyor hata veriyor-----------------------
Kusura bakmayın biraz uzun oldu ama umarım yukardaki kodlarda hatayı bulursunuz
yada dogrusunu söylersiniz
eger bu konuda indirebilcegim örnekler için adres bile verseniz sanırım yeterli
olur
delphiturkiye ailsine
TEKRAR TEKRAR TESEKKÜR EDER ÜSTÜN BASARILAR DİLERİM
Sorunu daha iyi anlayasınız diye kodlarıda asagıya yazıcam
Bendemi hata nedir cıksın ortaya bu işlemi yapamassam hayallerim yıkılır
------ANA MENU FORMU-----( fsMDIForm)---------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
Tana_menu = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ana_menu: Tana_menu;
implementation
uses Unit2,Unit3,Unit4;
{$R *.dfm}
procedure Tana_menu.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm1,Form1);
Form1.Show;
end;
procedure Tana_menu.Button2Click(Sender: TObject);
begin
Application.CreateForm(TForm2,Form2);
Form2.Show;
end;
procedure Tana_menu.Button3Click(Sender: TObject);
begin
Application.CreateForm(TForm3,Form3);
Form3.Show;
end;
end.
----ANA MENU BİTTİ-----------------------
-------FORM1---( fsMDCIChild Fomlar )-----------
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
end.
-------FORM1-----BİTTİ---------
Simdi üstteki ve soldaki paneller kapanızı karıstırmasın ( Panel1: TPanel; Panel2: TPanel;)
acılan formları bu panelin altında acıyorum ve button lar panelin üstünde
form1 actım simdi form2 yi acınca Onclose olayımı meydana geliyor
yani ben form1 kapatmadan form2 yi actım
Action := caFree; //işe yarıyormu denedim ama olmadı
----------------------------------------
Siz bir veb sayfası düsünün üstte barneriniz var
solda linkleiniz linklere tıkladıkca sayfalar sagda acılıyor
1. sayfa acıkken siz 2. sayfanın linkine tıklıyorsunuz
1. sayfa kapanır 2. sayfa acılır yani bunu delphi formlarında yapmak
kolay olsa gerek ama yanlıs ne
----------------------
birde böyle denedim
procedure Tana.Button1Click(Sender: TObject);
begin
//Form1.Free;
Form2.Free;
Form3.Free;
Application.CreateForm(TForm1, Form1);
Form1.show;
end;
procedure Tana.Button2Click(Sender: TObject);
begin
Form1.Free;
//Form2.Free;
Form3.Free;
Application.CreateForm(TForm2, Form2);
Form2.show;
end;
procedure Tana.Button3Click(Sender: TObject);
begin
Form1.Free;
Form2.Free;
//Form3.Free;
Application.CreateForm(TForm3, Form3);
Form3.show;
end;
---------<<<---uygulama kitleniyor hata veriyor-----------------------
Kusura bakmayın biraz uzun oldu ama umarım yukardaki kodlarda hatayı bulursunuz
yada dogrusunu söylersiniz
eger bu konuda indirebilcegim örnekler için adres bile verseniz sanırım yeterli
olur
delphiturkiye ailsine
TEKRAR TEKRAR TESEKKÜR EDER ÜSTÜN BASARILAR DİLERİM
-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:
selam arkadaslar
yoluma devam edebilmem için yukardaki sorunu cözmem gerekiyor
en azından olurmu olmazmı bilmem gerekiyor
bu cevabı yazmamak için inanın cok ugrastım
cok arastırdım kitap aldım ama hala oldugum yerdeyim
delphiye yeni basladım ve basladıgımdan beri
sırf bu form kapatma olayı ile ilgileniyorum bitiremedim
Bu konu uzadıgı için üzgünüm
iyi niyetli yardım sever arkadaslardan yardım bekliyorum
su an baska carem yok
Yardımcı olmak isteyen arkadaslar yukarda sorun anlatılmıstır
Simdiden yardımcı olanada olmayanada tesekkür ederim
Tüm arkadaslara basarılar dilerim
Abdulkadir....
yoluma devam edebilmem için yukardaki sorunu cözmem gerekiyor
en azından olurmu olmazmı bilmem gerekiyor
bu cevabı yazmamak için inanın cok ugrastım
cok arastırdım kitap aldım ama hala oldugum yerdeyim
delphiye yeni basladım ve basladıgımdan beri
sırf bu form kapatma olayı ile ilgileniyorum bitiremedim
Bu konu uzadıgı için üzgünüm
iyi niyetli yardım sever arkadaslardan yardım bekliyorum
su an baska carem yok
Yardımcı olmak isteyen arkadaslar yukarda sorun anlatılmıstır
Simdiden yardımcı olanada olmayanada tesekkür ederim
Tüm arkadaslara basarılar dilerim
Abdulkadir....
Size çalışan şu kodu gönderiyorum. Formların Onclose'undaki nil atamaları ve gerekli nil kontrolleri kafanızı karıştırmasın aslınca ihtiyacınız açısından zaruri olmayıp bir kez açılan formun ikinci kez tuşa basılınca açılmamasını sağlamaktadır.
Kolay gelsin...
diğer formlar
Kolay gelsin...
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TFRM_ANA = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FRM_ANA: TFRM_ANA;
implementation
{$R *.DFM}
uses
Unit2, Unit3, Unit4;
procedure TFRM_ANA.Button1Click(Sender: TObject);
begin
if Form3<>nil then
Form3.Close;
if Form4<>nil then
Form4.Close;
if Form2=nil then
Application.CreateForm(TForm2,Form2);
Form2.Show;
end;
procedure TFRM_ANA.Button2Click(Sender: TObject);
begin
if Form2<>nil then
Form2.Close;
if Form4<>nil then
Form4.Close;
if Form3=nil then
Application.CreateForm(TForm3,Form3);
Form3.Show;
end;
procedure TFRM_ANA.Button3Click(Sender: TObject);
begin
if Form2<>nil then
Form2.Close;
if Form3<>nil then
Form3.Close;
if Form4=nil then
Application.CreateForm(TForm4,Form4);
Form4.Show;
end;
end.
Kod: Tümünü seç
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm2 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form2:=nil;
end;
end.
Kod: Tümünü seç
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm3 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.DFM}
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form3:=nil;
end;
end.
Kod: Tümünü seç
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm4 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.DFM}
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form4:=nil;
end;
end.
-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:
fahrettin abi tesekkür ederim
inanın merakla bekliyordum hemen denedim ok ellerine saglık
Artık yoluma devam edecegim sayenizde valla bunalmıstım
if kontrolu ile düsünüyordum ama nasıl bilmiyordum
aslında kodlama ya yabancı deyilim
İleri seviye denebilecek kadar
php derlerim ama delphi garip geldi henüz alısamadım
biraz degişken ler kontrol ve döngüler hakkında bilgi edineyim
artık delphi basına rahatlıkla oturayım
tesekkür eder BASARILAR DİLERİM
inanın merakla bekliyordum hemen denedim ok ellerine saglık
Artık yoluma devam edecegim sayenizde valla bunalmıstım
if kontrolu ile düsünüyordum ama nasıl bilmiyordum
aslında kodlama ya yabancı deyilim
İleri seviye denebilecek kadar
php derlerim ama delphi garip geldi henüz alısamadım
biraz degişken ler kontrol ve döngüler hakkında bilgi edineyim
artık delphi basına rahatlıkla oturayım
tesekkür eder BASARILAR DİLERİM
-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:
bu arada hemen birsey daha isteyeyim
mesala yukarda
Form2:=nil;
dediniz
bu ve bunun gibi functonların kullanımı hakında bir manuel varmı
ufak egitim notları falan
bircok not buldum ama bu bu işe yarar demiyor sadece kullanılmıs
biraz delphinin mantıgını kavramama yardımcı olacak dokuman
nerden bulabilirim
cok tesekkür ederim
mesala yukarda
Form2:=nil;
dediniz
bu ve bunun gibi functonların kullanımı hakında bir manuel varmı
ufak egitim notları falan
bircok not buldum ama bu bu işe yarar demiyor sadece kullanılmıs
biraz delphinin mantıgını kavramama yardımcı olacak dokuman
nerden bulabilirim
cok tesekkür ederim
Uzun zamandir Delphi kitaplari ile pek yakın munasebetim olmadığı için size doğrudan somut bir kaynak tavsiye edemeyecegim ama forumda bu konular daha önce geçti arama yaparak tecrübeli arkadaşların hangi kitapları tavsiye ettiğini bulabilirsiniz. Uygun bir kitabı takip ederek eksiklerinizi tamamlayabilirsiniz. Takildiginiz yerleri zaten foruma sordugunuzda cevaplşanmaya calisilacaktir.
Form2:=nil
koduna gelince. Bu bir fonksiyon degil. Bir atama. Form2 değişkenine nil atanıyor. Amac da su ki. Çağırırken Form2 eger nil ise cgirma yaptigimiz icin. On close'da boyle bir atama yaptik. Zira Form hic acilmadiginda zaten Form2 nil olmakla birlikte. Form bir kez acildiktan sonra nil den farkli oldugu icin form kapatilirken tekrar nil ataniyor ki kontrolumuz işe yarasın.
Kolay gelsin...
Form2:=nil
koduna gelince. Bu bir fonksiyon degil. Bir atama. Form2 değişkenine nil atanıyor. Amac da su ki. Çağırırken Form2 eger nil ise cgirma yaptigimiz icin. On close'da boyle bir atama yaptik. Zira Form hic acilmadiginda zaten Form2 nil olmakla birlikte. Form bir kez acildiktan sonra nil den farkli oldugu icin form kapatilirken tekrar nil ataniyor ki kontrolumuz işe yarasın.
Kolay gelsin...
bir zamanlar bende benzer birsey yapmıstım
izledigim yol icin bir ornek proje hazırladım
mdi form dfm dosyası
mdi form pas dosyası
Child1 form dfm dosyası
child1 form pas dosyası
child2 form dfm dosyası
child2 form pas dosyası
child1 ve child2 projede autocreate den cıkarılır
biraz uzun oldu ama kusura bakmayın
bunu bşr zamanlar denemistim sonra vazgectim boyle bir yapıyı kullanmaktan
cunku pencereleri acarken animasyonlu olarak maximize ediyor
bunu asmanın bir yolu varmı
yani win2000 deki explorer da bulunan toolbarda butona tıklayınca anında pencere acılıyor ve eskisi hemen siliniyor
yoksa boyle bir yapı icin frame mi kullanmak lazım
o zaman da oncreate yordamı diye bi sey kullanılamıyor
benimde o zamanlar oncreate olayını kullanmam gerekiyordu
neyse fazla uzatmayayım
saygılarımla
izledigim yol icin bir ornek proje hazırladım
mdi form dfm dosyası
Kod: Tümünü seç
object frmMdi: TfrmMdi
Left = 255
Top = 168
Width = 693
Height = 499
Caption = 'frmMdi'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
FormStyle = fsMDIForm
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object ToolBar1: TToolBar
Left = 0
Top = 0
Width = 685
Height = 29
ButtonHeight = 21
ButtonWidth = 65
Caption = 'ToolBar1'
ShowCaptions = True
TabOrder = 0
OnClick = OpenChild
object ToolButton1: TToolButton
Tag = 1
Left = 0
Top = 2
Caption = 'ToolButton1'
ImageIndex = 0
OnClick = OpenChild
end
object ToolButton2: TToolButton
Tag = 2
Left = 65
Top = 2
Caption = 'ToolButton2'
ImageIndex = 1
OnClick = OpenChild
end
end
end
Kod: Tümünü seç
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ToolWin;
type
TfrmMdi = class(TForm)
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
procedure OpenChild(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMdi: TfrmMdi;
implementation
uses child1, child2;
{$R *.DFM}
procedure TfrmMdi.OpenChild(Sender: TObject);
var
i:Integer;
begin
for i:=0 to MDIChildCount-1 do
MDIChildren[i].Close;
case (Sender as TControl).Tag of
1: frmChild1:=TfrmChild1.Create(nil);
2: frmChild2:=TfrmChild2.Create(nil);
end;
MDIChildren[(Sender as TControl).Tag-1].WindowState:=wsMaximized;
end;
end.
Kod: Tümünü seç
object frmChild1: TfrmChild1
Left = 278
Top = 159
Width = 591
Height = 425
Caption = 'frmChild1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
FormStyle = fsMDIChild
OldCreateOrder = False
Position = poDefault
Visible = True
OnClose = FormClose
PixelsPerInch = 96
TextHeight = 13
end
Kod: Tümünü seç
unit child1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TfrmChild1 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmChild1: TfrmChild1;
implementation
{$R *.DFM}
procedure TfrmChild1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=caFree;
frmChild1:=nil;
end;
end.
Kod: Tümünü seç
object frmChild2: TfrmChild2
Left = 231
Top = 103
Width = 696
Height = 480
Caption = 'frmChild2'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
FormStyle = fsMDIChild
OldCreateOrder = False
Position = poDefault
Visible = True
OnClose = FormClose
PixelsPerInch = 96
TextHeight = 13
end
Kod: Tümünü seç
unit child2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TfrmChild2 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmChild2: TfrmChild2;
implementation
{$R *.DFM}
procedure TfrmChild2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=caFree;
frmChild2:=nil;
end;
end.
biraz uzun oldu ama kusura bakmayın
bunu bşr zamanlar denemistim sonra vazgectim boyle bir yapıyı kullanmaktan
cunku pencereleri acarken animasyonlu olarak maximize ediyor
bunu asmanın bir yolu varmı
yani win2000 deki explorer da bulunan toolbarda butona tıklayınca anında pencere acılıyor ve eskisi hemen siliniyor
yoksa boyle bir yapı icin frame mi kullanmak lazım
o zaman da oncreate yordamı diye bi sey kullanılamıyor
benimde o zamanlar oncreate olayını kullanmam gerekiyordu
neyse fazla uzatmayayım
saygılarımla