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

Николай_1988

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

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

  • Посещение

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

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

Достижения Николай_1988

  1. Всем спасибо, разобрался procedure UpdateListSubSection;varid, Subsection : string;begin F_General.LV_SubSection.BeginUpdate; if F_General.LV_SubSection.Items.Count <> 0 then F_General.LV_SubSection.Items.Clear; While not F_General.Qry.Eof do begin SubSection := F_General.Qry.FieldByName('N_subsection').AsString; FCanUpdate := False; LItem := F_General.LV_SubSection.Items.Add; LItem.Data['SubSection'] := SubSection; FCanUpdate := True; F_General.LV_SubSection.Adapter.ResetView(LItem); F_General.Qry.Next; end; F_General.LV_SubSection.EndUpdate; F_General.Qry.Close;end;
  2. Здравствуйте, коллеги! Подскажите, если не сложно, в чем может быть причина размещения скролла у LV не справа, как обычно, а в непонятной области и мелкого размера. Список формируется по примеру с данного форума Если схожий проект, на основании которого этот делал. Там работает все как должно. А тут уже все перепробовал, стиль удалял и прочее. Создаю пустой проект, кидаю LV, заполняю. Все нормально, скролл в родном месте. Все что связанно с данным компонентом: var FCanUpdate: Boolean; LItem: TListViewItem; ... F_General.Qry.SQL.Text:='SELECT N_subsection FROM N_subsection'; F_General.Qry.Open; UpdateListSubSection; ... procedure UpdateListSubSection; var id, Subsection : string; begin F_General.LV_SubSection.BeginUpdate; if F_General.LV_SubSection.Items.Count <> 0 then F_General.LV_SubSection.Items.Clear; While not F_General.Qry.Eof do begin SubSection := F_General.Qry.FieldByName('N_subsection').AsString; FCanUpdate := False; LItem := F_General.LV_SubSection.Items.Add; LItem.Data['SubSection'] := SubSection; FCanUpdate := True; F_General.LV_SubSection.Adapter.ResetView(LItem); F_General.Qry.Next; end; F_General.Qry.Close; end; procedure TF_General.LV_SubSectionUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); var LText: TListItemText; h: Integer; begin if not FCanUpdate then Exit; h := 0; //подраздел LText := AItem.Objects.FindObjectT<TListItemText>('SubSection'); if LText = nil then begin LText := TListItemText.Create(AItem); LText.Name := 'SubSection'; LText.PlaceOffset.X := 20; LText.PlaceOffset.Y := h; LText.SelectedTextColor := WhiteColor; LText.TextColor := WhiteColor; LText.TextAlign := TTextAlign.Leading; LText.TextVertAlign := TTextAlign.Leading; LText.Font.Size := 15; // LText.Font.Style := [TFontStyle.fsBold]; LText.Font.Family:='JhengHei UI'; end; LText.Width := (Sender as TListView).Width - 50; LText.Text := AItem.Data['SubSection'].AsString; LText.Height := 27; h := Round(h + LText.Height); AItem.Height := h+3; AHandled := True; end;
  3. Благодарю, решил немного иначе ) Создается лист вдвое шире чем изначальный и в него пихаются два битмапа. Если документов нечетное количество, суется пустой. Далее это дело переворачивается на 90 градусов и сохраняется (посылается на печать). Профит. А5 готов ))
  4. Здравствуйте, коллеги! Нужна ваша помощь. Перерыл кучу гайдов, не нашел ответа на волнующий вопрос. Если ниженаписаное выглядит уныло, прошу не тролить, учусь только )) Приложение для Windows на FM. На основании png-шного шаблона с помощью canvas, накидывает на него строки в определенные места и сохраняет в папке с ехе. В зависимости от диапазона вводимых дат создается несколько однотипных изображений 1_0, 1_1, 1_2 и т.д. (я художник, я так вижу) просто с разными датами и в цикле посылается на печать каждый файл следующим образом: var SrcRect, DestRect: TRectF; DateCount, i : integer; IMG:TImage; begin IMG:=TImage.Create(nil); DateCount := DaysBetween(DE_Order.Date,DE_Order2.Date); //получаем количество дней между датами for I := 0 to DateCount do ListCreate(DE_Order.Date+i,i); //процедура создания png. Втыкает дату в шаблон и сохраняет документ как 1_i if PrintDialog1.Execute then //После выбора принтера begin for i := 0 to DateCount do //отправляем каждый файл в очередь печати напрямую в принтер begin Printer.BeginDoc; SrcRect.Left := 0; SrcRect.Top := 0; SrcRect.Right := 2481; SrcRect.Bottom := 3508; IMG.Bitmap.LoadFromFile(PChar('1_'+IntToStr(i)+'.png')); DestRect := TRectF.Create(0, 0, 4962, 7016); //тут я так и не понял, но методом подгона выяснилось, что без увеличения в 2 раза значений SrcRect нормально печатать не будет. Но это не важный момент Printer.Canvas.DrawBitmap(Img.Bitmap, SrcRect, DestRect, 1); Printer.EndDoc; end; end; end; Вот и сам вопрос.. Возникла задача.. Печатать все эти документы в А5 формате по 2 листа на странице. Если делать все руками, можно в папке выделить все изображения - на печать. Там и можно настроить 2 на стр, 4 на странице и прочее. Как программно это можно реализовать? Заранее огромное спасибо!
  5. Здравствуйте, отцы и боги fm! Подскажите пожалуйста новичку..? Перерыл все, что мог, ответа не нашел. Тыкните пожалуйста носом, если есть какая-нибудь статья. Коротко о моей задаче. Приложение для андройда. Из забитого списка с БД формируется счет с использованием загруженного в TImage изображения (что-то вроде листа А4 с шапкой фирмы) и Canvas, накидывающего на него реквизиты, список товаров, сумму и прочее. С помощью ShowShareSheetAction1.Bitmap.Assign(IMG.Bitmap) отправляется клиенту. Проблема возникла, когда список товаров был больше, чем задумано. Ладно, через условия (if количество товаров > например, 60 then создаем динамический image и записываем остатки туда) можно перекидывать. Но, как отправить сразу эти 2 TImage? Пробовал ShowShareSheetAction1.Bitmap.Assign(IMG.Bitmap); ShowShareSheetAction1.Bitmap.Assign(IMG2.Bitmap); Отправляет последнюю запись. Пробовал что-то вроде: ShowShareSheetAction1.Bitmap.Assign(IMG1.Bitmap, IMG2.Bitmap); Выдает, естественно, ошибку. Это как-нибудь вообще можно реализовать? Может, есть какая-нибудь альтернатива? Или, как в примерах выше, путем сохранения этих файлов в память и последующего присоединения?
×
×
  • Создать...