【问题标题】:Append text to memo using Win API使用 Win API 将文本附加到备忘录
【发布时间】:2012-04-07 07:55:02
【问题描述】:

我正在尝试使用此代码附加文本行

SendMessage(Form1.log.Handle, WM_SETTEXT, 0, Integer(PChar(textLog)));

// textLog 是一些行,例如 'Program started at xxx' 等

但它不追加,只是设置新文本

【问题讨论】:

    标签: api winapi sendmessage memo


    【解决方案1】:

    WM_SETTEXT 将替换整个内容;要么阅读当前内容,追加新文本并设置批号,要么确保插入符号位于您希望追加的位置,然后使用 EM_REPLACESEL 添加新文本。

    【讨论】:

    • EM_SETSEL 将插入符号设置到末尾,然后 EM_REPLACESEL
    【解决方案2】:

    建议您不要使用 EM_SETSEL 或 EM_REPLACESEL。 因为在 vista 和 windows 7 等较新的操作系统上,UAC 会阻止您发送这些消息。 我建议你这样做。 1.获取窗口元素的句柄 2. 设置焦点,这会将您的光标定位在文本区域中 3.那你应该使用SendInput,这样对UAC不会有任何问题

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      找到完整的解决方案

          procedure appendLog(const S: string);
      var
        SelStart, LineLen: Integer;
        Line: string;
      begin
      
        SelStart := SendMessage(Form1.log.Handle, EM_LINEINDEX, 0, 0);
        if SelStart >= 0 then Line := S + #13#10 else
          begin
            SelStart := SendMessage(Form1.log.Handle, EM_LINEINDEX, -1, 0);
            if SelStart < 0 then Exit;
            LineLen := SendMessage(Form1.log.Handle, EM_LINELENGTH, SelStart, 0);
            if LineLen = 0 then Exit;
            Inc(SelStart, LineLen);
            Line := #13#10 + s;
          end;
      
        SendMessage(Form1.log.Handle, EM_SETSEL, SelStart, SelStart);
        SendMessage(Form1.log.Handle, EM_REPLACESEL, 0, Longint(PChar(Line)));
      
      end;
      

      【讨论】:

        【解决方案4】:

        或者更好:

        SendMessage(Form1.log.Handle, EM_SETSEL, 0, -1);
        SendMessage(Form1.log.Handle, EM_SETSEL, (WPARAM)-1, -1);
        SendMessage(Form1.log.Handle, EM_REPLACESEL, 0, (LPARAM)Msg); //add a text
        //SendMessage(Form1.log.Handle, EM_REPLACESEL, 0, (LPARAM)L"\r\n"); //add a new line
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-17
          • 1970-01-01
          • 2011-06-19
          • 2014-04-12
          相关资源
          最近更新 更多