program Smlouva_budoucí; const { dialog Wizard : } ID_BMP = 1001; ID_BACK = 1002; ID_NEXT = 1003; ID_DLG_ID = 1004; ID_CHECK_NOPRINT = 1005; STRLEN = 250; DLG_COUNT = 4; ITEM_COUNT = 13; DLG_CAPTION = "Smlouva o uzavření smlouvy budoucí"; type strTxt = string[100]; strPath = string[255]; var iResult, iDlg, i : short; s : string[STRLEN]; d : date; bKonec, bExit : boolean; szBmpFile : string[255]; dlg : array[1..DLG_COUNT] of short; // id dialogů dlgItems : array[1..DLG_COUNT] of short; // počet položek v jedn. dialozích szItem, szMark : array[1..ITEM_COUNT] of string[STRLEN]; // vstupní texty, záložky id : array[1..ITEM_COUNT] of short; // id položek szQuestEnd, szCheckPrint : strTxt; function WritePrivateProfileString ( var szSection : strTxt; var szEntry : const strTxt; var szString : const strTxt; var szFilename : strPath ) : short; external 'KERNEL32.DLL' name 'WritePrivateProfileStringA'; function GetPrivateProfileString ( var szSection : strTxt; var szEntry : strTxt; var szDefault : const strTxt; var szReturnBuffer : const strTxt; cbReturnBuffer : integer; var szFilename : strPath ) : integer; external 'KERNEL32.DLL' name 'GetPrivateProfileStringA'; procedure GetPath_Macro( var s : strPath ); var bOk, bFirst : boolean; i : short; begin bOk := false; bFirst := false; s := ExeFileName; i := Strlength(s); while not(bOk) do begin bOk := (bFirst = true) and (s[i] = '\'); if (!bOk) then begin if (!bFirst) then bFirst := (s[i] = '\'); dec(i); bOk := i = 0; end; end; s := StrCopy(s, 1, i); s := s + 'Makra\'; end; function GetDlgID( i : short ) : strTxt; var s : strTxt; begin s := "Dialog: " + int2str(i) + " ze " + int2str(DLG_COUNT); GetDlgID := s; end; procedure Init; var i, v : short; szPath : strPath; s, szSection, szEntry : strTxt; begin GetPath_Macro(szPath); szBmpFile := szPath + "paragraf.bmp"; for i:=1 to ITEM_COUNT do begin szItem[i] := ''; szMark[i] := '__' + int2str(i); id[i] := 100 + i; end; { počet položek v jednotlivých dialozích : } dlgItems[1] := 5; dlgItems[2] := 5; dlgItems[3] := 1; dlgItems[4] := 2; v := 0; for i:=1 to DLG_COUNT do inc(v,dlgItems[i]); if (v <> ITEM_COUNT) then info_box('fn. Init', 'Počet položek v dlgItems neodpovídá konstantě ITEM_COUNT!'); { řetězce : } szQuestEnd := "Opravdu si přejete ukončit vyplňování smlouvy?"; szCheckPrint := "Ukončit bez vytištění smlouvy"; szSection := 'Global'; szPath := szPath + 'prava.ini'; szEntry := 'quest1'; GetPrivateProfileString(szSection, szEntry, '', s, 100, szPath); if (s <> '') then szQuestEnd := s; szEntry := 'checkbox1'; GetPrivateProfileString(szSection, szEntry, '', s, 100, szPath); if (s <> '') then szCheckPrint := s; end; procedure CreateDialogs; var s : string[300]; i : short; begin { 1 } dlg[1] := DialogCreate(42, 27, 300, 200, DLG_CAPTION); DlgText(dlg[1], "", 1001, 8, 8, 85, 165); DlgText(dlg[1], "", ID_DLG_ID, 8, 185, 85); DlgText(dlg[1], "S m l u v n í s t r a n y", -1, 114, 15, 128, 8); DlgText(dlg[1], "Smluvní strana 1:", -2, 103, 52, 57, 8); DlgInputLine(dlg[1], "", 101, 164, 50, 124, 12); DlgText(dlg[1], "zastoupený:", -3, 120, 71, 39, 8); DlgInputLine(dlg[1], "", 102, 164, 69, 124, 12); DlgText(dlg[1], "IČO:", -4, 145, 90, 15, 8); DlgInputLine(dlg[1], "", 103, 164, 88, 124, 12); DlgText(dlg[1], "DIČ:", -5, 145, 109, 14, 8); DlgInputLine(dlg[1], "", 104, 164, 107, 124, 12); DlgText(dlg[1], "Bank. spojení:", -6, 112, 128, 49, 8); DlgInputLine(dlg[1], "", 105, 164, 126, 124, 12); DlgButton(dlg[1], "&Další >>", 1003, 182, 180, 50, 14); DlgButtonDefPush(dlg[1], 1003, true); DlgBtnCancel(dlg[1], 242, 180, 50, 14); { 2 } dlg[2] := DialogCreate(42, 27, 300, 200, DLG_CAPTION); DlgText(dlg[2], "", 1001, 8, 8, 85, 165); DlgText(dlg[2], "", ID_DLG_ID, 8, 185, 85); DlgText(dlg[2], "S m l u v n í s t r a n y", -1, 114, 15, 128, 8); DlgText(dlg[2], "Smluvní strana 2:", -2, 103, 52, 57, 8); DlgInputLine(dlg[2], "", 106, 164, 50, 124, 12); DlgText(dlg[2], "zastoupený:", -3, 120, 71, 39, 8); DlgInputLine(dlg[2], "", 107, 164, 69, 124, 12); DlgText(dlg[2], "IČO:", -4, 145, 90, 15, 8); DlgInputLine(dlg[2], "", 108, 164, 88, 124, 12); DlgText(dlg[2], "DIČ:", -5, 145, 109, 14, 8); DlgInputLine(dlg[2], "", 109, 164, 107, 124, 12); DlgText(dlg[2], "Bank. spojení:", -6, 112, 128, 49, 8); DlgInputLine(dlg[2], "", 110, 164, 126, 124, 12); DlgButton(dlg[2], "&Další >>", 1003, 182, 180, 50, 14); DlgButtonDefPush(dlg[2], 1003, true); DlgButton(dlg[2], "<< Z&pět", 1002, 132, 180, 50, 14); DlgBtnCancel(dlg[2], 242, 180, 50, 14); { 3 } dlg[3] := DialogCreate(42, 27, 300, 200, DLG_CAPTION); DlgText(dlg[3], "", 1001, 8, 8, 85, 165); DlgText(dlg[3], "", ID_DLG_ID, 8, 185, 85); DlgText(dlg[3], "Z á v a z e k k u z a v ř e n í p ř e d m ě t n é s m l o u v y", -1, 114, 15, 160, 16); DlgTextSetAlign(dlg[3], -1, 1); DlgText(dlg[3], "Smluvní strany se závazně dohodly na uzavření předmětné smlouvy o dílo v termínu", -2, 114, 75, 159, 18); DlgInputLine(dlg[3], "", 111, 115, 95, 157, 12); DlgButton(dlg[3], "&Další >>", 1003, 182, 180, 50, 14); DlgButtonDefPush(dlg[3], 1003, true); DlgButton(dlg[3], "<< Z&pět", 1002, 132, 180, 50, 14); DlgBtnCancel(dlg[3], 242, 180, 50, 14); { 4 } dlg[4] := DialogCreate(42, 27, 300, 200, DLG_CAPTION); DlgText(dlg[4], "", 1001, 8, 8, 85, 165); DlgText(dlg[4], "", ID_DLG_ID, 8, 185, 85); DlgText(dlg[4], "Z á v ě r e č n á u s t a n o v e n í", -1, 115, 15, 160, 8); DlgText(dlg[4], "V", -2, 115, 88, 9, 9); DlgInputLine(dlg[4], "", 112, 123, 86, 52, 12); DlgText(dlg[4], "dne", -3, 186, 88, 15, 8); DlgInputLine(dlg[4], "", 113, 202, 86, 79, 12); DlgCheckBox(dlg[4], szCheckPrint, ID_CHECK_NOPRINT, 110, 160, 166); DlgButton(dlg[4], "&Konec", 1003, 182, 180, 50, 14); DlgButtonDefPush(dlg[4], 1003, true); DlgButton(dlg[4], "<< Z&pět", 1002, 132, 180, 50, 14); DlgBtnCancel(dlg[4], 242, 180, 50, 14); for i:=1 to DLG_COUNT do begin DlgTextSetBmp(dlg[i], ID_BMP, szBmpFile); DlgSetCtrlText(dlg[i], ID_DLG_ID, GetDlgID(i)); end; d := today; szItem[ITEM_COUNT] := int2str(Day(d)) + "." + int2str(Month(d)) + "." + int2str(Year(d)); InputLineSetVal(dlg[DLG_COUNT], id[ITEM_COUNT], szItem[ITEM_COUNT], STRLEN); end; procedure InsertTextToMark( szMark : string[30]; szStr : string[STRLEN] ); begin if (GoToMark(false, szMark) = IDGOTO) then InsertText(szStr) else begin szStr := 'Nenalezena záložka ' + szMark; info_box('Chyba', szStr); end; end; function GetData : short; { vrací počet prázdných položek } var i, j, item, iResult : short; begin iResult := 0; item := 1; for i:=1 to DLG_COUNT do begin for j:=1 to dlgItems[i] do begin szItem[item] := InputLineGetVal(dlg[i], id[item]); if (szItem[item] = '') then inc(iResult); inc(item); end; end; GetData := iResult; end; function DoDialog( x : short ) : short; begin DoDialog := DialogRun(dlg[x]); end; begin EraseThisMacro; Init; bKonec := false; bExit := false; iDlg := 1; CreateDialogs; while not(bKonec) and not(bExit) do begin iResult := DoDialog(iDlg); case (iResult) of IDCANCEL: bExit := (Yesno_box(DLG_CAPTION, szQuestEnd)); ID_NEXT: begin if (iDlg = DLG_COUNT) then begin if (GetData > 0) then begin s := 'Nejsou vyplněny všechny položky. Chcete ukončit vyplňování smlouvy?'; bKonec := (Yesno_box(DLG_CAPTION, s)); end else bKonec := true; end else inc(iDlg); end; ID_BACK: begin dec(iDlg); if (iDlg < 1) then iDlg := 1; end; end; { case } end; { while } if not(bExit) then begin for i:=1 to ITEM_COUNT do InsertTextToMark(szMark[i], szItem[i]); if not(CheckBoxGetVal(dlg[DLG_COUNT], ID_CHECK_NOPRINT)) then Print(true, 2, 0, 0, 0); end; end.