Form kapatma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Form kapatma

Mesaj gönderen abdulkadir »

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

Mesaj gönderen mussimsek »

Kapatmak istediğin formun OnClose olayına

Action := caFree;

kodunu yaz. başka bir formdan kapatmak içinde, mesela Form1'i kapatmak için

Form1.Free;

komutunu kullan.

Kolay gelsin.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

tesekkür ederim

Bazı işlemler cok basit olsada yeni oldugumuz için
beceremiyoruz

sizin gibi biygiyi paylasan arkadas ve sitelerle
TURKİYE gurur duyar
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

abdulkadir yazdı:Bazı işlemler cok basit olsada yeni oldugumuz için beceremiyoruz
Hepimiz aynı yollardan geçtik. En basit bir işlem için günlerce uğraştığım çok oldu.

Yardmcı olabildiysek ne mutlu :)

İyi günler.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

Candan tesekkür ederim

onları denedim ama hala kapatma olayında sorun var


iyice tespit ettikten sonra hala beceremedi isem tekrar yazarım

tesekkür ederim....

sevgiler
İyi calısmalar
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

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.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

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
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

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....
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

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...

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.
diğer formlar

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.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

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
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Mesaj gönderen abdulkadir »

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
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

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...
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

bir zamanlar bende benzer birsey yapmıstım
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
mdi form pas dosyası

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.
Child1 form dfm dosyası

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
child1 form pas dosyası

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.
child2 form dfm dosyası

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
child2 form pas dosyası

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.
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
Cevapla