Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.03.2008, 12:25
Гудвин Гудвин вне форума
Прохожий
 
Регистрация: 18.03.2008
Сообщения: 24
Репутация: 10
По умолчанию Трабла Tpanel+TPaintBox+TEdit

Суть такая на пэинтбоксе изображение объектов с подписями, при нажатии на подпись на её месте появляется Эдит, пользователь вводит текст клацает по пэинтбоксу в другом месте и подпись меняется на то что он ввёл, а эдит исчезает.
Данный пример работает без проблем если пэинтбокс лежит на форме. если же он лежит на панели, то, после исчезновения эдита, изображение перерисовывается полностью но на месте эдита остается белый прямоугольник
onPaint в данном случае использовать нельзя
Из-за чего это, и как тут быть?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    PaintBox1: TPaintBox;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    procedure drawfon;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  fRect:Trect;
  str:string;
implementation

uses Types;

{$R *.dfm}
procedure TForm1.drawfon;
begin
with PaintBox1 do
begin
Canvas.Brush.Color:=clgreen;
Canvas.pen.Color:=clgreen;
Canvas.Rectangle(0,0,Width,Height);
Canvas.pen.Color:=clRed;
Canvas.Rectangle(frect);
canvas.TextOut(frect.Left+2,frect.Top+2,str);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
frect.Left:=200;
frect.top:=200;
frect.right:=250;
frect.bottom:=220;
str:='Текст';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
drawfon;
end;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Edit1.Visible then
  begin
   str:=Edit1.Text;
   Edit1.Visible:=false;
   drawfon;
  end else
if (x>frect.Left)and(x<fRect.Right)and(y>frect.Top)and(y<fRect.Bottom)then
  begin
   Edit1.Left:=fRect.Left;
   Edit1.top:=fRect.top;
   Edit1.width:=fRect.Right-fRect.Left;
   Edit1.Height:=fRect.Bottom-fRect.Top;
   Edit1.Visible:=true;
   Edit1.SetFocus;
  end;
end;

end.
Ответить с цитированием
  #2  
Старый 18.03.2008, 13:46
AlexBlack AlexBlack вне форума
Прохожий
 
Регистрация: 12.10.2007
Сообщения: 12
Репутация: 10
По умолчанию

Если добавить вот так, то работает и на панели
Код:
   ...
   Edit1.Visible:=false;
   Panel1.Refresh;
   drawfon;
   ...

Тебе видней, но хочу предупредить, если сдвинуть форму за пределы экрана и вернуть обратно, то что нарисовано в drawfon уже не восстановится. Нужно рисовать в OnPaint
Ответить с цитированием
  #3  
Старый 18.03.2008, 15:15
Гудвин Гудвин вне форума
Прохожий
 
Регистрация: 18.03.2008
Сообщения: 24
Репутация: 10
По умолчанию

спасибо, помогло
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:25.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter