|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Высота RichEdit в зав-ти от кол-ва строк
Всем привет! Столкнулся с такой проблемой - создаю динамически RichEdit.
Увеличиваю высоту компонента в зависимости от количества строк. Увеличение высоты делаю в RichEditChange, вот код: Код:
procedure TForm1.RichEditChange(Sender: TObject); var fr : TFormatRange; r : TRect; b : TBitmap; RE : array [1..50] of TRichEdit; begin b:=TBitmap.create; r:= rect(0, 0, RE[j].Width*screen.Pixelsperinch, RE[j].Height*screen.Pixelsperinch); fr.hdc := b.canvas.handle; fr.hdctarget:=b.canvas.handle; fr.rc:=r; fr.rcpage:=r; fr.chrg.cpMin:=0; fr.chrg.cpMax:=-1; Sendmessage(RE[j].handle,EM_FORMATRANGE,1,longint(@fr)); RE[j].Height:=Trunc(screen.Pixelsperinch*fr.rc.bottom/1440)+8; Sendmessage(RE[j].handle,WM_VSCROLL,SB_TOP,0); RE[i].Height:=RE[j].Height; b.Destroy; end; Код:
r:= rect(0, 0, RE[j].Width*screen.Pixelsperinch, RE[j].Height*screen.Pixelsperinch); |
#2
|
||||
|
||||
j и i не объявлены.
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
i и j объявленны в самом начале как integer. Ты это имеешь в виду?
Прилагаю скрин ошибки. Может быть это поможет |
#4
|
||||
|
||||
Создавать RichEdit-ы я так понимаю не нужно:
Код:
var RE : array [1..50] of TRichEdit; begin ... r:= rect(0, 0, RE[j].Width*screen.Pixelsperinch, RE[j].Height*screen.Pixelsperinch); ... Sendmessage(RE[j].handle,EM_FORMATRANGE,1,longint(@fr)); RE[j].Height:=Trunc(screen.Pixelsperinch*fr.rc.bottom/1440)+8; ... RE[i].Height:=RE[j].Height; ... Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
|||
|
|||
Angvelem, не совсем тебя понял. RichEdit-ы создаются в ButtonClick. Причем до создания RichEditChange были работоспособны, после создания оной процедуры при попытки набрать текст, выскакивает ошибка (см. выше).
|
#6
|
||||
|
||||
вместо скриншота ошибки дай минимальный проект с воспроизводимой ошибкой
Пишу программы за еду. __________________ |
#7
|
|||
|
|||
Ok
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, RichEdit, Grids; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure RichEditChange(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var i, j : integer; RE : array [1..50] of TRichEdit; procedure TForm1.Button1Click(Sender: TObject);// создание begin i:= i+1; RE[i]:= TRichEdit.Create(Form1); RE[i].Parent:=Form1; RE[i].Top:=i*21; RE[i].Left:=8; RE[i].Width:=129; RE[i].Height:=22; j:=j+1; RE[j]:= TRichEdit.Create(Form1); RE[j].Parent:=Form1; RE[j].Top:=j*21; RE[j].Left:=136; RE[j].Width:=465; RE[j].Height:=22; RE[j].OnChange:=RichEditChange; end; procedure TForm1.RichEditChange(Sender: TObject); var fr : TFormatRange; r : TRect; b : TBitmap; RE : array [1..50] of TRichEdit; begin b:=TBitmap.create; r:= rect(0, 0, RE[j].Width*screen.Pixelsperinch, RE[j].Height*screen.Pixelsperinch); fr.hdc := b.canvas.handle; fr.hdctarget:=b.canvas.handle; fr.rc:=r; fr.rcpage:=r; fr.chrg.cpMin:=0; fr.chrg.cpMax:=-1; Sendmessage(RE[j].handle,EM_FORMATRANGE,1,longint(@fr)); RE[j].Height:=Trunc(screen.Pixelsperinch*fr.rc.bottom/1440)+8; Sendmessage(RE[j].handle,WM_VSCROLL,SB_TOP,0); RE[i].Height:=RE[j].Height; b.Destroy; end; end. |
#8
|
||||
|
||||
Код:
procedure TForm1.RichEditChange(Sender: TObject); var fr : TFormatRange; r : TRect; b : TBitmap; //RE : array [1..50] of TRichEdit; begin b:=TBitmap.create; Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
bambooshoot (07.03.2012)
|
#9
|
|||
|
|||
Спасибо, NumLock! А почему так?
|
#10
|
||||
|
||||
у тебя RE : array [1..50] of TRichEdit; уже объявлен глобальный, в котором и создаются TRichEdit. а в процедуре RichEditChange получается используется локальный, который естественно "пустой".
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
bambooshoot (07.03.2012)
|