![]() |
|
#1
|
|||
|
|||
![]() Вот собственно такая процедурка есть
Код:
procedure TForm1.Memo1Change(Sender: TObject); var Rect: TRect; begin SendMessage( Memo1.Handle, EM_GETRECT, 0, LongInt(@Rect)); Rect.Left:= 10; Rect.Top:=10; SendMessage(Memo1.Handle, EM_SETRECT, 0, LongInt(@Rect)); Memo1.Refresh; end; Создающая отступы по 10 пикселей сверху и слева. Однако при загрузке другого файла в ту же memo1 снизу съедается 10 пикселей видимого диапазона, и так при каждой загрузке до того момента пока видимой не остается одна строка, остальные строки попадают в невидимый диапазон и просмотреть их можно только движением вертикального скрола. Код:
procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin Memo1.Repaint; Memo1.Lines.LoadFromFile('F:\1\'+ ComboBox1.Text); Memo1.SelStart:= 0; Memo1.SelLength := 0; end; Как избавится от этого ? |
#2
|
|||
|
|||
![]() Вышел из ситуации таким способом
Код:
procedure TForm1.FormActivate(Sender: TObject); var Rect: TRect; begin SendMessage( Memo1.Handle, EM_GETRECT, 0, LongInt(@Rect)); Rect.Left:= 10; Rect.Top:=10; SendMessage(Memo1.Handle, EM_SETRECT, 0, LongInt(@Rect)); Memo1.Refresh; end; procedure TForm1.FormResize(Sender: TObject); begin Form1.FormActivate(Sender); end; Вообще верна ли строчка Form1.FormActivate(Sender) ? |
#3
|
||||
|
||||
![]() В Sender передаётся объект, который вызвал событие. Логичнее будет
Код:
(Sender as TForm1).FormActivate(Sender); jmp $ ; Happy End! The Cake Is A Lie. |
#4
|
||||
|
||||
![]() Цитата:
![]() Google в помощь Последний раз редактировалось Ildar-tsr, 18.05.2012 в 13:24. |
#5
|
||||
|
||||
![]() но, имхо, лучше:
Код:
FormActivate(Self); / FormActivate(Sender); ![]() Пишу программы за еду. __________________ |
#6
|
||||
|
||||
![]() Цитата:
Google в помощь |
#7
|
||||
|
||||
![]() Цитата:
Код:
procedure TForm1.FormResize(Sender: TObject); begin Form1.FormActivate(Sender); end; Пишу программы за еду. __________________ |
#8
|
||||
|
||||
![]() Цитата:
Google в помощь Последний раз редактировалось Ildar-tsr, 19.05.2012 в 06:10. |
#9
|
||||
|
||||
![]() не понятно зачем что-то менять, когда можно просто не писать это?)))
Пишу программы за еду. __________________ |
#10
|
|||
|
|||
![]() Так с отступами то разобрался, а как отступы при печати организовать ?
Использую процедуру PrintStrings. Код:
procedure TForm1.Button4Click(Sender: TObject); begin // printer.canvas.font := Memo1.font; Printer.canvas.font.Name:='Arial'; Printer.canvas.Font.Size:=9; PrintStrings(Memo1.Lines); end; |
#11
|
|||
|
|||
![]() Вопрос снят
нашёл более подробный код PrintStrings Код:
procedure PrintStrings(S: TStrings; Font: TFont; Title: string); var LeftMargin, TopMargin, LineCoord, LineOnPage, LinesOnDoc, CurrentLine, TextHeight, LinesPerPage, LineInterval: integer; procedure StartDoc; begin LinesOnDoc := S.Count; Printer.Canvas.Font.Assign(Font); Printer.Canvas.TextOut(0, 0, ' '); LeftMargin := (Printer.Canvas.Font.PixelsPerInch) div 2; TopMargin := (Printer.Canvas.Font.PixelsPerInch) div 2; TextHeight := Abs(Printer.Canvas.Font.Height); LineInterval := TextHeight + (TextHeight div 2); LinesPerPage := (Printer.PageHeight - TopMargin) div LineInterval; CurrentLine := 0; end; function MorePages:boolean; begin Result := (CurrentLine < LinesOnDoc) and not Printer.Aborted; end; procedure StartPage; begin LineOnPage := 0; LineCoord := TopMargin; end; procedure NextPage; begin if MorePages then Printer.NewPage; end; function MoreLines:boolean; begin Result := (LineOnPage < LinesPerPage) and (LineOnPage < LinesOnDoc) and not Printer.Aborted; end; procedure NextLine; begin Inc(LineOnPage); Inc(LineCoord, LineInterval); Inc(CurrentLine); end; procedure PrintLine; begin Printer.Canvas.TextOut(LeftMargin, LineCoord, S.Strings[CurrentLine]); end; begin Printer.Title := Title; Printer.BeginDoc; StartDoc; while MorePages do begin StartPage; while MoreLines do begin PrintLine; NextLine; Application.ProcessMessages; end; NextPage; end; Printer.EndDoc; end; |
#12
|
|||
|
|||
![]() проблема опять появилась, вставил memo1 на новую форму, а вызывается из она теперь из form1. Закрываю окно form2 с memo1, потом опять вызываю его и отступ снизу увеличивается. Помогите избавиться от этого.
|
#13
|
|||
|
|||
![]() Разобрался сам
|