Jump to content

billyChou

uniGUI Subscriber
  • Posts

    189
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by billyChou

  1. Can be designed into uniGui Component types and propose a price range for purchase. Thaks.
  2. how to use in uniGUI . Thanks .
  3. 1.How design Workflow Diagram , 2.click chart connect to uniform. thanks
  4. procedure Tfrm_epo110a3.HTMLtoRTF(html: string; var rtf: TRichedit); var i, dummy, row: Integer; cfont: TFont; { Standard sschrift } Tag, tagparams: string; params: TStringList; function GetTag(s: string; var i: Integer; var Tag, tagparams: string): Boolean; var a_tag: Boolean; begin GetTag := False; Tag := ''; tagparams := ''; a_tag := False; while i <= Length(s) do begin Inc(i); // es wird nochein tag geöffnet --> das erste war kein tag; if s[i] = '<' then begin GetTag := False; Exit; end; if s[i] = '>' then begin GetTag := True; Exit; end; if not a_tag then begin if s[i] = ' ' then begin if Tag <> '' then a_tag := True; end else Tag := Tag + s[i]; end else tagparams := tagparams + s[i]; end; end; procedure GetTagParams(tagparams: string; var params: TStringList); var i: Integer; s: string; gleich: Boolean; // kontrolliert ob nach dem zeichen bis zum nächsten zeichen ausser // leerzeichen ein Ist-Gleich-Zeichen kommt function notGleich(s: string; i: Integer): Boolean; begin notGleich := True; while i <= Length(s) do begin Inc(i); if s[i] = '=' then begin notGleich := False; Exit; end else if s[i] <> ' ' then Exit; end; end; begin Params.Clear; s := ''; for i := 1 to Length(tagparams) do begin if (tagparams[i] <> ' ') then begin if tagparams[i] <> '=' then gleich := False; if (tagparams[i] <> '''') and (tagparams[i] <> '"') then s := s + tagparams[i] end else begin if (notGleich(tagparams, i)) and (not Gleich) then begin params.Add(s); s := ''; end else Gleich := True; end; end; params.Add(s); end; function HtmlToColor(Color: string): TColor; begin Result := StringToColor('$' + Copy(Color, 6, 2) + Copy(Color, 4, 2) + Copy(Color, 2, 2)); end; procedure TransformSpecialChars(var s: string; i: Integer); var c: string; z, z2: Byte; i2: Integer; const nchars = 9; chars: array[1..nchars, 1..2] of string = (('Ö', 'Ö'), ('ö', 'ö'), ('Ä', 'Ä'), ('ä', 'ä'), ('Ü', 'Ü'), ('ü', 'ü'), ('ß', 'ß'), ('<', '<'), ('>', '>')); begin // Maximal die nächsten 7 zeichen auf sonderzeichen überprüfen c := ''; i2 := i; for z := 1 to 7 do begin c := c + s[i2]; for z2 := 1 to nchars do begin if chars[z2, 1] = c then begin Delete(s, i, Length(c)); Insert(chars[z2, 2], s, i); Exit; end; end; Inc(i2); end; end; // HtmlTag Schriftgröße in pdf größe umwandeln function CalculateRTFSize(pt: Integer): Integer; begin case pt of 1: Result := 6; 2: Result := 9; 3: Result := 12; 4: Result := 15; 5: Result := 18; 6: Result := 22; else Result := 30; end; end; // Die Font-Stack Funktionen type fontstack = record Font: array[1..100] of tfont; Pos: Byte; end; procedure CreateFontStack(var s: fontstack); begin s.Pos := 0; end; procedure PushFontStack(var s: Fontstack; fnt: TFont); begin Inc(s.Pos); s.Font[s.Pos] := TFont.Create; s.Font[s.Pos].Assign(fnt); end; procedure PopFontStack(var s: Fontstack; var fnt: TFont); begin if (s.Font[s.Pos] <> nil) and (s.Pos > 0) then begin fnt.Assign(s.Font[s.Pos]); // vom stack nehmen s.Font[s.Pos].Free; Dec(s.Pos); end; end; procedure FreeFontStack(var s: Fontstack); begin while s.Pos > 0 do begin s.Font[s.Pos].Free; Dec(s.Pos); end; end; var fo_cnt: array[1..1000] of tfont; fo_liste: array[1..1000] of Boolean; fo_pos: TStringList; fo_stk: FontStack; wordwrap, liste: Boolean; begin CreateFontStack(fo_Stk); fo_Pos := TStringList.Create; rtf.Lines.BeginUpdate; rtf.Lines.Clear; // Das wordwrap vom richedit merken wordwrap := rtf.wordwrap; rtf.WordWrap := False; // erste Zeile hinzufügen rtf.Lines.Add(''); Params := TStringList.Create; cfont := TFont.Create; cfont.Assign(rtf.Font); i := 1; row := 0; Liste := False; // Den eigentlichen Text holen und die Formatiorung merken rtf.selstart := 0; html := html.Replace('&nbsp;',' ' ); html := html.Replace('nbsp;',' ' ); html := html.Replace('&amp;','&' ); if Length(html) = 0 then Exit; repeat; if html[i] = '<' then begin dummy := i; GetTag(html, i, Tag, tagparams); GetTagParams(tagparams, params); // Das Font-Tag if Uppercase(Tag) = 'FONT' then begin // Schrift auf fontstack sichern pushFontstack(fo_stk, cfont); if params.Values['size'] <> '' then cfont.Size := CalculateRTFSize(StrToInt(params.Values['size'])); if params.Values['color'] <> '' then cfont.Color := htmltocolor(params.Values['color']); end else if Uppercase(Tag) = '/FONT' then popFontstack(fo_stk, cfont) else // Die H-Tags-Überschriften if Uppercase(Tag) = 'H1' then begin // Schrift auf fontstack sichern pushFontstack(fo_stk, cfont); cfont.Size := 20; end else if Uppercase(Tag) = '/H1' then popFontstack(fo_stk, cfont) else // Die H-Tags-Überschriften if Uppercase(Tag) = 'H2' then begin // Schrift auf fontstack sichern pushFontstack(fo_stk, cfont); cfont.Size := 18; end else if Uppercase(Tag) = '/H2' then popFontstack(fo_stk, cfont) else // Die H-Tags-Überschriften if Uppercase(Tag) = 'H3' then begin // Schrift auf fontstack sichern pushFontstack(fo_stk, cfont); cfont.Size := 16; end else if Uppercase(Tag) = '/H3' then popFontstack(fo_stk, cfont) else // Die H-Tags-Überschriften if Uppercase(Tag) = 'H4' then begin // Schrift auf fontstack sichern pushFontstack(fo_stk, cfont); cfont.Size := 14; end else if Uppercase(Tag) = '/H4' then popFontstack(fo_stk, cfont) else // Die H-Tags-Überschriften if Uppercase(Tag) = 'H5' then begin // Schrift auf fontstack sichern pushFontstack(fo_stk, cfont); cfont.Size := 12; end else if Uppercase(Tag) = '/H5' then popFontstack(fo_stk, cfont) else // Die H-Tags-Überschriften if Uppercase(Tag) = 'H6' then begin // Schrift auf fontstack sichern pushFontstack(fo_stk, cfont); cfont.Size := 10; end else if Uppercase(Tag) = '/H6' then popFontstack(fo_stk, cfont) else // Die H-Tags-Überschriften if Uppercase(Tag) = 'H7' then begin // Schrift auf fontstack sichern pushFontstack(fo_stk, cfont); cfont.Size := 8; end else if Uppercase(Tag) = '/H7' then popFontstack(fo_stk, cfont) else // Bold-Tag if Uppercase(Tag) = 'B' then cfont.Style := cfont.Style + [fsbold] else if Uppercase(Tag) = '/B' then cfont.Style := cfont.Style - [fsbold] else // Italic-Tag if Uppercase(Tag) = 'I' then cfont.Style := cfont.Style + [fsitalic] else if Uppercase(Tag) = '/I' then cfont.Style := cfont.Style - [fsitalic] else // underline-Tag if Uppercase(Tag) = 'U' then cfont.Style := cfont.Style + [fsunderline] else if Uppercase(Tag) = '/U' then cfont.Style := cfont.Style - [fsunderline] else // underline-Tag if Uppercase(Tag) = 'UL' then liste := True else if Uppercase(Tag) = '/UL' then begin liste := False; rtf.Lines.Add(''); Inc(row); rtf.Lines.Add(''); Inc(row); end else // BR - Breakrow tag if (Uppercase(Tag) = 'BR') or (Uppercase(Tag) = 'LI') then begin rtf.Lines.Add(''); Inc(row); end; // unbekanntes tag als text ausgeben // else rtf.Lines[row]:=RTF.lines[row]+'<'+tag+' '+tagparams+'>'; fo_pos.Add(IntToStr(rtf.selstart)); fo_cnt[fo_pos.Count] := TFont.Create; fo_cnt[fo_pos.Count].Assign(cfont); fo_liste[fo_pos.Count] := liste; end else begin // Spezialzeichen übersetzen if html[i] = '&' then Transformspecialchars(html, i); if (Ord(html[i]) <> 13) and (Ord(html[i]) <> 10) then rtf.Lines[row] := RTF.Lines[row] + html[i]; end; Inc(i); until i >= Length(html); // dummy eintragen fo_pos.Add('999999'); // Den fertigen Text formatieren for i := 0 to fo_pos.Count - 2 do begin rtf.SelStart := StrToInt(fo_pos[i]); rtf.SelLength := StrToInt(fo_pos[i + 1]) - rtf.SelStart; rtf.SelAttributes.Style := fo_cnt[i + 1].Style; rtf.SelAttributes.Size := fo_cnt[i + 1].Size; rtf.SelAttributes.Color := fo_cnt[i + 1].Color; // die font wieder freigeben; fo_cnt[i + 1].Free; end; // die Paragraphen also Listen setzen i := 0; while i <= fo_pos.Count - 2 do begin if fo_liste[i + 1] then begin rtf.SelStart := StrToInt(fo_pos[i + 1]); while fo_liste[i + 1] do Inc(i); rtf.SelLength := StrToInt(fo_pos[i - 1]) - rtf.SelStart; rtf.Paragraph.Numbering := nsBullet; end; Inc(i); end; rtf.Lines.EndUpdate; Params.Free; cfont.Free; rtf.WordWrap := wordwrap; FreeFontStack(fo_stk); end; // 105.10.01 html to rtf ok add uniMemo1 procedure Tfrm_epo110a3.q_epo111_11BeforePost(DataSet: TDataSet); var R:TRichEdit; sHtml , sRtfTxt: string; ms: TMemoryStream; begin R := TRichEdit.CreateParented(HWND_MESSAGE); try ms := TMemoryStream.Create; sHtml := DataSet.FieldByName('h_data').Value; HTMLtoRTF(sHtml,R) ; ms.Position := 0; R.Lines.SaveToStream(ms); ms.Position := 0; // UniMemo1.Lines.LoadFromStream(ms); ms.Position := 0; //sRtfTxt := StringFromMemory(ms); //sRtfTxt := UniMemo1.Text; //sRtfTxt := RichEdit1.Text; if length(sRtfTxt) > 0 then begin // q_main.Edit; DataSet.FieldByName('m_data').Value := sRtfTxt; // q_main.Post; end; finally R.Free; ms.Free; end; DataSet.FieldByName('n_sch').Value := TMainForm(MainForm).sN_sch; end; it's not complete for html convert to rtf, but i has not other method at 2016-2017. fastreprt not support html . you can test Report Workshop https://www.trichview.com/features/reportworkshop.html HTML Report Library https://delphihtmlcomponents.com/reports.html good news found. HTML Library & Fast Report https://delphihtmlcomponents.com/welcome.html News 02.03.2019 HTML Component Library, HTML Report Library, HTML Editor Library version 3.9 released. What's new Fixed issues 11.02.2019 HTML Library and Fast Report
  5. i use unigui call EAGetMail POP3/IMAP4 Component send mail from gmail , two year. EASendMail ActiveX Object
  6. use https://www.imageen.com/info/index.html#IEVision support Barcode Recognition https://www.winsoft.sk/obr.htm Optical Barcode Recognition
  7. asp.net web page login 1.save protect variable in sessionStorage 2. use web url call unigui asp.net web page logout or close 1.sessionStorage is fail 2.unigui url page get sessionStorage variable , auto close. Thanks
  8. how to use Storage in unigui . https://www.tutorialrepublic.com/html-tutorial/html5-web-storage.php https://docs.sencha.com/extjs/4.2.1/?mobile=/api/Ext.data.proxy.SessionStorage Thanks
  9. test sample Thanks use 7-zip format Small Hybrid App2.7z
  10. Thanks mohammad. how to use css change fonts.
  11. Resize componets Font. design mode and view mode is not the same size Thanks
  12. ToolBar icon and button is samll. UniImageList Icon size is 32 x 32 Thanks
  13. Desktop use UniDBHTMLMemo and mobile need . Thanks
  14. 1. in Main Form use other form ------------------------------------- function MainForm: TMainForm; implementation {$R *.dfm} uses uniGUIVars, MainModule, uniGUIApplication, ServerModule, uniGUITheme, epo110a3; // project define epo110a3 in 'epo110a3.pas' {frm_epo110a3: TUniForm}, 2. in MainForm UniFormShow event --------------------------------- procedure TMainForm.UniFormShow(Sender: TObject); var sText, sWhere, sKey : string; sJson : string; i,iCnt : integer; sM_src : string; sN_yy : string; sYY : string; iYY :integer; bRet : boolean; begin //http://localhost:8077/?button=BB&edit=AA //http://localhost:88/?stu_id=K122786910 UniEdit1.Text :=UniApplication.Parameters.Values['sch_id']; UniEdit2.Text :=UniApplication.Parameters.Values['stu_id']; // 106.03.23 //http://localhost:88/?stu_id2=A127337605 //http://localhost:88/?stu_id2=A129946077 UniEdit2.Text :=UniApplication.Parameters.Values['stu_id2']; if (UniEdit1.Text = '') and (UniEdit2.Text <> '' )then begin sUserid := UniEdit2.Text; q_epo110.open; q_epo110.Refresh; bRet := q_epo110.Locate('n_stu',VarArrayOf([sUserid]),[]); if bRet then begin // OpenForm('Tfrm_epo110a1'); if sUserid <> 'admin' then begin // sUserid := ''; sUserName := q_epo110.FieldByName('m_stu').Value; sUserCid := q_epo110.FieldByName('c_id').Value; sWhere := 'n_stu = ' + quotedstr( sUserid ) ; // 建立者 frm_epo110a3.q_main.Close; frm_epo110a3.q_main.DeleteWhere; frm_epo110a3.q_main.AddWhere(sWhere); frm_epo110a3.q_main.Open; vbStu_fr := True; // 由前台進入編輯 end; frm_epo110a3.sbtn_dep.Visible := False; frm_epo110a3.sbtn_cla.Visible := False; frm_epo110a3.sbtn_tch.Visible := False; frm_epo110a3.sbtn_spc.Visible := False; //frm_epo110a1.UniButton4.Visible := False; // 圖片 frm_epo110a3.UniLabel33.Visible := False; frm_epo110a3.UniDBEdit12.Visible := False; frm_epo110a3.UniDBEdit13.Visible := False; frm_epo110a3.UniDBEdit19.Visible := False; frm_epo110a3.UniDBEdit29.Visible := False; frm_epo110a3.UniDBEdit30.Visible := False; // frm_epo110a3.UniDBEdit10.ReadOnly := True; frm_epo110a3.UniDBEdit11.ReadOnly := True; frm_epo110a3.UniDBEdit14.ReadOnly := True; frm_epo110a3.UniDBEdit15.ReadOnly := True; frm_epo110a3.UniDBDateTimePicker1.ReadOnly := True; frm_epo110a3.UniDBComboBox1.ReadOnly := True; //-------------------------------------- frm_epo110a3.tlb_first.Visible := False; frm_epo110a3.tlb_prev.Visible := False; frm_epo110a3.tlb_next.Visible := False; frm_epo110a3.tlb_last.Visible := False; frm_epo110a3.tlb_copy.Visible := False; frm_epo110a3.tlb_add.Visible := False; frm_epo110a3.tlb_upd.Visible := True; frm_epo110a3.tlb_del.Visible := False; frm_epo110a3.tlb_upd.Visible := True; frm_epo110a3.tlb_inq.Visible := False; frm_epo110a3.tlb_tool.Visible := False; frm_epo110a3.tlb_exit.Visible := False; //frm_epo110a1.BorderIcons := [biMinimize,biMaximize]; frm_epo110a3.BorderIcons := []; //frm_epo110a2.ShowModal(); frm_epo110a3.Show(); abort; end; end; end; // parametter use base64 encoder
  15. UnimDBDatePicker it is ok. 1.Change UnimDBSelect Button Caption Cancle to local language '取消' 2.Change UnimDBSelect Button Caption Done to local language '完成' Thanks
  16. 1.Need UnimDBHTMLMemo 2.Change UnimDBDatePicker Button Caption Cancle to local language '取消' 3.Change UnimDBDatePicker Button Caption Done to local language '完成' UniMainModule->ExtLocal = zh_TW THANKS
  17. IIS cann't call Exe to generate PDF , refer Demos\Desktop\FastReport sample. Demos\Desktop\FastReport - MultiReport can Compile in IIS generate PDF.
  18. modify Demos\Desktop\FishFacts samples //----------------------- unit ServerModule; interface uses Variants, Classes, SysUtils, uniGUIServer, uniGUIMainModule, uniGUIApplication, uIdCustomHTTPServer; type TUniServerModule = class(TUniGUIServerModule) procedure UniGUIServerModuleCreate(Sender: TObject); procedure UniGUIServerModuleHTTPCommand(ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo; var Handled: Boolean); private { Private declarations } protected procedure FirstInit; override; public { Public declarations } CurrentTheme : string; end; function UniServerModule: TUniServerModule; implementation {$R *.dfm} uses UniGUIVars, MainModule; procedure TUniServerModule.UniGUIServerModuleHTTPCommand( ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo; var Handled: Boolean); begin if ARequestInfo.URI = '/test2' then begin // ARequestInfo.QueryParams; //** I can't get params.values['search_me'] rs := '' ; try // UniMainModule.ClientDataSet.Active := true; UniMainModule.ClientDataSet.Insert; // error UniMainModule.ClientDataSet.FieldByName('Category').Value := 'test'; UniMainModule.ClientDataSet.Post; except end; Handled := true; end; end; //----------------------------------- Thanks
×
×
  • Create New...