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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2010, 15:01   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Элемент "Текст" как в Paint

Как создать в Delphi аналог элемента "Текст"? Ну, например, такой как в MS Paint когда мы выбираем "А" и можем печатать текст. Хочу попробовать вставлять на Image много текста, поэтому создал эту тему.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 22.08.2010, 15:15   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Главный холст - не TImage, а BitMap. На Имагу выводим Битмап. На имаге же и отрисоввываем служебные фигуры (в данном случае - рамка вокруг текста. В String по мере набора текста добавляем буквы и каждый раз выводим TextOut на ИМАГУ. В конце после окончания ввода рисуем на БИТМАП.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 22.08.2010, 20:31   #3
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Ну смотрите
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure razmer_image(razmer_width, razmer_height:integer);
    procedure Edit1Change(Sender: TObject);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  kom:Timage;
  b:boolean;
  x2,y2:integer;
  obekt:Tobject;
implementation

{$R *.dfm}

procedure TForm1.razmer_image(razmer_width, razmer_height:integer);
begin
image1.Picture:=nil;
image1.Width:=razmer_width+20;
image1.Height:=razmer_height+20;
image1.Transparent:=true;
image1.Canvas.Pen.Color:=$00E4A68B; //$00805D4E;
image1.Canvas.Pen.Width:=3;
image1.Canvas.MoveTo(3,3);
image1.Canvas.LineTo(image1.Width-3,3);
image1.Canvas.MoveTo(image1.Width-3,3);
image1.Canvas.LineTo(image1.Width-3,image1.Height-3);
image1.Canvas.MoveTo(image1.Width-3,image1.Height-3);
image1.Canvas.LineTo(3,image1.Height-3);
image1.Canvas.MoveTo(3,image1.Height-3);
image1.Canvas.LineTo(3,3);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
kom:=Timage.Create(form1);
kom.Parent:=form1;
kom.Transparent:=true;
kom.Width:=kom.Canvas.TextWidth(edit1.Text);
kom.Height:=kom.Canvas.TextHeight(edit1.Text);
kom.Canvas.TextOut(0,0,edit1.text);
razmer_image(kom.Width,kom.Height);
image1.Left:=kom.Left-10;
image1.Top:=kom.Top-10;
kom.OnMouseDown:=image1.OnMouseDown;
kom.OnMouseMove:=image1.OnMouseMove;
kom.OnMouseUp:=image1.OnMouseUp;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Timage(obekt).Picture:=nil;
Timage(obekt).Width:=Timage(obekt).Canvas.TextWidth(edit1.Text);
Timage(obekt).Height:=Timage(obekt).Canvas.TextHeight(edit1.Text);
Timage(obekt).Canvas.TextOut(0,0,edit1.text);
Timage(obekt).Picture:=nil;
Timage(obekt).Width:=Timage(obekt).Canvas.TextWidth(edit1.Text);
Timage(obekt).Height:=Timage(obekt).Canvas.TextHeight(edit1.Text);
Timage(obekt).Canvas.TextOut(0,0,edit1.text);
razmer_image(Timage(obekt).Width,Timage(obekt).Height);
image1.Left:=Timage(obekt).Left-10;
image1.Top:=Timage(obekt).Top-10;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if b=true then begin
Timage(sender).Left:=Timage(sender).Left+(x-x2);
Timage(sender).Top:=Timage(sender).Top+(y-y2);
image1.Left:=Timage(sender).Left-10;
image1.Top:=Timage(sender).Top-10;
end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
b:=true;
x2:=x;
y2:=y;
obekt:=sender;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
b:=false;
end;
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 28.12.2010, 05:29   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

если Edit зделат прозрачным, можно получит компонент Text
а поднего положить прозрачныи Image с изображением рамки по краям,
для Resize, реализовыват которыи можно описывая событиа движения
мышки над краями Image, что торчат из-под Edit
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 15.02.2011, 15:36   #5
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
если Edit зделат прозрачным, можно получит компонент Text
решение наидено
http://programmersforum.ru/showpost....62&postcount=4
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
Как "выдрать" нужный текст из html странички[C#] iHikita Общие вопросы .NET 7 14.07.2010 12:50
Напечатать текст, удалив из него все цифры и знаки "+" или "–". Язык С++. KaylasMKTY Помощь студентам 8 07.03.2010 21:35
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
Можно ли как-нибудь загнать текст "x+3" в функцию? TwiX Общие вопросы Delphi 13 02.11.2009 18:49