Vytvoření prohlížeče, vytvoření editačního dialogu

Top  Previous  Next

Seznam témat:

řešení

 

Řešení

 

Vytvoření modálního prohlížeče

Skript vytvoří jednoduchý modální (nelze současně pracovat jinde) prohlížeč nad tabulkou dba.gkurzy, včetně editačního dialogu. Před otevřením se zeptá na datum, které je zohledněno v SQL pro browser.

 

//procedura pro vytvoření editačního dialogu

procedure WantDialog(Sender: TCustomBrowser; Command: integer; Form: TFormBrowserGrid; var Dlg: TFormBrowserDlg);

var

 NEdit: TBrowserNumEdit;

 DEdit: TBrowserDateEdit;

 LEdit: TBrowserLookupEdit;

 Lbl: TLabelPlus;

 Btn: TButton;

 CurrEdit: TBrowserCurrEdit;

begin

 Dlg := TFormBrowserDlg.CreateForBrowser(Sender, Form);

 Dlg.Height := 280;

 Btn := TButton(Dlg.FindComponent('BtnOk'));

 Btn.Top := 220;

 Btn := TButton(Dlg.FindComponent('BtnCancel'));

 Btn.Top := 220;

 //Měna

 LEdit := TBrowserLookupEdit.Create(Dlg);

 LEdit.Left := 20;

 LEdit.Top := 30;

 LEdit.Width := 100;

 LEdit.FieldName := 'mena_id';

 LEdit.Parent := Dlg;

 LEdit.LookupDatabase := DefaultDatabaseName;

 LEdit.LookupSQL.Text := 'select m.id_mena, s.nazev, s.cleneu from dba.gmeny as m, dba.gstaty as s where s.id_stat = m.stat_id order by 1';

 LEdit.LookupField := 'id_mena';

 LEdit.TabOrder := 0;

 LEdit.AllowNull := False;

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'Měna';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := LEdit;

 Lbl.Attached := True;

 //Platnost od

 DEdit := TBrowserDateEdit.Create(Dlg);

 DEdit.Left := 20;

 DEdit.Top := 80;

 DEdit.Width := 100;

 DEdit.FieldName := 'dne';

 DEdit.Parent := Dlg;

 DEdit.TabOrder := 1;

 DEdit.AllowNull := False;

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'Platnost od';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := DEdit;

 Lbl.Attached := True;

 //Stát

 LEdit := TBrowserLookupEdit.Create(Dlg);

 LEdit.Left := 20;

 LEdit.Top := 130;

 LEdit.Width := 100;

 LEdit.FieldName := 'stat';

 LEdit.Parent := Dlg;

 LEdit.LookupDatabase := DefaultDatabaseName;

 LEdit.LookupSQL.Text := 'select id_stat, nazev, cleneu from dba.gstaty order by 1';

 LEdit.LookupField := 'id_stat';

 LEdit.TabOrder := 2;

 LEdit.AllowNull := False;

 

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'Stát';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := LEdit;

 Lbl.Attached := True;

 //Činitel

 NEdit := TBrowserNumEdit.Create(Dlg);

 NEdit.Left := 20;

 NEdit.Top := 180;

 NEdit.Width := 40;

 NEdit.FieldName := 'cinitel';

 NEdit.Parent := Dlg;

 NEdit.DataType := ntInteger;

 NEdit.ButtonVisible := False;

 NEdit.TabOrder := 3;

 NEdit.AllowNull := False;

 

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'Činitel';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := NEdit;

 Lbl.Attached := True;

 //Kurz

 NEdit := TBrowserNumEdit.Create(Dlg);

 NEdit.Left := 65;

 NEdit.Top := 180;

 NEdit.Width := 55;

 NEdit.FieldName := 'koef';

 NEdit.Parent := Dlg;

 NEdit.DataType := ntFloat;

 NEdit.ButtonVisible := False;

 NEdit.TabOrder := 4;

 NEdit.AllowNull := False;

 

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'Kurz';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := NEdit;

 Lbl.Attached := True;

 //Domácí měna

 LEdit := TBrowserLookupEdit.Create(Dlg);

 LEdit.Left := 150;

 LEdit.Top := 30;

 LEdit.Width := 100;

 LEdit.FieldName := 'menad';

 LEdit.Parent := Dlg;

 LEdit.LookupDatabase := DefaultDatabaseName;

 LEdit.LookupSQL.Text := 'select m.id_mena, s.nazev, s.cleneu from dba.gmeny as m, dba.gstaty as s where s.id_stat = m.stat_id order by 1';

 LEdit.LookupField := 'id_mena';

 LEdit.TabOrder := 5;

 LEdit.AllowNull := False;

 

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'Domácí měna';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := LEdit;

 Lbl.Attached := True;

end;

 

 

//vlastní skript

var

 Br: TBrowser;

 DatumOd: TDateTime;

begin

 //předvyplň dnešní datum

 DatumOd := Date;

 //zeptej se na datum

 if not DateBox('Zadejte datum platnosti', DatumOd) then Exit;

 

 //vytvoř a otevři browser

 Br := TBrowser.Create(nil);

 try

   Br.Name := 'BrKurzyCustom';

   Br.Caption := 'Číselník kurzů ke dni '+DateToStr(DatumOd);

   Br.PrimaryKeys.Add('mena_id');

   Br.PrimaryKeys.Add('dne');

   Br.PrimaryKeys.Add('stat');

   Br.SQL.Add('select * from dba.gkurzy where dne >= :datum');

   Br.Params[0].AsDateTime := DatumOd;

   Br.TableName := 'dba.gkurzy';

   Br.OnWantDialogInstance := @WantDialog;

   Br.ShowModal;

 finally

   Br.Free;

 end;

end.

 

Nemodální prohlížeč

Skript vytvoří jednoduchý nemodální (lze současně pracovat i jinde) prohlížeč nad tabulkou dba.gstaty. Bez editačního dialogu. Pro tip jak vytvořit a připojit editační dialog viz "Modální prohlížeč".

var

 Br: TBrowser;

begin

 Br := TBrowser.Create(nil);

 try

   Br.Name := 'BrStatyCustom';

   Br.Caption := 'Číselník států';

   Br.PrimaryKeys.Add('id_stat');

   Br.SQL.Add('select * from dba.gstaty');

   Br.TableName := 'dba.gstaty';

   Br.FreeOnClose := True; //uvolní Br z paměti po zavření

   Br.Show;

 except

   Br.Free; //nastane jen v případě chyby v kódu výše

 end;

end.

 

Prohlížeč typu master - details

Skript vytvoří jednoduchý modální (nelze současně pracovat jinde) prohlížeč nad tabulkou dba.omater, včetně editačního dialogu. Dialog obsahuje další (detailní) prohlížeč nad závislou tabulkou (dba.omckody), včetně editačního dialogu.

 

{

*************************************************************

  procedura pro vytvoření editačního dialogu hlavičky

*************************************************************

}

procedure MakeDialogHdr(Sender: TCustomBrowser; Command: integer; Form: TFormBrowserGrid; var Dlg: TFormBrowserDlg);

var

 EditID,EditNazev: TBrowserEdit;

 RadiosDPH: TBrowserRadios;

 Lbl: TLabelPlus;

 Btn: TButton;

 BrDetail: TBrowserDetail;

 Grid: TDBGridPlus;

 BtnIns,BtnDel,BtnUpd: TBrowserButton;

begin

 //vytvoř dialog

 Dlg := TFormBrowserDlg.CreateForBrowser(Sender, Form);

 Dlg.Width := 700;

 Dlg.Height := 400;

 

 //umísti buttony OK a Storno (už jsou vytvořeny)

 Btn := TButton(Dlg.FindComponent('BtnOk'));

 Btn.Left := 527;

 Btn.Top := 340;

 

 Btn := TButton(Dlg.FindComponent('BtnCancel'));

 Btn.Left := 610;

 Btn.Top := 340;

 

 //pole pro kód

 EditID := TBrowserEdit.Create(Dlg);

 EditID.Left := 20;

 EditID.Top := 30;

 EditID.Width := 160;

 EditID.FieldName := 'id_material';

 EditID.Parent := Dlg;

 EditID.TabOrder := 0;

 EditID.AllowNull := False;

 

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'Kód';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := EditID;

 Lbl.Attached := True;

 

 //pole pro název

 EditNazev := TBrowserEdit.Create(Dlg);

 EditNazev.Left := 200;

 EditNazev.Top := 30;

 EditNazev.Width := 200;

 EditNazev.FieldName := 'nazev';

 EditNazev.Parent := Dlg;

 EditNazev.TabOrder := 1;

 EditNazev.AllowNull := False;

 

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'Název';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := EditNazev;

 Lbl.Attached := True;

 //pole pro DPH

 RadiosDPH := TBrowserRadios.Create(Dlg);

 RadiosDPH.Caption := 'DPH';

 RadiosDPH.Left := 420;

 RadiosDPH.Top := 20;

 RadiosDPH.Height := 70;

 RadiosDPH.FieldName := 'dph';

 RadiosDPH.Parent := Dlg;

 RadiosDPH.TabOrder := 2;

 RadiosDPH.Items.Add('0%');

 RadiosDPH.Items.Add('snížená sazba');

 RadiosDPH.Items.Add('základní sazba');

 

 //displej pro browser-detail

 Grid := TDBGridPlus.Create(Dlg);

 Grid.Left := 20;

 Grid.Top := 100;

 Grid.Width := 660;

 Grid.Height := 200;

 Grid.Parent := Dlg;

 Grid.TabOrder := 3;

 

 //browser-detail s položkami

 BrDetail := TBrowserDetail.Create(Dlg);

 BrDetail.Name := 'BrDetail';

 BrDetail.Caption := 'Čárové kódy';

 BrDetail.PrimaryKeys.Add('material_id');

 BrDetail.PrimaryKeys.Add('id_ean');

 BrDetail.SQL.Add('select material_id, id_ean, nazev from dba.omckody');

 BrDetail.TableName := 'dba.omckody';

 BrDetail.Constraints.Add('material_id=id_material');

 BrDetail.DataDisplay := Grid;

 BrDetail.OnWantDialogInstance := @MakeDialogItm;

 

 BtnIns := TBrowserButton.Create(Dlg);

 BtnIns.Left := 450;

 BtnIns.Top := 304;

 BtnIns.Operation := opInsert;

 BtnIns.Browser := BrDetail;

 BtnIns.Parent := Dlg;

 BtnIns.TabOrder := 4;

 

 BtnDel := TBrowserButton.Create(Dlg);

 BtnDel.Left := 530;

 BtnDel.Top := 304;

 BtnDel.Operation := opDelete;

 BtnDel.Browser := BrDetail;

 BtnDel.Parent := Dlg;

 BtnDel.TabOrder := 5;

 

 BtnUpd := TBrowserButton.Create(Dlg);

 BtnUpd.Left := 610;

 BtnUpd.Top := 304;

 BtnUpd.Operation := opUpdate;

 BtnUpd.Browser := BrDetail;

 BtnUpd.Parent := Dlg;

 BtnUpd.TabOrder := 6;

end;

 

{

*************************************************************

  procedura pro vytvoření editačního dialogu položky

*************************************************************

}

procedure MakeDialogItm(Sender: TCustomBrowser; Command: integer; Form: TFormBrowserGrid; var Dlg: TFormBrowserDlg);

var

 EditNazev,EditEAN: TBrowserEdit;

 Grabber: TBrowserDataGrabber;

 Lbl: TLabelPlus;

 Btn: TButton;

begin

 //vytvoř dialog

 Dlg := TFormBrowserDlg.CreateForBrowser(Sender, Form);

 Dlg.Width := 500;

 Dlg.Height := 200;

 

 //umísti buttony OK a Storno (už jsou vytvořeny)

 Btn := TButton(Dlg.FindComponent('BtnOk'));

 Btn.Left := 327;

 Btn.Top := 140;

 

 Btn := TButton(Dlg.FindComponent('BtnCancel'));

 Btn.Left := 410;

 Btn.Top := 140;

 

 //pole pro kód skl. karty (prvek musí být přítomen, protože je to součástí prim. klíče)

 Grabber := TBrowserDataGrabber.Create(Dlg);

 Grabber.FieldNames.Add('material_id');

 Grabber.Parent := Dlg;

 

 //pole pro EAN

 EditEAN := TBrowserEdit.Create(Dlg);

 EditEAN.Left := 20;

 EditEAN.Top := 30;

 EditEAN.Width := 100;

 EditEAN.FieldName := 'id_ean';

 EditEAN.Parent := Dlg;

 EditEAN.TabOrder := 0;

 EditEAN.AllowNull := False;

 

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'EAN';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := EditEAN;

 Lbl.Attached := True;

 

 //pole pro název

 EditNazev := TBrowserEdit.Create(Dlg);

 EditNazev.Left := 140;

 EditNazev.Top := 30;

 EditNazev.Width := 160;

 EditNazev.FieldName := 'nazev';

 EditNazev.Parent := Dlg;

 EditNazev.TabOrder := 1;

 EditNazev.AllowNull := False;

 

 Lbl := TLabelPlus.Create(Dlg);

 Lbl.Caption := 'Název';

 Lbl.Parent := Dlg;

 Lbl.FocusControl := EditNazev;

 Lbl.Attached := True;

end;

 

{

***********************************

       vlastní skript

***********************************

}

var

 Br: TBrowser;

begin

 //vytvoř a otevři browser

 Br := TBrowser.Create(nil);

 try

   Br.Name := 'BrMaster';

   Br.Caption := 'Číselník skladových karet';

   Br.PrimaryKeys.Add('id_material');

   Br.SQL.Add('select id_material,nazev from dba.omater');

   Br.TableName := 'dba.omater';

   Br.OnWantDialogInstance := @MakeDialogHdr;

   Br.ShowModal;

 finally

   Br.Free;

 end;

end.

 

 

Související témata