Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Графический редактор

Автор: vadim(b) 15.06.2007 1:57

Добрый вечер.
Исходный текст можете взять из предыдущего сообщения с тем же названием.
Вопрос вот в чем. Как вставить текст как в Peint'e в любое место компонента Image т.е чтобы щелкнуть в нужное место image и ввести текст допустим в edit. За любые ответы спасибо

Автор: мисс_граффити 15.06.2007 2:56

Если ты хочешь привязываться к Edit, то количество вводимых участков текста или надо ограничивать, или извращаться с новыми Edit'ами.
вот что у меня получилось.
гадость. работает, но так, что лучше бы не работало.
подумаю, как это сделать по-человечески.

var X1,Y1: integer;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
X1:=X;
Y1:=Y;
end;

procedure TForm1.FormCreate(Sender: TObject); //чтобы мерцания не было
begin
DoubleBuffered:=true;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
Image1.Canvas.TextOut(X1,Y1,Key);
inc(X1,7);
end;

Автор: volvo 15.06.2007 19:27

vadim(b),
положи на форму TEdit, и попробуй вот это:

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Edit1.Top := y + Image1.Top;
Edit1.Left := x + Image1.Left;

Edit1.Text := '';
Edit1.Visible := true;
Edit1.SetFocus;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=true;
Edit1.Visible := false;

Image1.Canvas.Brush.Style := bsSolid; // Это можно и не делать...
Image1.Canvas.Brush.Color := clWhite; // ...

Image1.Canvas.FillRect(Image1.Canvas.ClipRect); // ...
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
x1, y1: integer;
s: string;
begin
if key = #13 then begin
x1 := edit1.Left;
y1 := edit1.Top;
s := Edit1.Text;

Image1.Canvas.TextOut(X1,Y1,s);

Edit1.Visible := False;
edit1.Left := 0;
edit1.Top := 0;
end;
end;

Автор: мисс_граффити 16.06.2007 2:51

тогда уж, чтобы выводилось на выбранном пользователем месте

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
x1, y1: integer;
s: string;
begin
if key = #13 then begin
x1 := edit1.Left-Image1.Left; //вот здесь
y1 := edit1.Top-Image1.Top; //и здесь
s := Edit1.Text;

Image1.Canvas.TextOut(X1,Y1,s);

Edit1.Visible := False;
edit1.Left := 0;
edit1.Top := 0;
end;
end;


пробовала сначала подобное, но намудрила с сочетанием SetFocus'a и невидимости. не разобралась, в общем sad.gif