Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
484 / 331 / 32
Регистрация: 15.08.2011
Сообщений: 1,071
1

Не выводится изображение с помощью CopyRect по FormCreate

23.01.2018, 23:25. Показов 1449. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь вывести на форму рисунок функцией CopyRect. Рисование делаю на обработчике события OnCreate. Ничего не происходит. Если же сделаю обработчик на нажатие кнопки, то по нажатию все рисует как надо. Но мне надо чтоб рисунок был сразу после запуска программы. Что я упустил?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2018, 23:25
Ответы с готовыми решениями:

RAD studio 10.2 TForm1.FormCreate пишет что FormCreate вы сами придумали
Unit1.pas(35): E2003 Undeclared identifier: 'FormCreate' unit Unit1; interface uses...

Не выводится изображение в IE
<script> function reload(){ var imageObj = new Image(); ...

Не выводится изображение
Есть код var bm : TBitmap; i : integer; bmTop, bmBottom, Scale : Cardinal; CurrentP :...

Не выводится изображение
Взял код с официального сайта и он не работает (убрал немного лишнего); $im =...

12
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
24.01.2018, 00:05 2
После OnCreate срабатывает OnShow и производится Repaint, который переписывает, что Вы нарисовали на форме.
1
484 / 331 / 32
Регистрация: 15.08.2011
Сообщений: 1,071
24.01.2018, 01:00  [ТС] 3
Так надо на OnShow делать чтоб работало?
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
24.01.2018, 02:42 4
Лучше бы было рисовать на OnPaint.
0
484 / 331 / 32
Регистрация: 15.08.2011
Сообщений: 1,071
24.01.2018, 21:25  [ТС] 5
Цитата Сообщение от northener Посмотреть сообщение
Лучше бы было рисовать на OnPaint
А что за событие OnPaint? Для чего оно используется?
Поставил счетчик на это событие. Оказалось оно вызывается непрерывно с большой скоростью. В таком виде не займет ли оно процесс бесполезной работой?
0
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
24.01.2018, 23:37 6
Цитата Сообщение от paskal Посмотреть сообщение
А что за событие OnPaint? Для чего оно используется?
http://docs.embarcadero.com/pr... Paint.html
Графические компоненты постоянно перерисовываются
If you use the form's Canvas property outside the OnPaint event, it will be erased and drawn-over by the next OnPaint event.
Если Вы используете свойство формы Canvas не в обработчике события OnPaint, ваши каракули будут стерты и перерисованы следующим событием OnPaint
1
484 / 331 / 32
Регистрация: 15.08.2011
Сообщений: 1,071
25.01.2018, 00:09  [ТС] 7
Цитата Сообщение от Joey Посмотреть сообщение
Графические компоненты постоянно перерисовываются
Я согласен что компоненты должны перерисовываться когда например окна передвигаешь. Но тут другой случай. Это событие строчит как пулемет когда весь экран полностью неподвижен.
0
Джоуи
1081 / 643 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
25.01.2018, 00:17 8
Цитата Сообщение от paskal Посмотреть сообщение
Это событие строчит как пулемет когда весь экран полностью неподвижен
Приведите код, который показывает, что оно строчит как пулемет
0
484 / 331 / 32
Регистрация: 15.08.2011
Сообщений: 1,071
25.01.2018, 01:14  [ТС] 9
На форму кидаю Label1 и ставлю обработчик на OnPaint:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
var
  k:Cardinal;
  s:string;
procedure TForm1.FormPaint(Sender: TObject);
begin
  k:=k+1;
  str(k,s);
  Label1.Caption:=s;
end;
 
end.
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
25.01.2018, 01:24 10
Цитата Сообщение от paskal Посмотреть сообщение
На форму кидаю Label1 и ставлю обработчик на OnPaint
Цитата Сообщение от paskal Посмотреть сообщение
procedure TForm1.FormPaint(Sender: TObject); begin k:=k+1; str(k,s); Label1.Caption:=s; end;
Ну просто зашибись! В обработчике OnPaint нужно рисовать что-то своё, а не заставлять форму заново перерисовываться! И именно вы заставляете вызывать этот обработчик в режиме пулемёта, изменяя Label1.Caption.
2
484 / 331 / 32
Регистрация: 15.08.2011
Сообщений: 1,071
25.01.2018, 01:37  [ТС] 11
Цитата Сообщение от northener Посмотреть сообщение
И именно вы заставляете вызывать этот обработчик в режиме пулемёта, изменяя Label1.Caption.
Ну я об этом догадывался. Но это не дает ответа что делать.
Если я что то рисую своё, то опять вызову OnPaint до бесконечности.
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
25.01.2018, 01:51 12
Цитата Сообщение от paskal Посмотреть сообщение
Если я что то рисую своё, то опять вызову OnPaint до бесконечности.
А вы попробуйте и потом уже скажете что получилось.
Если вы будете только рисовать, то никаких повторных вызовов OnPaint не будет.
Точнее повторные вызовы конечно будут, но только по необходимости связанной с видимостью окна формы.
1
5785 / 4527 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
25.01.2018, 10:35 13
TForm.OnPaint выполняется когда сама форма еще ничего не отрисовала, и вы просто рисуете НА ПУСТОМ КАНВАСЕ

поверх полученной картины форма будет рисовать свои компоненты
уж точно нельзя изменять свойства компонентов, которые говорят форме что нужно перерисоваться еще раз...

а вообще лучше рисовать на специально предназначенных поверхностях типа TPaintBox, а не на стенах домов...
1
25.01.2018, 10:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2018, 10:35
Помогаю со студенческими работами здесь

На монитор не выводится изображение
проблема в следующем: на монитор не выводится изображение, мигает индикатор. Монитор...

Не выводится изображение на монитор
Здравствуйте! Не знал в каком разделе оставить пост, так как проблема, судя по всему,...

Не выводится изображение на экран
Приветствую! Я недавно начал изучать XNA, код пишу в MV S# Express,использую XNA 4.0. Пишу по...

Не выводится изображение на сайте
Здравствуйте! Нужно вывести изображение на сайт, но у меня не получается. Использую HTML+Django в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru