Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

[tanya] MDI form delphi

[tanya] saya ingin buat form induk dan form child di delphi,

form1 --> form induk
form2 --> form child
form3 --> form child

kenapa stiap di klik button1 form3nya nambah terus?? untuk manggil form 3 saya pake

TForm3.Create(Application);



image

Comments

  • jah ...
    ya jangan pake method .Create() nya
    kagak salah kalo form nya nambah terus

    elo pan bisa cukup men-set property .Visible
    jadi True / False
  • bisa kasih contohnya om...maaf baru pertama kali megang delphi, gue baca" katanya klo manggil form child musti pakek create()..
  • create nya cuma 1x, dgn kondisi property visible false
    selanjutnya tinggal hide / show doang

    pan sama kalo elo mau hide / show elemen html
    kalo html property .display yg di set none / block
  • brarti  form setting ga perlu diset auto create form, yang form child ga perlu di pindah ke avalible form
  • maksudnya bagaimana ? :D

    elo pada saat bikin form secara visual pan bisa langsung bikin 3 form
    form1 saja yg property visible nya di set true
    yg lain property visible nya di set false

    kalo di klik button di form1
    tinggal set aja : Form3.Visible:=True;

    jangan lupa, unit nya form2 dan form3 di uses di form1
  • masih gak dong je om...
    gini lo saya buatnya,

    -pada properties FormStyles tak set  fsMDIForm untuk Form1 dan fsMDIChild untuk Form2 & fom3
    -pada project options yang ada pada menu delphi ( Project -> Options)  tabs form
     form1 set di  list auto-create froms,  form2dan fom3 ke list Available forms.

    nah itu kan form 2 + form3 property visible nya ga bisa di set false



  • o, window beranak ...

    ubah aja ini :
    TForm3.Create(Application);

    jadi :
    if Form3.Caption='' then Form3:=TForm3.Create(Application);

    jangan lupa di global var nya definisikan :
    Form3: TForm3;
  • iyo pan diatas tak kasih tau form child + form induk...

    saya manggilnya form 3 pake 

    TForm3.Create(Application);,

    trus di event onclose form3 + form2

    Action:= CaFree;
    Form2 := nil;


    jadi ntar pengenya di fom1 (induk) ada 2 button klo di klik buton1 form 3nya tampil klo di klik button2 form 2nya tampil... tapi yang jadi maslah form3nya jadi duplikat (tumpuk")...



  • lha itu pan sudah gw kasih tau ...

    if Form3.Caption='' then Form3:=TForm3.Create(Application);

    bukan cuma : TForm3.Create(Application)
  • udah tak coba

    var
    Form3: TForm3;

    begin

    if Form3.Caption='' then Form3:=TForm3.Create(Application);

    pas diklik malah ga muncul form 3ne

  • koding elo lengkapnya kaya apa ?

  • sek itu codingnya taruh dimana om, tadi kandibutton nya  gini

    TForm3.Create(Application) ;

    trus tak ubah jadi gini


    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
    Form3: TForm3;
    begin
    if Form3.Caption='' then Form3:=TForm3.Create(application);
    end;

  • edited June 2014
    mas ... gw bilang kan :
    jangan lupa di global var nya definisikan :
    Form3: TForm3;
  • oh iyo om, maaf ga liat tadi... trus klo pengen hiden fom3 / form 2nya gimana mas... jadi klo klik button1 form3 tampil klo klik buton2 form2tampil form3 hiden,

  • [solved]


    oh ga jadi  udah bisa mas... maksih..
  • edited June 2014
    gw cuma nulis utk form2

    type
      TForm2 = class(TForm)
      private
        procedure WMSize(var M : TWMSIZE); message WM_Size;
      ...
      ...
      end;

    implementation
    ...
    ...
    procedure TForm2.WMSize(var M : TWMSIZE) ;
    begin
      if M.SizeType=Size_Minimized then begin
        ShowWindow(Handle,Sw_Hide) ;
        M.Result := 0;
      end
      else inherited;
    end;
    ...
    ...

    di form1 nya

    procedure TForm1.Button1Click(Sender: TObject); // show
    begin
      if Form2.Caption='' then Form2:=TForm2.Create(Application)
      else begin
        ShowWindow(Form2.Handle,SW_RESTORE);
      end;
    end;

    procedure TForm1.Button2Click(Sender: TObject); // hide
    begin
      ShowWindow(Form2.Handle,SW_RESTORE);
      Form2.WindowState:=wsMinimized;
    end;



    ingat,
    kalo mainan child window
    dimana child nya masing2 pasti cuma ada 1 (kagak bisa banyak)
    kalo window child di close, jangan di :
    Action:= CaFree;
    Form2 := nil;

    cukup disembunyikan saja child window nya
    biar kagak boros bolak-balik proses alokasi / dealokasi memori
  • if form2 = nil then
      form2 := tform2.create(application);
    form2.show;
  • maaf tanya lagi itu kalau pas pertama kali di klik ukurannya max,... klo udah dua kali dst, kok ga jadi maxsimal lagi ukurannya, padahal di set ukuran form 2 danb tiga tak seting max size...
  • koding elo kaya apa ?

  • Form induknya ini

    type
      Thome = class(TForm)
      
        procedure BitBtn1Click(Sender: TObject);
        procedure BitBtn2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
     
    var
      home: Thome;

    implementation

    uses Unit4, Unit5;

    {$R *.dfm}


    procedure Thome.BitBtn1Click(Sender: TObject);
    begin
    if penduduk.Caption='' then penduduk:=Tpenduduk.Create(application)
      else begin
        ShowWindow(penduduk.Handle,SW_RESTORE);
        ShowWindow(pendatang.Handle,SW_RESTORE);
      pendatang.WindowState:=wsMinimized;
    end;
    end;

    procedure Thome.BitBtn2Click(Sender: TObject);
    begin
    if pendatang.Caption='' then pendatang:=Tpendatang.Create(application)
    else begin
        ShowWindow(pendatang.Handle,SW_RESTORE);

    ShowWindow(penduduk.Handle,SW_RESTORE);
      penduduk.WindowState:=wsMinimized;
    end;
    end;
    procedure Thome.FormCreate(Sender: TObject);
    begin

    end;

    end.
  • edited June 2014
    ya pasti ke restore ukuran semula ...
    soalnya elo pake ini :

    ShowWindow(Handle,SW_RESTORE);

    emang child window nya mau dibuka selalu maximize terus ?
  • yap... ada beberapa child yang harus maximal...
  • edited June 2014
    Form2.WindowState:=wsMinimized;
    Form3.WindowState:=wsMaximized;

    Form2 itu yg disembunyikan
    Form3 itu yg mau dibuka maximize
  • sip bisa om, thx.... trus kira" bisa nggak nek pas pertama kali run mainform
    nya dihidden dulu... jadi pengennya ada form dulu sebelum tampil form
    utama... 
  • maksudnya gimana ?

    ada form lain biasa ?
    pan tinggal mainan visible nya doang
  • jadi pengennya ada form login(frm normal) sebelum form utama ,kan ntar form utamanya di hidden dulu nah itu cara hiden form utamanya gimana... 
  • form2 properti FormStyle = fsStayOnTop

    Form1

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Form2 := TForm2.Create(Application);
      Form2.show;
    end;

    Form2

    procedure TForm2.FormActivate(Sender: TObject);
    begin
      Form1.Visible := false;
    end;
Sign In or Register to comment.