-
Постов
5 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Николай_1988
-
-
Здравствуйте, коллеги! Подскажите, если не сложно, в чем может быть причина размещения скролла у 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; -
Благодарю, решил немного иначе )
Создается лист вдвое шире чем изначальный и в него пихаются два битмапа. Если документов нечетное количество, суется пустой. Далее это дело переворачивается на 90 градусов и сохраняется (посылается на печать). Профит. А5 готов ))
-
Здравствуйте, коллеги! Нужна ваша помощь. Перерыл кучу гайдов, не нашел ответа на волнующий вопрос. Если ниженаписаное выглядит уныло, прошу не тролить, учусь только ))
Приложение для 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 doListCreate(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 на странице и прочее. Как программно это можно реализовать?
Заранее огромное спасибо!
-
Здравствуйте, отцы и боги 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); Выдает, естественно, ошибку.
Это как-нибудь вообще можно реализовать? Может, есть какая-нибудь альтернатива? Или, как в примерах выше, путем сохранения этих файлов в память и последующего присоединения?
ListView нестандартное расположение ScrollBar'a
в TListView
Опубликовано
Всем спасибо, разобрался
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.LV_SubSection.EndUpdate;
F_General.Qry.Close;
end;