| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2169 人关注过本帖
标题:[求助]这是我找到一个用vb写的控制行间距的代码,哪位高手帮我转成c#的,不 ...
只看楼主 加入收藏
superly
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2004-11-10
收藏
 问题点数:0 回复次数:7 
[求助]这是我找到一个用vb写的控制行间距的代码,哪位高手帮我转成c#的,不甚感激!
?
'--- module ---
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_USER = &H400
Public Const EM_GETPARAFORMAT = WM_USER + 61
Public Const EM_SETPARAFORMAT = WM_USER + 71
Public Const MAX_TAB_STOPS As Long = 32
Public Const PFM_LINESPACING As Long = 256
Public Type PARAFORMAT2
    cbSize                     As Long
    dwMask                     As Long
    wNumbering                 As Integer
    wEffects                   As Integer
    dxStartIndent              As Long
    dxRightIndent              As Long
    dxOffset                   As Long
    wAlignment                 As Integer
    cTabCount                  As Integer
    rgxTabs(MAX_TAB_STOPS - 1) As Long
    dySpaceBefore              As Long
    dySpaceAfter               As Long
    dyLineSpacing              As Long
    sStyle                     As Integer
    bLineSpacingRule           As Byte
    bOutlineLevel              As Byte
    wShadingWeight             As Integer
    wShadingStyle              As Integer
    wNumberingStart            As Integer
    wNumberingStyle            As Integer
    wNumberingTab              As Integer
    wBorderSpace               As Integer
    wBorderWidth               As Integer
    wBorders                   As Integer
End Type
'--- form ---
'设form上有:
'richtextbox(rt)
'commandbutton(command1)
Private Sub Command1_Click()
    Dim pf2 As PARAFORMAT2
    Dim retval As Long
    rt.SelStart = Len(rt)
    pf2.cbSize = LenB(pf2)
    pf2.bLineSpacingRule = 3
    pf2.dyLineSpacing = CLng(500 * Rnd) + 500
    pf2.dwMask = PFM_LINESPACING
    retval = SendMessage(rt.hwnd, EM_SETPARAFORMAT, ByVal 0&, pf2)
End Sub
上面的代码指定500到1000twips随机行距
用em_setparaformat+PARAFORMAT2可以很灵活的设置格式,
指定行距主要靠bLineSpacingRule跟dyLineSpacing这两个数据成员
具体信息msdn里有
搜索更多相关主题的帖子: 间距 Public Long Const 
2005-08-24 10:51
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
一点没看懂。
2005-08-24 12:21
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 
SendMessage怎么设置RichTextBox的东东哦?
再解释一下这几行吧:(是干什么的?)
  pf2.cbSize = LenB(pf2)
  pf2.bLineSpacingRule = 3
  pf2.dyLineSpacing = CLng(500 * Rnd) + 500
  pf2.dwMask = PFM_LINESPACING

不管这么多了,我先试试,大概是这样的吧:(开头我就省一省了,API也不声明了)
public const *** = xxx;......
struct PARAFORMAT2
{
long  cbSize ;
long dwMask      ;           
int  wNumbering     ;         
int  wEffects ;              
long    dxStartIndent    ;   
long  dxRightIndent   ;         
long   dxOffset      ;      
int   wAlignment     ;      
  int  cTabCount        
  long  rgxTabs(MAX_TAB_STOPS - 1) ;
  long  dySpaceBefore    ;   
  long  dySpaceAfter   ;        
long   dyLineSpacing      ;
  int  sStyle      ;  
byte   bLineSpacingRule  ;   
byte   bOutlineLevel  ;
  int  wShadingWeight    ;
  int  wShadingStyle   ;
   int wNumberingStart   ;
  int  wNumberingStyle   ;
  int  wNumberingTab   ;
int   wBorderSpace  ;
int   wBorderWidth      ;      
int   wBorders   ;
}
'--- form ---
'设form上有:
Form的那个I*********中:

RichTextBox rt = new RichTextBox();
Button command1=new Button();
command1.Click+=new ***(Command1_Click);//delegate名字不记得了

private void Command1_Click(object sender,EventArgs e)  
{
PARAFORMAT2 pf2;
  long retval ;
    rt.SelStart = Len(rt);//这个Len是什么方法我不清楚,所以就不解释了
    pf2.cbSize = LenB(pf2);//这里也不知道,反正大概就这样
    pf2.bLineSpacingRule = 3;
    pf2.dyLineSpacing = CLng(500 * Rnd) + 500;
    pf2.dwMask = PFM_LINESPACING;
    retval = SendMessage(rt.Handle, EM_SETPARAFORMAT, ByVal 0&, pf2);//这个ByVal 0&是什么意思啊?如果是传值那就是0...我不知道
}

稍微修改一下应该就可以了吧...虽然我自己搞不太懂什么意思...

[此贴子已经被作者于2005-8-24 16:21:59编辑过]



寻求挑战,追求完美 Oh,my god!
2005-08-24 16:19
superly
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2004-11-10
收藏
得分:0 
谢谢,我试试看吧。
我是不知道vb 的。

我是初学者,还望各位多多指教啊!
2005-08-24 16:38
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
RichTextBox的可能要用word插件吧?看到有csdn的高手提示了个"<br>"符,就是网页的换行,但是不知道什么意思,一般的高手都tmd说一两句提示而已。
2005-08-24 22:52
superly
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2004-11-10
收藏
得分:0 

我现在改成这样的,有一些bug,能帮我看看吗? public class Form1 : Form { public const int WM_USER = 0x0400; public const int EM_GETPARAFORMAT = WM_USER + 61; public const int EM_SETPARAFORMAT = WM_USER + 71; public const long MAX_TAB_STOPS = 32; public const long PFM_LINESPACING = 256; private System.Windows.Forms.Button button1; private System.Windows.Forms.RichTextBox richTextBox1; private System.Windows.Forms.ListBox listBox1;

public struct PARAFORMAT2 { public long cbSize; public long dwMask; public int wNumbering; public int wEffects; public long dxStartIndent; public long dxRightIndent; public long dxOffset; public int wAlignment; public int cTabCount; public long rgxTabs(MAX_TAB_STOPS-1); //一直提示这行有问题,rgxTabs()在vb 中是指什么呀?? public long dySpaceBefore; public long dySpaceAfter; public long dyLineSpacing; public int sStyle; public byte bLineSpacingRule; public byte bOutlineLevel; public int wShadingWeight; public int wShadingStyle; public int wNumberingStart; public int wNumberingStyle; public int wNumberingTab; public int wBorderSpace; public int wBorderWidth; public int wBorders; }; [DllImport("User32.dll")] public static extern long SendMessage(IntPtr hWnd,uint Msg,uint wParam,PARAFORMAT2 IParam);

private void button1_Click(object sender, System.EventArgs e) { PARAFORMAT2 pf2 = new PARAFORMAT2(); Random r = new Random(); long retval; this.richTextBox1.SelectionStart = this.richTextBox1.TextLength; string str; str = pf2.ToString(); pf2.cbSize = str.Length; pf2.bLineSpacingRule = 3; pf2.dyLineSpacing= (long)r.Next(500,3000)+500; pf2.dwMask = PFM_LINESPACING; retval = SendMessage(this.richTextBox1.Handle,EM_SETPARAFORMAT,0,pf2); }


我是初学者,还望各位多多指教啊!
2005-08-25 16:27
superly
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2004-11-10
收藏
得分:0 
sendmessage是一种Api函数。我也不会用,所以不是很明白。

我是初学者,还望各位多多指教啊!
2005-08-25 16:29
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 
   public long rgxTabs(MAX_TAB_STOPS-1);   
我的VB也只有点皮,毛都没有,你去VB论坛问问这个声明到底是什么意思吧~

寻求挑战,追求完美 Oh,my god!
2005-08-25 16:32
快速回复:[求助]这是我找到一个用vb写的控制行间距的代码,哪位高手帮我转成c#的 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037501 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved