Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/69: Рейтинг темы: голосов - 69, средняя оценка - 4.55
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181

Panel1.Canvas

10.10.2012, 00:01. Показов 13679. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно рисовать на панели. Сделать это у меня получилось. Проблема в том, что если форму свернуть/восстановить, то все нарисованное исчезает.
Подскажите, как решить эту проблему...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2012, 00:01
Ответы с готовыми решениями:

Checkbox1 на panel1
как программно при создании формы,создать панель и разместить на панели checkbox1?

Цвет panel1
Подскажите как чтобы при нажатии на button1 цвет panel1 становилсь randomный

Panel1 по содержимой программе
Вот код Windows.SetParent(FindWindow(nil, 'calc.exe'), Panel1.Handle); Калькулятор открывается на форме , а именно в панели, но он...

39
angstrom
30.10.2012, 00:18
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от vetal20600 Посмотреть сообщение
З.Ы.Ы. Блин, что-то оно на 3 строку матюгается:
...
Unsatisfied forward or external declaration: 'TPanel.Paint'
И будет "матюгаться", после того как определили override, нужно описать процедуру:
Delphi
1
2
3
4
5
procedure TPanel.Paint;
begin
  inherited;
  // ваш код отрисовки здесь.
end;
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
30.10.2012, 00:19
А назначить онмаусдаун-событию пейнтбокса тот же обработчик что и у события онмаусдаун формы тебе религия не позволяет ?
1
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
30.10.2012, 00:22  [ТС]
angstrom, Точно. Вот это я тупанул))
З.Ы. На 16 сообщение ответь.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
30.10.2012, 00:24
Цитата Сообщение от vetal20600 Посмотреть сообщение
не смогу словить событие формы онмаусдаун, если сверху на ней
На какой "на ней" ?
Пейнтбокс следует шлепать на панель, коль скоро ты именно на ней хочешь рисовать, а не на форму.
1
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
30.10.2012, 00:38  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Пейнтбокс следует шлепать на панель, коль скоро ты именно на ней хочешь рисовать, а не на форму.
Да. В сообщении 20 имелась в виду панель, а не форма.
Цитата Сообщение от mss Посмотреть сообщение
А назначить онмаусдаун-событию пейнтбокса тот же обработчик что и у события онмаусдаун формы тебе религия не позволяет?
Нет. Sender: TObject. Он нужен родной, а не от паинтбокса.
0
angstrom
30.10.2012, 00:42
Sender всегда проверить можно. Ох и мудришь же.
Delphi
1
2
3
4
5
6
...
  if Sender is TPanel then
    bla-bla
  else if Sender is TPaintBox then
    bla-bla
...
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
30.10.2012, 00:48  [ТС]
angstrom, проверит можно, но нужен родной для написания конструкций типа
(sender as TPanel).[какое-то свойство]
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
30.10.2012, 00:50
Цитата Сообщение от vetal20600 Посмотреть сообщение
Он нужен родной, а не от паинтбокса
Да какой бы он ни был, обработчик онмаусдаун формы не будет вызван при клике на панели.
И если уж так приспичило иметь сендером форму. то ничто не мешает из автономного онмаусдаун-обработчика пейнтбокса вызвать онмаусдаун-обработчик формы, передав ему сендер-параметром саму форму.
1
angstrom
30.10.2012, 00:59
Цитата Сообщение от vetal20600 Посмотреть сообщение
... но нужен родной для написания конструкций типа
(sender as TPanel).[какое-то свойство]
И что мешать продолжить прведённый мною код?
Delphi
1
2
3
4
5
6
...
  if Sender is TPanel then
    (Sender as TPanel).Свойство = bla-bla
  else if Sender is TPaintBox then
    (Sender as TPaintBox).Свойство = bla-bla
...
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
30.10.2012, 00:59  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Да какой бы он ни был, обработчик онмаусдаун формы не будет вызван при клике на панели.
И если уж так приспичило иметь сендером форму. то ничто не мешает из автономного онмаусдаун-обработчика пейнтбокса вызвать онмаусдаун-обработчик формы, передав ему сендер-параметром саму форму.
нет и нет. ты меня не правильно понял.
смотри, ты говорил мне примерно об этом (не совсем об этом, но суть кагбы та же):
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.PaintBox2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Panel1MouseDown(Sender,Button,Shift,X,Y,);
end;
 
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  memo1.Lines.Add('panel_mdwn');
end;
Но если будет так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.PaintBox2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Panel1MouseDown(Sender,Button,Shift,X,Y,);
end;
 
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  memo1.Lines.Add('panel_mdwn');
  (sender as TPAnel).Caption:='YEPPP';
 
end;
То уже будет ерор((
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
30.10.2012, 00:59
Ты же ведь перекроешь пейнтбоксом всю клиентскую область окна панели ?
Ну так и пиши в обработчике онмаусдауна пейнтбокса

if Assigned(TPanel(Parent).OnMouseDown) then
TPanel(Parent).OnMouseDown(Parent, Button, Shift: TShiftState, X, Y);
1
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
30.10.2012, 01:14  [ТС]
Цитата Сообщение от angstrom Посмотреть сообщение
И что мешать продолжить прведённый мною код?
Delphi
1
2
3
4
5
6
...
  if Sender is TPanel then
    (Sender as TPanel).Свойство = bla-bla
  else if Sender is TPaintBox then
    (Sender as TPaintBox).Свойство = bla-bla
...
поскольку рисовать надо по всей панели, то паинтбокс будет растянут по всей ширине-высоте этой самой панели и строки 2-3 вообще никогда не выполнятся. я всегда буду кликать по пеинтбоксу.
З.Ы. спасибо за советы и за желание помочь.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
30.10.2012, 01:19
Цитата Сообщение от vetal20600 Посмотреть сообщение
я всегда буду кликать по пеинтбоксу
При этом сраьботает пейнтбоксов обработчик клика и в нем ты волен вызвать обработчик клика панели, передав сендером в него саму панель.
Куда уж проще)
1
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
30.10.2012, 01:27  [ТС]
mss, попровал и получил ошибку.
З.Ы. И тебе спасибо за советы и желание помочь...
Миниатюры
Panel1.Canvas  
0
angstrom
30.10.2012, 01:30
Да и не нужно вызывать обработчик панели, код
Delphi
1
  memo1.Lines.Add('panel_mdwn');
прекрасно можно исполнить и в обработчике TPaintBox.
19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
30.10.2012, 01:33  [ТС]
Цитата Сообщение от angstrom Посмотреть сообщение
Да и не нужно вызывать обработчик панели, код
Delphi
1
  memo1.Lines.Add('panel_mdwn');
прекрасно можно исполнить и в обработчике TPaintBox.
Неа. Эт не моя прога, которую я пишу (та прога на флешке). Эту я за 5 минут накидал))
0
angstrom
30.10.2012, 01:39

Не по теме:


Мне кажется, что ТС хочет изобрести очередной "велосипед", но никак не может придумать из каких деталей его лучше собрать.

19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
30.10.2012, 01:51  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
При этом сраьботает пейнтбоксов обработчик клика и в нем ты волен вызвать обработчик клика панели, передав сендером в него саму панель.
Куда уж проще)
Всё. Спасибо еще раз. Открыл мне глаза!!! Видимо, так и сделаю.
З.Ы. И кое-кто не прав)), никакой велосипед я не изобретаю. Просто надо использовать динамически созданную панель для рисования на ней и для динамического создания на ней компонентов и еще для некоторых вещей...
0
angstrom
30.10.2012, 02:05

Не по теме:

Цитата Сообщение от vetal20600 Посмотреть сообщение
...З.Ы. И кое-кто не прав)), никакой велосипед я не изобретаю...
Я не пытался никого обидеть.

19 / 20 / 2
Регистрация: 19.04.2012
Сообщений: 181
30.10.2012, 18:22  [ТС]
В общем, нашел альтернативу и сделал так:
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
37
38
39
40
41
42
43
44
45
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    ...
    procedure FormCreate(Sender: TObject);
    ...
  private
    OldPanelProc: TWndMethod;
    procedure NewPanelProc (var Message: TMessage);
  end;
 
  MPnl = class(TsPanel)
    public
      property Canvas;
    end;
 
var Form1:TForm1;
     qq:MPnl;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
...
  OldPanelProc:=qq.WindowProc;
  qq.WindowProc:=NewPanelProc;
...
end;
 
procedure TForm1.kpy_frm_btmp;//з бітмапа в канвас панелі
begin
  BitBlt(qq.Canvas.Handle, 0, 0, qq.Width, qq.Height, btm.Canvas.Handle, 0, 0, SrcCopy);
end;
 
procedure TForm1.NewPanelProc(var Message: TMessage);
begin
 if Message.Msg=WM_PAINT then
  begin
    smemo1.Lines.Add('well done!');//прикол в том, что в sмемо пишет, 
    kpy_frm_btmp;//а процедура kpy_frm_btmp не выполняется((
    //BitBlt(qq.Canvas.Handle, 0, 0, qq.Width, qq.Height, btm.Canvas.Handle, 0, 0, SrcCopy);
  end;
  OldPanelProc(Message);
end;
Не могу вот понять, почему строка 41 не хочет работать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.10.2012, 18:22

Можно ли одной процедурой рисовать на Image.Canvas и Printer.Canvas
Здравствуйте, пожалуйста, подскажите можно ли одной процедурой рисовать на Image.Canvas и Printer.Canvas?

Как добиться одинакового размера шрифта при выводе на Image.Canvas и Printer.Canvas
Здравствуйте! Подскажите, пожалуйста, как добиться одинакового размера шрифта при выводе на Image.Canvas и Printer.Canvas

Скажите можно ли повернуть panel1
Скажите можно ли повернуть panel1 на 5 градусов по часовой стрелке ???

Система инвентаря или как перетащить image1 в panel1
Друзья,ребята помогите пожалуйста.Как сделать так,чтобы можно было сделать что-то вроде инвентаря.У меня на форме есть Panel1 и...

КАК в Panel1 вставить картинку и вместе с картинкой двигать
КАК в Panel1 вставить картинку и вместе с картинкой двигать


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru