Cita:
Empezado por Sonic
...En cuanto a lo de escribir directamente en el Canvas.... también lo pensé pero no consigo acceder al Canvas del RichEdit, a lo mejor alguién pueda decirme cómo.
|
Me ha llamado la atención el problema, y he hecho un par de pruebas. Pensé que no debía ser muy complejo y como solución he llegado a ésto:
NOTA: Simplemente hay que redefinir el mensaje de pintado WMPaint, para pintar una línea en el interior del control (espero que sea lo que buscas...).
El ejemplo es en Delphi (
) aunque no te será difícil supongo pasarlo a C++.
El código del componente quedaría así:
Código Delphi
[-]
unit RichEditLine;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ComCtrls, Graphics;
type
TRichEditLine = class(trichedit)
private
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Neftalí', [trichEditLine]);
end;
procedure trichEditLine.WMPaint(var Message: TWMPaint);
const
CONST_SPACE = 10;
var
MCanvas: TControlCanvas;
DrawBounds: TRect;
begin
inherited;
MCanvas := TControlCanvas.Create;
DrawBounds := ClientRect;
try
MCanvas.Control := Self;
MCanvas.Pen.Color := clGray;
MCanvas.Pen.Style := psDash ;
MCanvas.Pen.Width := 1;
MCanvas.MoveTo(CONST_SPACE, CONST_SPACE);
MCanvas.LineTo(Self.Width - CONST_SPACE, CONST_SPACE);
MCanvas.LineTo(Self.Width - CONST_SPACE, Self.Height - CONST_SPACE);
MCanvas.LineTo(CONST_SPACE, Self.Height - CONST_SPACE);
MCanvas.LineTo(CONST_SPACE, CONST_SPACE);
finally
MCanvas.Free;
end;
end;
end.
P.D: Si te sirve el código y puedes pasarlo a C++, me gustaría ver cómo queda para comporar ambos. Thnks.