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

Николай_1988

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

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

  • Посещение

Сообщения, опубликованные Николай_1988

  1. Всем спасибо, разобрался

    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;

  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;

     

    1.png

  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); Выдает, естественно, ошибку.

    Это как-нибудь вообще можно реализовать? Может, есть какая-нибудь альтернатива? Или, как в примерах выше, путем сохранения этих файлов в память и последующего присоединения?

×
×
  • Создать...