PowerWeb application examples (Part 3)
Verfasst: Fr, 22. Dez 2023 13:16
Hi,
The following application examples are included in the PowerWeb demo program. Their complete source code is included in the demo download file.
1. Car Ads - Application for browsing and editing car ads. It can be translated to Serbian, English and German language.
2. Computer Shop - Application for purchasing computers. It is an Alaska WAA application example which is developed in the PowerWeb way.
3. Event Management - Application for browsing and editing events. It is an Alaska CXP application example which is developed in the PowerWeb way.
The following application examples are included in the PowerWeb demo program. Their complete source code is included in the demo download file.
1. Car Ads - Application for browsing and editing car ads. It can be translated to Serbian, English and German language.
Code: Alles auswählen
FUNCTION Car(oSrv)
**
LOCAL aCaps,aCols,aCData,html,style
**
IF(EMPTY(HASSNGET(oSrv,"Lang")),CarSetLang_(oSrv),.T.)
HACKISET(oSrv,"lang",HASSNGET(oSrv,"Lang"))
HASSNSET(oSrv,"Path",HAPATH(oSrv) + "data\car")
aCaps = HASSNGET(oSrv,"aCaps")
**
aCols = {{"car_id",aCaps[ChdId],,70},;
{"TRIM(car_brand) + ' ' + TRIM(car_model)",aCaps[ChdName],,250},;
{"car_year",aCaps[ChdYear],,50},;
{"car_price",aCaps[ChdPrice],,60,,,,{clrDRed,clrBeige}}}
aCData = {{aCaps[CarBrand]," "},;
{aCaps[CarModel]," "},;
{aCaps[CarYear]," "},;
{aCaps[CarVol]," "},;
{aCaps[CarPower]," "},;
{aCaps[CarFuel]," "},;
{aCaps[CarBody]," "},;
{aCaps[CarDesc]," "},;
{aCaps[CarPrice]," "},;
{aCaps[CarCont]," "}}
**
SET PATH TO (HASSNGET(oSrv,"Path"))
DBOPEN("DBFNTX",{{{"Car"},{"Car"}}},,,.T.)
**
style = ;
"@media screen and (min-width:1250px)" +;
" {#Div0 {width:auto; height:730px}" +;
" #CarDet {position:absolute; left:520px; top:110px}} " + chrCRLF +;
"@media screen and (max-width:1249px)" +;
" {#Div0 {width:auto; height:730px}" +;
" #CarDet {position:absolute; left:520px; top:110px}} " + chrCRLF +;
"@media screen and (max-width:1100px)" +;
" {#Div0 {width:95%; height:1080px}" +;
" #CarDet {position:absolute; left:0px; top:450px}}"
**
html = HDOCBGN(,{"files/car.js"},style,,aCaps[TtlHome],,,,,,,{"CarSetLang();"}) +;
HDLGBGN(,{1200},aCaps[PhdMain],icoPower,{,{,clrPBlue}},{,,,clrDefBG},;
{clrBlue,clrDSalmon},,"C") +;
CarHead(oSrv,aCaps) +;
HDIVBGN({10,,"R"},,,,,,{"Div0"}) +;
HHEAD({1},,aCaps[PhdHome],,{,{"mediumblue"}}) +;
HPARAG({,70},,aCaps[CarDet_],{{,12,"B"},{"brown"}}) +;
HBRWPGN({,110},,,aCols,{,,"CarPage"},,,,{"CarDetDisp"}) +;
HDIVBGN(,{480,540},{,{,clrIvory},,{20,10},,"A"},{2,,clrDCyan,10},,,;
{"CarDet"},,"visibility:hidden; max-width:90%") +;
HIMG(,{350,240},,"Photo",,{8,"R",clrCoral,5},"C",,{"CarImg"}) +;
HTABLE({,20,"M"},,aCData,{{,,,155,,,,"LT"},{,,,300}},,,;
{{,,.F.},{,,{,clrIvory}}},,{"CarTbl"}) +;
HSCRP("CarDetDisp(null,'" + TRIM(car_id) + "');") +;
HDIVEND() + HDIVEND() +;
CarFoot() + HDLGEND() + HDOCEND()
CLOSE
RETURN html
*============================================================================*
FUNCTION CarEdit(oSrv)
**
LOCAL aCaps,aCols,html,style
**
HACKISET(oSrv,"lang",HASSNGET(oSrv,"Lang"))
aCaps = HASSNGET(oSrv,"aCaps")
**
aCols = {{"car_id",aCaps[ChdId],,70},;
{"TRIM(car_brand) + ' ' + TRIM(car_model)",aCaps[ChdName],,250}}
**
SET PATH TO (HASSNGET(oSrv,"Path"))
DBOPEN("DBFNTX",{{{"Car"},{"Car"}}},,,.T.)
**
style = ;
"@media screen and (min-width:1250px)" +;
" {#Div0 {width:auto; height:830px}" +;
" #Div2 {position:absolute; left:480px; top:130px}" +;
" #Toolbar {position:absolute; top:760px}} " + chrCRLF +;
"@media screen and (max-width:1249px)" +;
" {#Div0 {width:auto; height:830px}" +;
" #Div2 {position:absolute; left:480px; top:130px}" +;
" #Toolbar {position:absolute; top:760px}} " + chrCRLF +;
"@media screen and (max-width:1100px)" +;
" {#Div0 {width:95%; height:1200px}" +;
" #Div2 {position:absolute; left:0px; top:470px}" +;
" #Toolbar {position:absolute; top:1100px}}"
**
html = HDOCBGN(,{"files/car.js"},style,,aCaps[TtlEdit],,,,,,,{"CarSetLang();"}) +;
HDLGBGN(,{1200},aCaps[PhdMain],icoPower,{,{,clrPBlue}},{,,,clrDefBG},;
{clrBlue,clrDSalmon},,"C") +;
CarHead(oSrv,aCaps) +;
HDIVBGN({10,,"R"},,,,,,{"Div0"}) +;
HHEAD({1},,aCaps[PhdEdit],,{,{"mediumblue"}}) +;
HDIVBGN({,80},{420},{,,,,,"A"}) +;
HTOOLBAR(,,;
{{aCaps[BtnLogi],bmpLogin,"CarLogiClk()",,,{"LogiBtn"}},;
{aCaps[BtnLogo],bmpLogout,"CarLogoClk()",,,{"LogoBtn"},.T.}},;
{{110,30},,{,,,clrDefBG}}) +;
HSAY({250},{150},,{,12,"BU"},{clrDRed},{"LogUser"}) +;
HDIVEND() +;
HBRWPGN({,130},,,aCols,{,,"CarPage"},,,,{"CarSelDisp"},,{"CarList"}) +;
HDIVBGN(,{520,620},{,,,,,"A"},,,,{"Div2"}) +;
HFORMBGN(,,,,"multipart/form-data",{,{,clrIvory},,10},{,,clrBlue,5},,,;
{"CarForm"}) +;
HFORMTBL(,;
{{35,aCaps[CarId],{290,,10},,,,,{"CarId","CarId"}},;
{35,aCaps[CarBrand],{290,,20},,,,,{"CarBrand","CarBrand"}},;
{35,aCaps[CarModel],{290,,30},,,,,{"CarModel","CarModel"}},;
{35,aCaps[CarYear],{290,,4},,,,,{,"CarYear"}},;
{35,aCaps[CarVol],{290,,10},,,,,{,"CarVol"}},;
{35,aCaps[CarPower],{290,,20},,,,,{,"CarPower"}},;
{35,aCaps[CarFuel],{290,,20},,,,,{,"CarFuel"}},;
{35,aCaps[CarBody],{290,,20},,,,,{,"CarBody"}},;
{35,aCaps[CarDesc],{290,,100},,,,,{,"CarDesc"}},;
{35,aCaps[CarPrice],{290,,10},,,,,{,"CarPrice"}},;
{35,aCaps[CarCont],{290,,100},,,,,{,"CarCont"}},;
{35,aCaps[CarPhoto],{290,,100},,,,{,,.T.},{"CarPhoto","CarPhoto"}},;
{0,,{0,0},"FU",,,,{"CarUpld","CarUpld"},'ACCEPT="image/*"',,;
{,"CarUpldCng(this)"}}},;
{170,310}) +;
HFORMEND() +;
HIMG({,470},{175,120},,"Photo",,{,,clrMRed,3},,,{"CarImg"}) +;
HTOOLBAR({200,470},,;
{{aCaps[BtnLoad],bmpOpenFld,"document.all.CarUpld.click()",,,;
{"LoadBtn"},.T.},;
{aCaps[BtnClr],bmpClear,"CarClrClk()",,,{"ClrBtn"},.T.}},;
{{110,30},,{,,,clrDefBG}},,,,,"V") +;
HDIVEND() +;
HTOOLBAR(,,;
{{aCaps[BtnAdd],bmpNewDoc,"CarAddClk()",,,{"AddBtn"}},;
{aCaps[BtnEdit],icoEditText,"CarEditClk()",,,{"EditBtn"},.T.},;
{aCaps[BtnDel],icoTrash,"CarDelClk()",,,{"DelBtn"},.T.},;
{aCaps[BtnSave],bmpSave,"CarSaveClk()",,,{"SaveBtn"},.T.},;
{aCaps[BtnCanc],bmpDelete,"CarCancClk()",,,{"CancBtn"},.T.}},;
{{110,30},,{,,,clrDefBG}},,{"Toolbar"}) +;
HDIVEND() + CarFoot() +;
HEDITDATA(,;
{{35,aCaps[LogUser],{150,,20},,,,,{"User","User"}},;
{35,aCaps[LogPwrd],{150,,20},"P",,,,{"Pwrd","Pwrd"}}},;
{80,165},aCaps[LogTitle],,,,{"LogDlg"},"CarLogAct") +;
HSCRP(HSETGUI(.T.,.T.) + " GetDisable(1,11); CarSelDisp(null,'" +;
TRIM(car_id) + "');") +;
HDLGEND() + HDOCEND()
CLOSE
RETURN html
*============================================================================*
FUNCTION CarHead(oSrv,aCaps)
**
RETURN HMENU({3,3,"R"},,;
{{aCaps[MnuHome],bmpHome,"Car"},;
{aCaps[MnuEdit],icoEdit,"CarEdit",,{,,,,.T.}},;
{aCaps[MnuExit],bmpExit,"CarExit"}},;
{,,,{,,,clrDefBG}})
*============================================================================*
FUNCTION CarFoot(oSrv,aCaps)
**
RETURN HDIVBGN({10,,"R"},{200,50},{{,,"B"},{clrBlue}}) +;
HLINK({,,"I"},,"Sr","images/rs.png",,{,{20,13}},,;
"javascript:CarLangClk('sr')",,,,,"text-decoration:none") +;
HLINK({20,,"I"},,"En","images/gb.png",,{,{20,13}},,;
"javascript:CarLangClk('en')",,,,,"text-decoration:none") +;
HLINK({20,,"I"},,"De","images/de.png",,{,{20,13}},,;
"javascript:CarLangClk('de-DE')",,,,,"text-decoration:none") +;
HDIVEND()
*============================================================================*
2. Computer Shop - Application for purchasing computers. It is an Alaska WAA application example which is developed in the PowerWeb way.
Code: Alles auswählen
FUNCTION Comp(oSrv)
**
LOCAL html,;
aCols := {{"partno","PartNo",,60},;
{"producer","Producer",,200},;
{"computer","Computer",,200},;
{"LTRIM(STR(cpucount)) + ' ' + TRIM(cputype)",;
"Processors",,250},;
{"price","Price",,70,,"999999.99"},;
{,"Order",,40,"G",,,,,{30,"2S"}},;
{,"Quantity",,60,"G",,,,,{40,"SB",{1,10}}},;
{"jpg_image","Image",,120,"I"}}
**
HASSNSET(oSrv,"Path",HAPATH(oSrv) + "data\comp")
SET PATH TO (HASSNGET(oSrv,"Path"))
DBOPEN("FOXCDX",{{{"Computer"},{"Computer"}}},,,.T.)
**
IF EMPTY(HAPARGET(oSrv,"sel"))
HASSNSET(oSrv,"aSel",{})
HASSNSET(oSrv,"bgets","")
ENDIF
**
html = HDOCBGN(,,,,"Computers - Shop") +;
HDLGBGN(,{1200},"Computer shop",icoPower,{,{,clrBeige}},{,,,clrDefBG},;
{clrOldLace,clrDGold},,"C") +;
CompHead(oSrv) +;
HHEAD({10,20,"M"},,"Super computers",,{,{"mediumblue"}}) +;
HSCRP("SetBGets('" + HASSNGET(oSrv,"bgets") + "');") +;
HBRWPGN({,40,"M"},{,600},,aCols,{,"CompGet","CompPage"},,,,,"C",;
{"Comp"}) +;
HBREAK(2) + HDLGEND() + HDOCEND()
CLOSE
RETURN html
*============================================================================*
FUNCTION CompOrd(oSrv)
**
LOCAL aData,aCols,html,style, aSel := HASSNGET(oSrv,"aSel")
**
style = ;
"@media screen and (min-width:1250px)" +;
" {#Div {width:720px; height:160px}" +;
" #Tbl2 {position:absolute; left:380px; top:0px}} " + chrCRLF +;
"@media screen and (max-width:1249px)" +;
" {#Div {width:720px; height:160px}" +;
" #Tbl2 {position:absolute; left:380px; top:0px}} " + chrCRLF +;
"@media screen and (max-width:850px)" +;
" {#Div {width:360px; height:350px}" +;
" #Tbl2 {position:absolute; left:0px; top:180px}} " + chrCRLF +;
"@media screen and (max-width:450px)" +;
" {#Div {width:85%; height:350px}" +;
" #Tbl2 {position:absolute; left:0px; top:180px}}"
**
IF !AEMPTY(aSel)
CompSel(oSrv,aSel,@aData,@aCols)
**
html = HDOCBGN(,{"files/comp.js"},style,,"Computers - Order",,,,,,,;
{HSETGUI(.T.)}) +;
HDLGBGN(,{1200},"Computer shop",icoPower,{,{,clrBeige}},{,,,clrDefBG},;
{clrOldLace,clrDGold},,"C") +;
CompHead(oSrv) +;
HHEAD({10,20,"M"},,"Order",,{,{"mediumblue"}}) +;
HTABLE({,40,"M"},,aData,aCols,,,,"C") +;
HDIVBGN({,40,"R"},,{,{clrDRed,clrLinen},,15},{3,"DB",clrDCyan,10},,;
"C",{"Div"}) +;
HFORMBGN({15,15},{"inherit","inherit"},,,,,,,,{"CustForm"}) +;
HFORMTBL(,;
{{40,"First name:",{240,,30},,,,,{,"F_FNAME"}},;
{40,"Last name:",{240,,30},,,,,{,"F_LNAME"}},;
{40,"EMail:",{240,,40},,,,,{,"F_EMAIL"}},;
{40,"Phone:",{240,,30},,,,,{,"F_PHONE"}}},;
{80,240}) +;
HFORMTBL(,;
{{40,"Street:",{240,,40},,,,,{,"F_STREET"}},;
{40,"City:",{240,,30},,,,,{,"F_CITY"}},;
{40,"State:",{240,,30},,,,,{,"F_STATE"}},;
{40,"Info:",,"2S",,,,{,"F_INFO"}}},;
{80,250},,,,,{"Tbl2"}) +;
HFORMEND() +;
HDIVEND() +;
HDIVBGN({,80,"M"},,{,,60,,"C"}) +;
HLINK(,,"Go to shop",bmpHome,;
{{,12,"B"},{clrDViolet,clrLBlue},,{5,25}},{,,,clrDefBG},;
{2,,clrMRed,5},HTTPREDIR("Comp",{{"sel","true"}},"L"),,,,,;
"text-decoration:none; white-space:nowrap") +;
HLINK({20,,"M"},,"Commit order",icoOK,;
{{,12,"B"},{clrDViolet,clrLBlue},,{5,15}},{,{16,16},,clrDefBG},;
{2,,clrMRed,5},"javascript:CompOrd();",,,,,;
"text-decoration:none; white-space:nowrap") +;
HDIVEND() + HBREAK() + HDLGEND() + HDOCEND()
ELSE
HASSNSET(oSrv,"Msg","Your basket is empty.")
HASSNSET(oSrv,"Addr","Comp")
html = HTTPREDIR("CompMsg")
ENDIF
RETURN html
*============================================================================*
FUNCTION CompSel(oSrv,aSel,aData,aCols)
**
LOCAL amnt,I, len := LEN(aSel), tot := 0
**
SET PATH TO (HASSNGET(oSrv,"Path"))
DBOPEN("FOXCDX",{{{"Computer"},{"Computer"}}},,,.T.)
**
aCols = {{,"PartNo",,60},;
{,"Producer",,200},;
{,"Computer",,200},;
{,"Processors","Total",250},;
{,"Price",,70,,,,"R"},;
{,"Quantity",,60,,,,"R"},;
{,"Amount",,100,,,,"R"}}
aData = ARRAY(len)
FOR I=1 TO len
GO aSel[I,1]
amnt = price * aSel[I,2]
tot += amnt
aData[I] = {partno,producer,computer,LTRIM(STR(cpucount)) + " " +;
TRIM(cputype),price,aSel[I,2],amnt}
NEXT
aCols[7,3] = LTRIM(STR(tot))
CLOSE
RETURN .T.
*============================================================================*
FUNCTION CompHead(oSrv)
**
RETURN HMENU({3,3,"R"},,;
{{"Shop",bmpHome,"Comp?sel=true"},;
{"Basket",bmpBasket,"CompBask"},;
{"Order",bmpList,"CompOrd"},;
{"Exit",bmpExit,"CompExit"}},;
{,,,{,,,clrDefBG}},,,,"max-width:93%")
*============================================================================*
3. Event Management - Application for browsing and editing events. It is an Alaska CXP application example which is developed in the PowerWeb way.
Code: Alles auswählen
FUNCTION Evt(oSrv)
**
LOCAL html,style,;
aCols := {{"LEFT(title,25)","Title",,160},;
{"DTOC(s_date)","Start",,80},;
{"DTOC(e_date)","End",,80},;
{"LEFT(city,25)","City",,160}},;
aEData := {{"Location:"," "},;
{"Begin:"," "},;
{"End:"," "},;
{"Languages:"," "},;
{"Contact:"," "},;
{"Description:"," "},;
{"More:"," "}}
**
HASSNSET(oSrv,"Path",HAPATH(oSrv) + "data\event")
SET PATH TO (HASSNGET(oSrv,"Path"))
DBOPEN("FOXCDX",{{{"Event"},{"Event","s_date"}}},,,.T.)
HASSNSET(oSrv,"RecNo",IF(RECCOUNT() > 0,RECNO(),0))
**
style = ;
"@media screen and (min-width:1250px)" +;
" {#Div0 {width:auto; height:600px}" +;
" #EvtDet {position:absolute; left:580px; top:110px}" +;
" #Toolbar {position:absolute; top:450px}} " + chrCRLF +;
"@media screen and (max-width:1249px)" +;
" {#Div0 {width:auto; height:600px}" +;
" #EvtDet {position:absolute; left:580px; top:110px}" +;
" #Toolbar {position:absolute; top:450px}} " + chrCRLF +;
"@media screen and (max-width:1150px)" +;
" {#Div0 {width:95%; height:980px}" +;
" #EvtDet {position:absolute; left:0px; top:450px}" +;
" #Toolbar {position:absolute; top:900px}}"
**
html = HDOCBGN(,{"files/event.js"},style,,"Events - browse",,,,,,,;
{HSETGUI(,.T.)}) +;
HDLGBGN(,{1200},"Event management",icoPower,{,{,clrOldLace}},;
{,,,clrDefBG},{clrIvory,clrDCyan},,"C") +;
EvtHead(oSrv) +;
HDIVBGN({10,,"R"},,,,,,{"Div0"}) +;
HHEAD({1},,"Browse events",,{,{"mediumblue"}}) +;
HPARAG({,70},,"Click on an event for details.",{{,12,"B"},{"brown"}}) +;
HBRWPGN({,110},{,310},,aCols,{,,"EvtPage"},,,,{"EvtDetDisp"}) +;
HDIVBGN(,{450,400},{,{,clrPeach},,10,,"A"},{,,clrBrown,5},,,;
{"EvtDet"},,"visibility:hidden; max-width:90%") +;
HHEAD(,,,2,{,{clrMRed}},,,{"EvtTtl"}) +;
HTABLE({,20,"M"},,aEData,{{,,,100,,,,"LT"},{,,,400,,,,"LT"}},,,;
{{,,.F.},{30,,{,clrPeach}}},,{"EvtTbl"}) +;
HDIVEND() +;
HTOOLBAR(,,;
{{"Add",bmpNewDoc,HTTPREDIR("EvtAdd",,"B")},;
{"Edit",icoEditText,HTTPREDIR("EvtEdit",,"B")},;
{"Delete",icoTrash,"EvtDelClk()"}},;
{{110,30},,{,,,clrDefBG}},,{"Toolbar"}) +;
IF(RECCOUNT() > 0,;
HSCRP("EvtDetDisp(null,null," + LTRIM(STR(RECNO())) + ");"),"") +;
HDIVEND() + HDLGEND() + HDOCEND()
CLOSE
RETURN html
*============================================================================*
FUNCTION EvtAdd(oSrv)
**
HASSNSET(oSrv,"RecNo",0)
RETURN EvtEdit(oSrv)
*============================================================================*
FUNCTION EvtEdit(oSrv)
**
LOCAL aCat[0],aStat[0],aCntr[0],html,style,m_title,m_cmnt,m_sdate,m_stime,;
m_edate,m_etime,m_cat,m_stat,m_lang,m_city,m_cntr,m_loc,m_name,m_email,;
m_www,;
aLang := {{"English","EN"}, {"German","DE"},{"Spanish","ES"},;
{"Dutch","NL"},{"French","FR"}},;
rec_no := HASSNGET(oSrv,"RecNo")
**
SET PATH TO (HASSNGET(oSrv,"Path"))
DBOPEN("FOXCDX",{{{"Event"},{"Event","s_date"}},;
{{"Event_key"},{"Event_key","fieldname"}},;
{{"Country"},{"Country"}}},,,.T.)
**
DBEVAL({|| AADD(aCntr,{TRIM(country),ccode})})
SELECT Event_key
DBEVAL({|| IF("category" $ fieldname,AADD(aCat,{TRIM(descriptio),token}),;
AADD(aStat,{TRIM(descriptio),token}))})
SELECT Event
IF rec_no > 0
GO rec_no
m_title = title; m_cmnt = comment; m_sdate = DTOI(s_date)
m_stime = s_time; m_edate = DTOI(e_date); m_etime = e_time
m_cat = category; m_stat = status; m_lang = lang
m_city = city; m_cntr = country; m_loc = location
m_name = cont_name; m_email = cont_email; m_www = www
ELSE
m_sdate := m_edate := DTOI(DATE())
ENDIF
CLOSE ALL
**
style = ;
"@media screen and (min-width:1250px)" +;
" {#EvtForm {width:auto; height:420px}" +;
" #Tbl2 {position:absolute; left:490px; top:0px}} " + chrCRLF +;
"@media screen and (max-width:1249px)" +;
" {#EvtForm {width:auto; height:420px}" +;
" #Tbl2 {position:absolute; left:490px; top:0px}} " + chrCRLF +;
"@media screen and (max-width:1000px)" +;
" {#EvtForm {width:auto; height:760px}" +;
" #Tbl2 {position:absolute; left:0px; top:440px}} " + chrCRLF +;
"@media screen and (max-width:500px)" +;
" {#EvtForm {width:90%; height:760px}" +;
" #Tbl2 {position:absolute; left:0px; top:440px}}"
**
html = HDOCBGN(,{"files/event.js"},style,,"Events - edit",,,,,,,;
{HSETGUI(.T.,.T.)}) +;
HDLGBGN(,{1200},"Event management",icoPower,{,{,clrOldLace}},;
{,,,clrDefBG},{clrIvory,clrDCyan},,"C") +;
EvtHead(oSrv) +;
HHEAD({10,20,"M"},,"Edit event",,{,{"mediumblue"}}) +;
HFORMBGN({10,20,"R"},,,,,,,,,{"EvtForm"}) +;
HFORMTBL(,;
{{35,"Title:",{290},,m_title,,,{,"Title"}},;
{120,"Description:",{290,100},"ML",m_cmnt,,,{,"Comment"}},;
{35,"Start:",,"D",m_sdate,,,{,"S_date"}},;
{-5,,,"T",m_stime,,,{,"S_time"}},;
{35,"End:",,"D",m_edate,,,{,"E_date"}},;
{-5,,,"T",m_etime,,,{,"E_time"}},;
{35,"Category:",{200},"CB",m_cat,aCat,,{,"Category"}},;
{35,"Status:",{200},"CB",m_stat,aStat,,{,"Status"}},;
{120,"Language:",{100,110},"LB",m_lang,aLang,{.T.},{,"Lang"}}},;
{110,310}) +;
HFORMTBL(,;
{{35,"City:",{290},,m_city,,,{,"City"}},;
{35,"Country:",{250},"CB",m_cntr,aCntr,,{,"Country"}},;
{120,"Location:",{290,100},"ML",m_loc,,,{,"Location"}},;
{35,"Contact name:",{290},,m_name,,,{,"Cont_name"}},;
{35,"EMail:",{290},,m_email,,,{,"Cont_email"}},;
{35,"WWW:",{290},,m_www,,,{,"WWW"}}},;
{110,310},,,,,{"Tbl2"}) +;
HFORMEND() +;
HTOOLBAR({10,50,"M"},,;
{{"Save",bmpSave,"EvtSaveClk()"},;
{"Cancel",bmpDelete,HTTPREDIR("Evt",,"B")}},;
{{110,30},,{,,,clrDefBG}},{{,,10}}) +;
HBREAK(2) + HDLGEND() + HDOCEND()
RETURN html
*============================================================================*
FUNCTION EvtHead(oSrv,aCaps)
**
RETURN HMENU({3,3,"R"},,;
{{"Browse",bmpHome,"Evt"},;
{"Edit",icoEdit,"EvtEdit",,{,,,,.T.}},;
{"Exit",bmpExit,"EvtExit"}},;
{,,,{,,,clrDefBG}})
*============================================================================*