Перейти к содержанию
Fire Monkey от А до Я

Sashar333

Пользователи
  • Постов

    108
  • Зарегистрирован

  • Посещение

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Сделал вот так: FkPrinter:=TMyPrinter.Create(Printer.ActivePrinter.Device,true); var OffsetX := FkPrinter.GetOffsetX; var OffsetY := FkPrinter.GetOffsetY; printer.Canvas.Offset := TPoint.Create(OffsetX , OffsetY); При выборе любого принтера (у меня их три), все Offset'ы = 0 И печатает соответственно также ... Может еще есть варианты для пробы?
  2. А как это смещение вычислить, сколько пикселей составляет это смещение? На разных принтерах оно разное? Требуется запуск печати двумя кнопками, без личных настроек пользователя: нажал кнопку печать - выбрал принтер - нажал кнопку ОК
  3. Не то что косо, происходит смещение, как-бы за границу видимости на листе. т.е. если если нарисовать вертикальную линию от 0,0 до 0,Printer.PageHeight, то она не напечатается у меня на принтере, а если, допустим, рисовать от 200,0 до 200,Printer.PageHeight то она печатается Мне требуется нарисовать таблицу максимальную по размерам листа, но она обрезается как на рисунке выше. Делал как в учебнике: SrcRect := Image1.LocalRect; DestRect := TRectF.Create(0, 0, Printer.PageWidth, Printer.PageHeight); Printer.Canvas.DrawBitmap(Image1.Bitmap, SrcRect, DestRect, 1); или RectF(0,0, Image1.Bitmap.Width, Image1.Bitmap.Height) это совсем другое чем Image1.LocalRect ?
  4. Printer.Canvas.DrawBitmap(Image1.Bitmap, SrcRect, DestRect, 1); С bitmap'ом тоже так же печатает. Может существует максимальное для принтеров смещение (PHYSICALOFFSETX)?
  5. Про поля понял, спасибо! а где и как можно получить Printer.Handle? в FMX.Printer не могу найти его ...
  6. Здравствуйте! Подскажите пожалуйста в чем причина смещения изображения при печати по горизонтали относительно листа? procedure ThePrint(day : arraySheet; prn : TPrintDialog); var DestRect, Rect_cell, Rect_Size:TRectF; i,pageall:integer; textFill: tFillTextFlags; poses : TPoses; Col1 : boolean; COLROW : integer; sizeRow : Single; Image : TImage; begin textFill := []; COLROW := 63; Printer.ActivePrinter := Printer.Printers[1]; Printer.ActivePrinter.SelectDPI(Printer.ActivePrinter.DPI[Printer.ActivePrinter.DPICount-1]); Printer.BeginDoc; sizeRow := Printer.PageHeight / COLROW; poses := getPosY(day, sizeRow); Printer.Canvas.BeginScene; Printer.Canvas.Font.Size := sizeRow * 0.8; Printer.Canvas.Font.Family := 'Times New Roman'; Printer.Canvas.Fill.Color := TAlphaColorRec.Black; Printer.Canvas.Fill.Kind := TBrushKind.Solid; Col1 := true; var WCol := Printer.PageWidth / 2 - 10; var WColW := WCol / 3; for var s := 0 to Length(poses)-1 do begin if Col1 then DestRect := RectF(0, poses[s], WCol, poses[s] + sizeRow) else DestRect := RectF(WCol, poses[s], Printer.Canvas.Width, poses[s] + sizeRow); Printer.Canvas.Font.Style:= Printer.Canvas.Font.Style + [TFontStyle.fsBold]; Printer.Canvas.FillText(DestRect,day[0].listSheme[s].name,True,1,textFill,TTextAlign.Center,TTextAlign.Center); Printer.Canvas.Font.Style:= Printer.Canvas.Font.Style - [TFontStyle.fsBold]; for var p := 0 to Length(day[0].listSheme[s].listPosition) - 1 do begin var nameSize := day[0].listSheme[s].listPosition[p].t + 'x' + day[0].listSheme[s].listPosition[p].w + 'x' + day[0].listSheme[s].listPosition[p].l + '='; if day[0].listSheme[s].listPosition[p].c.ToInteger > 1 then nameSize := nameSize + day[0].listSheme[s].listPosition[p].c + 'л'; Rect_cell := RectF(10, poses[s] + (sizeRow * (p+1)), WCol-30, poses[s] + (sizeRow * (p+2))); Rect_Size := RectF(0, poses[s] + (sizeRow * (p+1)), WCol - WColW, poses[s] + (sizeRow * (p+2))); if not Col1 then begin Rect_cell.Left := Rect_cell.Left + WCol + 20; Rect_cell.Right := Rect_cell.Right + WCol + 10; Rect_Size.Left := Rect_Size.Left + WCol + 20; Rect_Size.Right := Rect_Size.Right + WCol + 10; end; Printer.Canvas.FillText(Rect_cell, day[0].listSheme[s].listPosition[p].pn + ')' + day[0].listSheme[s].listPosition[p].s, True,1,textFill,TTextAlign.Leading,TTextAlign.Center); Printer.Canvas.FillText(Rect_Size, nameSize, True,1,textFill,TTextAlign.Trailing,TTextAlign.Center); end; Col1 := not(Col1); end; for var row := 1 to COLROW do begin Printer.Canvas.DrawLine(TPointF.Create(0, sizeRow * row), TPointF.Create(WCol, sizeRow * row), 0.5); Printer.Canvas.DrawLine(TPointF.Create(WCol + 20, sizeRow * row), TPointF.Create(Printer.Canvas.Width, sizeRow * row), 0.5); end; DestRect := RectF(0, 0, Printer.Canvas.Width, sizeRow); Printer.Canvas.FillText(DestRect, day[0].name, True, 1, textFill, TTextAlign.Center,TTextAlign.Center); Printer.Canvas.DrawLine(TPointF.Create(WCol, sizeRow), TPointF.Create(WCol, Printer.Canvas.Height), 1); Printer.Canvas.DrawLine(TPointF.Create(WCol + 20, sizeRow), TPointF.Create(WCol + 20, Printer.Canvas.Height), 1); Printer.Canvas.DrawLine(TPointF.Create(0, sizeRow), TPointF.Create(500, Printer.Canvas.Height), 1); Printer.Canvas.DrawLine(TPointF.Create(Printer.Canvas.Width, sizeRow), TPointF.Create(Printer.Canvas.Width, Printer.Canvas.Height), 1); Printer.Canvas.DrawLine(TPointF.Create(WCol-WColW+20, sizeRow), TPointF.Create(WCol-WColW+20, Printer.Canvas.Height), 1); Printer.Canvas.DrawLine(TPointF.Create(Printer.Canvas.Width-WColW+20, sizeRow), TPointF.Create(Printer.Canvas.Width-WColW+20, Printer.Canvas.Height), 1); Printer.Canvas.EndScene; Printer.EndDoc; end; ВОТ ЧТО ПОЛУЧАЕТСЯ: Линия спецом под угол, что бы понять само смещение в лево относительно листа. Соответственно текст тоже видно на половину Написано на Delphi 11, FMX.Printer Заранее спасибо!
  7. Опубликовано 29 мая вроде правильно... только ошибки в английских словах исправьте (Catolog)... если тормоза есть - это уже fmx (еще очень далеко до совершенства)..... тут или смириться или искать собственные пути отображения списков... Здравствуйте! А Вы можете написать тоже самое что и в ранее написанном Вами gek.zip, только на Java, для разбора в AndroidStudio? или тормоза там такие же могут возникнуть как и FMX, Вы не в курсе случайно? Заранее спасибо за ответ!
  8. так используются они: это с Вашего примера я взял, отлично все работает, но зависает, там порядка 400 элементов примерно ... в FormCreate создается поток: при завершении вызывается создание списка тут правильно все сделано?
  9. Здравствуйте! Подскажите пожалуйста, почему при первом переключении с начальной вкладки TTabControl на вкладку с заполненным ListView(в FormCreate) приложение подвисает на пару секунд и можно как то сделать чтобы не повисало? Так же происходит и при переключении на другие вкладки, где просто TImage и Label. А когда везде побываешь то перестает зависать.
  10. Здравствуйте! Подскажите пожалуйста как понять и искать эти утечки памяти:
×
×
  • Создать...