📄 iwmulticolumncombobox.pas
字号:
{$IFDEF TMSIW6}
procedure TTIWMultiColumnComboBox.IWPaint;
{$ELSE}
procedure TTIWMultiColumnComboBox.Paint;
{$ENDIF}
var
R : TRect;
begin
with Canvas do
begin
Rectangle(4,4,Width,20);
r := Rect(Width - 18,4,Width,20);
{$IFNDEF LINUX}
DrawFrameControl(Handle,r, DFC_SCROLL,DFCS_SCROLLCOMBOBOX );
{$ENDIF}
end;
end;
//------------------------------------------------------------------------------
function TTIWMultiColumnComboBox.HTMLClr(color: TColor):string;
begin
Result := ColorToRGBString(color);
end;
procedure TTIWMultiColumnComboBox.SetValue(const value:string);
begin
inherited SetValue(value);
Text := value;
end;
//------------------------------------------------------------------------------
{$IFDEF TMSIW6}
function TTIWMultiColumnComboBox.RenderHTML(AContext: TIWBaseComponentContext): TIWHTMLTag;
{$ELSE}
function TTIWMultiColumnComboBox.RenderHTML: TIWHTMLTag;
{$ENDIF}
var
htmlres: string;
r, c: Integer;
gradient, fontstyle, S, rowval: string;
CScript: TStrings;
backcolor: string;
forecolor: string;
style: string;
rowtitle: string;
i : integer;
gborder: string;
function MakeAlign(AAlignment: TAlignment):string;
begin
Result := '';
case AAlignment of
taRightJustify: Result := ' style=text-align:right;';
taCenter: Result := ' style=text-align:center;';
end;
end;
function MakeScript: string;
var
LScript: TStringList;
begin
LScript := TStringList.Create;
with LScript do
begin
Add('<Script Language="JavaScript">');
Add('var '+ HTMLName +'dohide = 0;');
Add('var '+HTMLName+'obj = new Object();');
Add(HTMLName+'obj.dohide = 0;');
Add(HTMLName+'obj.HighLightedRow = "";');
Add(HTMLName+'obj.DivStartLeft = 0;');
Add(HTMLName+'obj.DivStartTop = 0;');
Add(HTMLName+'obj.DivEndLeft = 0;');
Add(HTMLName+'obj.DivEndTop = 0;');
Add(HTMLName+'obj.ClrSel = "'+ HTMLClr(FSelectionColor)+'"');
Add(HTMLName+'obj.ClrTextSel = "'+ HTMLClr(FSelectionTextColor)+'"');
Add(HTMLName+'obj.CCount = '+IntToStr(FColCount - 1));
Add(HTMLName+'obj.RCount = '+IntToStr(FComboRows.Count));
Add(HTMLName+'obj.ForeColor = "'+ HTMLClr(PopUpFont.Color)+'"');
Add(HTMLName+'obj.PopUpColor = "'+ HTMLClr(PopUpColor)+'"');
Add('var '+HTMLName+'dosubmit = true;');
Add('function '+HTMLName+'showdivonclick() {');
Add(' CCDisplayAllRows('+IntToStr(FComboRows.Count)+',"'+HTMLName+'");');
Add(' '+HTMLName+'showdiv('+HTMLName+'obj);');
Add(' var itemHeight = parseInt(document.getElementById("'+HTMLName+'tbl").offsetHeight);');
Add(' if ( (itemHeight < parseInt('+IntToStr(PopUpHeight)+')) && (itemHeight > 0) ){ ');
Add(' document.getElementById("'+HTMLName+'popup").style.height = itemHeight;');
Add(' document.getElementById("'+HTMLName+'popup").style.overflow = "";');
Add(' } else {');
Add(' document.getElementById("'+HTMLName+'popup").style.height = parseInt("'+IntToStr(PopUpHeight)+'");');
Add(' document.getElementById("'+HTMLName+'popup").style.overflow = "auto";');
Add(' }');
Add('}');
Add('function '+HTMLName+'showdiv(obj) {');
Add(' document.getElementById("'+ HTMLName +'tbl").style.borderCollapse = "collapse";');
//Moved after display = "";
//Add(' CCgetPositionDiv(document.getElementById("'+HTMLName+'checklist"),'+HTMLName+'obj);');
//Add(' if (document.getElementById("'+HTMLName+'checklist").style.visibility == "hidden"){');
Add(' if (document.getElementById("'+HTMLName+'checklist").style.display == "none"){');
Add(' if (obj.HighLightedRow !="")');
Add(' CCShowUnHighLighted(obj.HighLightedRow,'+IntToStr(FColCount - 1)+',obj);');
if FCaseSensitiveLookup then
Add(' CCHighLightSelected("'+HTMLName+'",obj,true);')
else
Add(' CCHighLightSelected("'+HTMLName+'",obj,false);');
// Add(' document.getElementById("'+HTMLName+'checklist").style.visibility = "visible";');
Add(' document.getElementById("'+HTMLName+'checklist").style.display = "";');
Add(' CCgetPositionDiv(document.getElementById("'+HTMLName+'checklist"),'+HTMLName+'obj);');
Add(' document.onmouseup = '+HTMLName+'docMouseUp;');
Add(' CCshowWindowedObjects(false,'+HTMLName+'obj.DivStartLeft,'+HTMLName+'obj.DivStartTop,'+HTMLName+'obj.DivEndLeft,'+HTMLName+'obj.DivEndTop);');
Add(' document.getElementById("'+HTMLName+'ED").focus();');
Add(' }else {');
// Add(' document.getElementById("'+HTMLName+'checklist").style.visibility = "hidden";');
Add(' document.getElementById("'+HTMLName+'checklist").style.display = "none";');
Add(' CCshowWindowedObjects(true,'+HTMLName+'obj.DivStartLeft,'+HTMLName+'obj.DivStartTop,'+HTMLName+'obj.DivEndLeft,'+HTMLName+'obj.DivEndTop);');
Add(' }');
Add('}');
Add('function '+HTMLName+'docMouseUp() {');
Add(' if ('+ HTMLName +'dohide == 0) {');
// Add(' document.getElementById("'+HTMLName+'checklist").style.visibility = "hidden";');
Add(' document.getElementById("'+HTMLName+'checklist").style.display = "none";');
Add(' CCshowWindowedObjects(true,'+HTMLName+'obj.DivStartLeft,'+HTMLName+'obj.DivStartTop,'+HTMLName+'obj.DivEndLeft,'+HTMLName+'obj.DivEndTop);');
Add(' document.onmouseup = "";');
Add(' } else {');
Add(' '+ HTMLName +'dohide = 0; ');
Add(' }');
Add('}');
Add('function '+HTMLName+'resetdoc(){');
Add(' '+ HTMLName +'dohide = 1; ');
Add('}');
Add('function ' + HTMLName + 'Focus(ctrl) {');
if FFocusColor <> FColor then
Add(' ctrl.style.backgroundColor = '#39+HTMLClr(FFocusColor)+#39'');
if FSelectAll then
begin
Add(' var rNew = ctrl.createTextRange();');
Add(' rNew.moveStart('#39'character'#39', 0) ;');
Add(' rNew.select();');
end;
Add('}');
Add('function '+HTMLName+'ChangeEditValue(EDId,id){');
Add(' if (id!="") {');
Add(' var fullid = "val" + id;');
Add(' document.getElementById(EDId).value = document.getElementById(fullid).innerHTML;');
Add( HTMLName+'docMouseUp();');
Add(' }');
Add('}');
Add('function '+HTMLName+'SelectHighLighted(obj) {');
Add(' '+HTMLName+'ChangeEditValue("'+ HTMLName+'ED",obj.HighLightedRow);');
Add(' '+HTMLName+'dosubmit = true;');
Add('}');
Add('function '+HTMLName+'noenter(event) {');
Add(' var isIE = navigator.appName.indexOf("Microsoft") != -1;');
Add(' if (isIE) {key = event.keyCode;} else {key = event.which;}');
Add(' if (! '+HTMLName+'dosubmit) ');
Add(' return !(event && key == 13); ');
Add('}');
Add('function '+HTMLName+'ShowLookUp(event){');
Add(' '+HTMLName+'dosubmit = false;');
Add(' var isIE = navigator.appName.indexOf("Microsoft") != -1;');
Add(' var key;');
Add(' if (isIE) {key = event.keyCode;} else {key = event.which;}');
Add(' if ((key == 40) || (key == 38) || (key == 13)) {');
Add(' if (key == 40) {'); // down key
Add(' CCHighLightNext("'+HTMLName+'",'+HTMLName+'obj);');
Add(' }');
Add(' if (key == 38) {'); // up key
Add(' CCHighLightPrevious("'+HTMLName+'",'+HTMLName+'obj);');
Add(' }');
Add(' if (key == 13) {'); // Enter key
Add(' '+HTMLName+'SelectHighLighted('+HTMLName+'obj);');
Add(' }');
Add(' }');
Add(' else {');
Add(' CCDisplayAllRows('+IntToStr(FComboRows.Count)+',"'+HTMLName+'");');
Add(' var editor = document.getElementById("'+HTMLName+'ED");');
Add(' if (editor.value.length > 0) {');
Add(' displayRowCount = 0;');
Add(' SelectedRow = "";');
Add(' for (i=0;i<'+IntToStr(FComboRows.Count)+';i++){');
Add(' RowID = "'+ HTMLName +'RowNo" + i;');
Add(' valRow = document.getElementById("val"+RowID);');
Add(' elRow = document.getElementById(RowID);');
if not FCaseSensitiveLookUp then
Add(' if ( (valRow.innerHTML.substr(0,editor.value.length).toUpperCase()) != (editor.value.toUpperCase()) ) {')
else
Add(' if ( valRow.innerHTML.substr(0,editor.value.length) != editor.value ) {');
Add(' elRow.style.display = "none";');
Add(' }else {');
Add(' displayRowCount++;');
Add(' if (displayRowCount ==1)');
Add(' SelectedRow=RowID;');
Add(' elRow.style.display = ""; ');
Add(' }');
Add(' }');
// Add(' if ((document.getElementById("'+HTMLName+'checklist").style.visibility == "hidden") && (displayRowCount >0)){');
Add(' if ((document.getElementById("'+HTMLName+'checklist").style.display == "none") && (displayRowCount >0)){');
Add( HTMLName+'showdiv('+HTMLName+'obj);');
Add(' }');
Add(' else if (displayRowCount <=0) {');
// Add(' if (document.getElementById("'+HTMLName+'checklist").style.visibility != "hidden")');
Add(' if (document.getElementById("'+HTMLName+'checklist").style.display != "none")');
Add( HTMLName+'showdiv('+HTMLName+'obj);');
Add(' }');
Add(' CCNormalAllRows('+IntToStr(FComboRows.Count)+',"'+HTMLName+'");');
Add(' if (SelectedRow!="")');
Add(' CCShowHighLighted(SelectedRow,'+HTMLName+'obj,'+IntToStr(FColCount - 1)+');');
Add(' }');
Add(' else '+HTMLName+'showdiv('+HTMLName+'obj);');
Add(' }');
Add(' var itemHeight = parseInt(document.getElementById("'+HTMLName+'tbl").offsetHeight);');
Add(' if ( (itemHeight < parseInt('+IntToStr(PopUpHeight)+')) && (itemHeight > 0) ){ ');
Add(' document.getElementById("'+HTMLName+'popup").style.height = itemHeight;');
Add(' document.getElementById("'+HTMLName+'popup").style.overflow = "";');
Add(' } else {');
Add(' document.getElementById("'+HTMLName+'popup").style.height = parseInt("'+IntToStr(PopUpHeight)+'");');
Add(' document.getElementById("'+HTMLName+'popup").style.overflow = "auto";');
Add(' }');
Add('}');
Add('</script>');
end;
Result := LScript.Text;
LScript.Free;
end;
procedure MakeCScript;
begin
CScript := TStringList.Create;
with CScript do
begin
Add('function CCshowWindowedObjects(show,ALeft,ATop,ARight,ABottom) {');
Add(' isIE = navigator.appName.indexOf("Microsoft") != -1;');
Add(' hideWindowedControls = true;');
Add(' if (hideWindowedControls) {');
Add(' var windowedObjectTags = new Array("SELECT", "IFRAME", "OBJECT","APPLET","EMBED");');
Add(' var windowedObjects = new Array();');
Add(' var j=0;');
Add(' if (isIE == true) {');
Add(' for (var i=0; i<windowedObjectTags.length; i++) {');
Add(' var tmpTags = document.all.tags(windowedObjectTags[i]);');
Add(' if (tmpTags.length > 0) {');
Add(' for (var k=0; k<tmpTags.length; k++) {');
Add(' windowedObjects[j++] = tmpTags[k];');
Add(' }');
Add(' }');
Add(' }');
Add(' }');
Add(' else {');
Add(' for (var i=0; i<windowedObjectTags.length; i++) {');
Add(' var tmpTags = document.getElementsByTagName(windowedObjectTags[i]);');
Add(' if (tmpTags.length > 0) {');
Add(' for (var k=0; k<tmpTags.length; k++) {');
Add(' if (tmpTags[k].style.visibility != "hidden")');
Add(' windowedObjects[j++] = tmpTags[k];');
Add(' }');
Add(' }');
Add(' }');
Add(' }');
Add(' for (var i=0; i<windowedObjects.length; i++) {');
Add(' if (show)');
Add(' { windowedObjects[i].style.visibility = "visible";');
Add(' }');
Add(' else {');
(*
Add(' var cell = document.getElementById(windowedObjects[i].id);');
Add(' var lb = 0;');
Add(' var tb = 0;');
Add(' var elem = cell;');
Add(' do {');
Add(' lb += elem.offsetLeft;');
Add(' tb += elem.offsetTop;');
Add(' } while ((elem = elem.offsetParent));');
Add(' var topInt = tb;');
Add(' var leftInt = lb;');
Add(' var widthObject = document.getElementById(windowedObjects[i].id).offsetWidth;');
Add(' var heightObject = document.getElementById(windowedObjects[i].id).offsetHeight;');
Add(' var rightInt = leftInt + parseInt(widthObject);');
Add(' var bottomInt = topInt + parseInt(heightObject);');
Add(' if ((((leftInt >= ALeft) && (leftInt <= ARight)) | ((rightInt >= ALeft) && (rightInt <= ARight))');
Add(' | ((leftInt <= ALeft) && (rightInt >= ALeft))) && (((topInt >= ATop) && (topInt <= ABottom)) |');
Add(' ((bottomInt >= ATop) && (bottomInt <= ABottom))))');
Add(' windowedObjects[i].style.visibility = "hidden";');
Add(' }');
*)
Add('if (windowedObjects[i].style.left == "") {');
Add(' var cell = windowedObjects[i];');
Add(' var leftBegin = 0;');
Add(' var elem = cell;');
Add(' do');
Add(' leftBegin += elem.offsetLeft;');
Add(' while ((elem = elem.offsetParent));');
Add(' leftInt = leftBegin;}');
Add('else {');
Add(' var leftObject = document.getElementById(windowedObjects[i].id).style.left;');
Add(' var leftInt = parseInt(leftObject.substring(0,leftObject.length - 2));}');
Add(' if (windowedObjects[i].style.top == ""){');
Add('var cell = windowedObjects[i];');
Add('var topBegin = 0;');
Add('elem = cell;');
Add('do');
Add(' topBegin += elem.offsetTop;');
Add('while ((elem = elem.offsetParent))');
Add('topInt = topBegin;}');
Add('else {');
Add(' var topObject = windowedObjects[i].style.top;');
Add(' var topInt = parseInt(topObject.substring(0,topObject.length - 2));}');
Add(' var widthObject = windowedObjects[i].offsetWidth;');
Add(' var heightObject = windowedObjects[i].offsetHeight;');
Add(' var rightInt = leftInt + parseInt(widthObject);');
Add(' var bottomInt = topInt + parseInt(heightObject);');
Add('var topRegion = 0;');
Add('var leftRegion = 0;');
Add(' var elem = windowedObjects[i];');
Add(' do {');
Add(' if (elem.tagName.toUpperCase() != "BODY") {');
Add(' if (elem.id.indexOf("REGION") >= 0) {');
Add(' var c = elem;');
Add(' do {');
Add(' leftRegion += c.offsetLeft;');
Add(' topRegion += c.offsetTop;');
Add(' }');
Add(' while ((c = c.offsetParent))');
Add(' break;');
Add(' }');
Add(' }');
Add('} while ((elem = elem.offsetParent))');
Add(' leftInt = leftInt + leftRegion;');
Add(' topInt = topInt + topRegion;');
Add(' bottomInt = bottomInt + topRegion;');
Add(' rightInt = rightInt + leftRegion;');
Add(' if ((((leftInt >= ALeft) && (leftInt <= ARight)) | ((rightInt >= ALeft)');
Add('&& (rightInt <= ARight)) | ((leftInt <= ALeft) && (rightInt >= ALeft)))');
Add('&& (((topInt >= ATop) && (topInt <= ABottom)) | ((bottomInt >= ATop) && (bottomInt <= ABottom))))');
Add(' windowedObjects[i].style.visibility = "hidden"; }');
Add(' }');
Add(' }');
Add('}');
Add('function CCgetPositionDiv(divObject,obj) {');
Add(' var cell = divObject;');
Add(' var leftBegin = 0;');
Add(' var topBegin = 0;');
Add(' var elem = cell;');
Add(' do {');
Add(' leftBegin += elem.offsetLeft;');
// Add(' alert("el :" + elem.id + " offsetTop : " + elem.offsetTop);');
Add(' topBegin += elem.offsetTop;');
Add(' }');
Add(' while ((elem = elem.offsetParent));');
Add(' obj.DivStartLeft = leftBegin;');
Add(' obj.DivStartTop = topBegin;');
//Modified - display none veroorzaakt offsetwidth 0
// Add(' divObject.style.display = ""');
Add(' obj.DivEndLeft = obj.DivStartLeft + divObject.offsetWidth;');
// Add(' alert("startTop :" + obj.DivStartTop + " offsetHeight : " + divObject.offsetHeight);');
Add(' obj.DivEndTop = obj.DivStartTop + divObject.offsetHeight;');
//Modified - display none veroorzaakt offsetwidth 0
// Add(' divObject.style.display = "none"');
Add('}');
Add('function CCDisplayAllRows(CCount,CName){');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -