a级一a一级在线观看_a级在线观看视频_a极毛片_a毛片_全部免费毛片在线播放_全部孕妇丰满孕妇孕交

| 项目咨询 |积分体系 | 加入收藏 | 设为首页 | RSS
您当前的位置:首页 > 市场 > 百科 > 技术 > 夸父专栏

基于RICHVIEW的EMR开发文档十二

时间:2013-10-08 20:45:54  来源:  作者:
更多

 http://blog.sina.com.cn/game7788

   夸父
下面例子实现ms word风格的段落整体对齐功能,当在段落头按下tab键时,段落整体向右收缩,当按下backspace键时,段落整体向左收缩
//定义向右收缩样式
ChangeFirstIndentConversion(Sender: TCustomRichViewEdit;
  StyleNo, UserData: Integer; AppliedToText: Boolean;
  var NewStyleNo: Integer);
var ParaStyle: TParaInfo;
begin
  ParaStyle := TParaInfo.Create(nil);
  ParaStyle.Assign(Sender.Style.ParaStyles[StyleNo]);
  ParaStyle.FirstIndent := UserData;
  ParaStyle.Standard := False;
  NewStyleNo := Sender.Style.ParaStyles.FindSuchStyle(StyleNo, ParaStyle,
    RVAllParaInfoProperties);
  if NewStyleNo<0 then begin
    Sender.Style.ParaStyles.Add.Assign(ParaStyle);
    NewStyleNo := Sender.Style.ParaStyles.Count-1;
  end;
  ParaStyle.Free;
end;
//定义向左收缩样式
ChangeLeftIndentConversion(Sender: TCustomRichViewEdit;
  StyleNo, UserData: Integer; AppliedToText: Boolean;
  var NewStyleNo: Integer);
var ParaStyle: TParaInfo;
begin
  ParaStyle := TParaInfo.Create(nil);
  ParaStyle.Assign(Sender.Style.ParaStyles[StyleNo]);
  ParaStyle.LeftIndent := UserData;
  if ParaStyle.LeftIndent=0 then
    ParaStyle.FirstIndent := 0;
  ParaStyle.Standard := False;
  NewStyleNo := Sender.Style.ParaStyles.FindSuchStyle(StyleNo, ParaStyle,
    RVAllParaInfoProperties);
  if NewStyleNo<0 then begin
    Sender.Style.ParaStyles.Add.Assign(ParaStyle);
    NewStyleNo := Sender.Style.ParaStyles.Count-1;
  end;
  ParaStyle.Free;
end;
//实现过程
function ChangeIndent(rve: TCustomRichViewEdit;
  Step, Max: Integer): Boolean;
var OldParaStyleConversion: TRVStyleConversionEvent;
    FirstIndent, LeftIndent: Integer;
    ListNo, ListLevel, StartFrom: Integer;
    Reset: Boolean; 
begin
  Result := False;
  OldParaStyleConversion := rve.OnParaStyleConversion;
  try
    rve := rve.TopLevelEditor; 
    if rve.SelectionExists then
      exit;
    if (Step>0) and (rve.OffsetInCurItem<=rve.GetOffsBeforeItem(rve.CurItemNo)) and
       (rve.CurItemNo>0) and (rve.GetItemStyle(rve.CurItemNo-1)=rvsListMarker) then begin
       // 改变段落位置
       rve.GetListMarkerInfo(rve.CurItemNo, ListNo, ListLevel, StartFrom, Reset);
       if (ListNo>=0) and (ListNo<rve.Style.ListStyles.Count) and
          (ListLevel+1<rve.Style.ListStyles[ListNo].Levels.Count) then begin
         rve.ChangeListLevels(+1);
         Result := True;
       end;
       exit;
    end;
 
    if (rve.OffsetInCurItem>rve.GetOffsBeforeItem(rve.CurItemNo)) or
      not rve.IsParaStart(rve.CurItemNo) then
      exit; // 不在段落开头不作处理
    if (rve.OffsetInCurItem>=rve.GetOffsAfterItem(rve.CurItemNo)) and
      ((rve.CurItemNo=rve.ItemCount-1) or rve.IsParaStart(rve.CurItemNo)) then
      exit; // 内容为空,不作处理
    FirstIndent := rve.Style.ParaStyles[rve.GetItemPara(rve.CurItemNo)].FirstIndent;
    LeftIndent  := rve.Style.ParaStyles[rve.GetItemPara(rve.CurItemNo)].LeftIndent;
    if Step>0 then begin
      if FirstIndent=0 then begin
        rve.OnParaStyleConversion := ChangeFirstIndentConversion;
        rve.ApplyParaStyleConversion(Step);
        Result := True;
        end
      else begin
        inc(LeftIndent, Step);
        if LeftIndent>Max then
          LeftIndent := Max;
        if LeftIndent>rve.Style.ParaStyles[rve.GetItemPara(rve.CurItemNo)].LeftIndent then begin
          rve.OnParaStyleConversion := ChangeLeftIndentConversion;
          rve.ApplyParaStyleConversion(LeftIndent);
          Result := True;
        end;
      end
      end
    else begin
     if FirstIndent>0 then begin 
        rve.OnParaStyleConversion := ChangeFirstIndentConversion;
        rve.ApplyParaStyleConversion(0);
        Result := True;
        end
      else begin
        inc(LeftIndent, Step);
        if LeftIndent<0 then
          LeftIndent := 0;
        if (LeftIndent
           (FirstIndent<>0) then begin
          rve.OnParaStyleConversion := ChangeLeftIndentConversion;
          rve.ApplyParaStyleConversion(LeftIndent);
          Result := True;
        end;
      end;
    end;
  finally
    rve.OnParaStyleConversion := OldParaStyleConversion;
  end;
end;
//最后在keypress下面处理
var step: Integer;
  begin
  if Key=#9 then begin
    step := 48;
    if GetAsyncKeyState(VK_SHIFT)and$8000<>0 then
      step := -step;
    if ChangeIndent(TCustomRichViewEdit(Sender), step, 480) then
      Key := #0;
  end;
  end;
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目更新
栏目热门
主站蜘蛛池模板: 久久国产成人精品国产成人亚洲 | 99久久99久久免费精品小说 | 久久中文字幕视频 | 国产三级做爰在线播放最爱 | 国产午夜精品片一区二区三区 | 成人性一级视频在线观看 | 青青国产在线观看 | 欧美一区二区三区免费看 | 久久久久久人精品免费费看 | 精品在线观看一区 | 9191精品国产观看 | 日韩精品一区二区在线观看 | 久一视频在线观看 | 奇米7777影视| 欧美精品一区二区三区观 | 日韩免费视频一区二区 | 99久久精品费精品国产一区二 | 毛片免费观看 | 欧美在线成人午夜网站 | 成人影视网 | 马与人黄色毛片一部免费视频 | 国产精品亚洲一区二区在线观看 | 欧美.亚洲.日本一区二区三区 | 国产在线观看免费人成小说 | 久久精品免费一区二区视 | 高清二区 | 国产在线观看成人免费视频 | 国产精品一区久久精品 | 国产日韩欧美在线观看播放 | 国产成人综合亚洲欧美在 | 青青草国产精品欧美成人 | 奇米影视第四色在线 | 国产精品爱久久久久久久小 | www福利视频 | 国产欧美国产精品第一区 | 91欧美激情一区二区三区成人 | 国产高清色播视频免费看 | 国产精品视频免费 | 麻豆一区二区免费播放网站 | 日本成人一区二区三区 | 日本中文字幕一区二区有码在线 |