Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2019, 09:27   #1
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Вопрос Создание визуальных компонентов вне формы. Печать на принтере без формы - Printer.BeginDoc.

Приветствую! Помогите новичку.

Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    RichEdit1: TRichEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var today : TDateTime;
begin
  today := Time;
  RichEdit1.Paragraph.Alignment := taCenter;
  RichEdit1.Lines.add('Отошёл на 15 минут в ' + TimeToStr(today));
  RichEdit1.Print('');
end;

end.
Написал программу "Отошёл на 15 минут". Я часто работаю в офисе, в котором сижу один. Возникает необходимость отойти в магазин или банкомат на 15 минут. Программа при нажатии на кнопку печатает на принтере "Отошёл на 15 минут + текущее время", чтобы народ знал, что я уже подхожу или только отошёл и чтобы не звонили лишний раз.
В таком виде она занимает конские 2.35МБ.
Переписал вот так
Код:
program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes, Vcl.ComCtrls, Vcl.Dialogs, Vcl.Forms;
var RichEdit1: TRichEdit;
var today : TDateTime;
var taCenter: TAlignment;
var form1: TForm;
begin
  try
    today := Time;
    form1 := TForm.Create(nil);
    RichEdit1 := TRichEdit.Create(nil);
    RichEdit1.Parent := form1;
    RichEdit1.Paragraph.Alignment := taCenter;
    RichEdit1.Lines.add('Отошёл на 15 минут в ' + TimeToStr(today));
    RichEdit1.Print('');
    RichEdit1.Destroy;
    form1.Destroy;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Опять используется форма и остаются конские 2.30МБ.
Я пробовал писать на C++ с Qt-библиотекой, там компоненты создаются все отдельно сами по себе. То есть тотже rechEdit может работать без формы-родителя. Возможно ли такое сделать или это ограничение Delphi?
Версия Delphi 10.3 Community.

Благодарю за ответы!
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 07.09.2019, 11:50   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

А почему бы не сделать прозрачную форму? Тем более прозрачность врубается мышкой настройками. И рамка так же убирается настройками.

Цитата:
Сообщение от xwicked Посмотреть сообщение
В таком виде она занимает конские 2.35МБ.
Пишите на WinAPI, выкинте отладочную информацию, упакуйте EXE в сжатий вид.

Цитата:
Сообщение от xwicked Посмотреть сообщение
Я пробовал писать на C++ с Qt-библиотекой, там компоненты создаются все отдельно сами по себе. То есть тотже rechEdit может работать без формы-родителя.
Не может, это ограничения VCL. В QT тоже не уверен что заведётся.
Цитата:
Сообщение от xwicked Посмотреть сообщение
Возможно ли такое сделать или это ограничение Delphi?
Да можно рисовать без формы, я же вам показывал. Вот создаёте свой компонент. Только вот что-бы получить сообщение на перерисовку он всё-таки должен быть оформлен формой это ограничения виндоуса. Хотя его тоже можно обойти поставить таймер, а далее путём перебора всех форм и посылки им сообщений на перерисовку. И далее рисовать своё поверх.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 07.09.2019, 13:04   #3
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
А почему бы не сделать прозрачную форму? ...
Мне нужно сократить размер программы. Переписывать на WinAPI программу в 3 строчки? Позвольте! Это будет слишком жирно... При подключении Vcl.Dialogs, Vcl.Forms размер программы растёт. Хотя наверное я откажусь от этой затеи потому как в Qt это возможно благодаря тому, что подключается библиотека QtGui целиком. Исполняемый файл 100кб например, а QtGui 25МБ, так что те 2.35 МБ которые получается - это меньше чем у Qt, так как этот екзешник автономен.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 07.09.2019, 23:37   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от xwicked Посмотреть сообщение
Мне нужно сократить размер программы.
Зачем?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.09.2019, 12:30   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Цитата:
Сообщение от xwicked Посмотреть сообщение
Переписывать на WinAPI программу в 3 строчки?
Ну так тем более труда не составит.
digitalis вне форума Ответить с цитированием
Старый 08.09.2019, 16:14   #6
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Зачем?!!
Я хотел прокачать свой скилл и написать эту программу без формы, без конструктора, своими руками. У меня ничего не получилось. Как выяснилось это невозможно. Поэтому теряется смысл в написании таких программ руками. Если будет всё равно подключаться форма, то можно просто обработать другие события или сделать форму прозрачной, как Pavia посоветовал.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 08.09.2019, 16:54   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

На принтер можно и без визуального компонента. И на экран тоже )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.09.2019, 17:09   #8
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от xwicked Посмотреть сообщение
программу без формы
без формы можно было сделать даже в делфи 6. Описание объектов не забывай объявлять.
Alar вне форума Ответить с цитированием
Старый 08.09.2019, 17:16   #9
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
На принтер можно и без визуального компонента. И на экран тоже )
В 3 строчки?
Без
Код:
PixelsX:=GetDeviceCaps(printer.Handle, LogPixelsX);
  PixelsY:=GetDeviceCaps(printer.Handle, LogPixelsY);
?
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 08.09.2019, 17:21   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Printer.BeginDoc;
Printer.Canvas.ТехtOut(0,0,'Буду через 5 минут');
Printer.EndDoc;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание формы на html-странице. Нет реакции скрипта - обработчика формы. Pavll JavaScript, Ajax 2 11.11.2017 21:41
Alpha Controls и отрисовка визуальных компонентов fanlis Компоненты Delphi 1 08.10.2017 15:35
перемещение визуальных компонентов. Dvoishnik Общие вопросы Delphi 6 26.01.2016 14:35
Создание компонентов без формы Delphi009 Общие вопросы Delphi 5 07.01.2010 16:58
Печать компонентов формы monushka Помощь студентам 6 07.11.2007 19:30