⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iwmulticolumncombobox.pas

📁 TMS IntraWEb增强控件TMSIntraWeb_v2.3.2.1_D2007.rar
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{$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 + -