Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставить картинку в TEdit 
:(
    Опции темы
IGDark
  Дата 5.4.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 5.4.2007

Репутация: нет
Всего: нет



Добрый всем день!

Подскажите, если кто знает, или сталкивался с подобной проблемой - необходимо вставить изображение в сам контрол справа или слева от текста. При этом, это не должна быть кнопка, просто изображение.

Алекс
PM MAIL   Вверх
_hunter
Дата 5.4.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: нет
Всего: 98



для этого необходимо сделать совй контрол-наследник от TEdit, который будет в OnPaint'е рисовать изображение справа или слева от текста.
для начала:
http://articles.org.ru/cfaq/index.php?qid=307
(статья "Как в tedit расположить текст справа?")


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ivan219
  Дата 5.4.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



IGDark, а интересно зачем тебе это, может проще зделать рисонок рядом в Edit?
Так как если зделать его в самом Edit то текст будет этот ресунок перекрывать а значит надо будет ещё и об этом побеспокоится.
PM MAIL ICQ   Вверх
ivan219
  Дата 5.4.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Вот толкьо теперь надо решить прблемы с текстом.
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Image: TImage;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Image:=TImage.Create(Edit1);
 Image.Parent:=Edit1;
 Image.Width:=Edit1.Height-4;
 Image.Height:=Edit1.Height-4;
 Image.Top:=0;
 Image.Left:=Edit1.Width-Image.Width-3;
 Image.Picture.LoadFromFile('1.bmp');
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
 Image.Picture.LoadFromFile('1.bmp');
end;
end.


Хотя вот так новерное будет лучше.
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
 Image:=TImage.Create(Self);
 Image.Parent:=Self;
 Image.Height:=Edit1.Height;
 Image.Width:=Edit1.Height;
 Image.Top:=Edit1.Top;
 Image.Left:=Edit1.Left+Edit1.Width;
 Image.Picture.LoadFromFile('1.bmp');
end;


Это сообщение отредактировал(а) ivan219 - 5.4.2007, 16:05
PM MAIL ICQ   Вверх
Sunvas
Дата 5.4.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 2
Всего: 89



IGDark, где-то недалеко я приводил пример, как всунуть рисунок в Мемо. Поиск тебе в руки, - найдешь пример, возьми его за основу.

Это сообщение отредактировал(а) Sunvas - 5.4.2007, 16:21


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
ivan219
  Дата 5.4.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



IGDark, А тебе картинку растянуть на весь Edit или только часть???
PM MAIL ICQ   Вверх
IGDark
Дата 5.4.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 5.4.2007

Репутация: нет
Всего: нет



Спасибо всем за ответы! Мне бы хотелось добавить небольшую картинку справа или слева от текста и при этом, чтобы текст edita не неё не заласил. Смотрите скрин.

Присоединённый файл ( Кол-во скачиваний: 41 )
Присоединённый файл  edit.jpg 3,09 Kb
PM MAIL   Вверх
ivan219
  Дата 6.4.2007, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Вот вареант правда немного коряво да и недоделан smile 

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  ImageEdit.rar 1,71 Kb
PM MAIL ICQ   Вверх
IGDark
Дата 8.4.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 5.4.2007

Репутация: нет
Всего: нет



Цитата(ivan219 @  6.4.2007,  04:06 Найти цитируемый пост)
Вот вареант правда немного коряво да и недоделан   

Спасибо за пример, дружище! Не подскажешь только как заставить этот компонент отображать именно ту картинку, которую ты указал в Image -> Picture?

Заменить

FImage.Picture.Bitmap.LoadFromResourceName(hInstance, 'PIC1');
- на -
FImage.Picture.Assign(Image.Picture);

Не помогает...
PM MAIL   Вверх
ivan219
  Дата 8.4.2007, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Вот ещё вареант через Bitmap.
Код

unit ImageEdit;

interface

uses
  Windows, SysUtils, Classes, Controls, StdCtrls, ExtCtrls, Graphics, Forms;

type
  TImageEdit = class(TCustomControl)
  private
    FEdit: TEdit;
    FBitmap: TBitmap;
    FText: TCaption;
    procedure SetText(Value: TCaption);
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Edit: TEdit read FEdit;
    property Text: TCaption read FText write SetText;
  end;

procedure Register;

{$R pics.res}

implementation

procedure Register;
begin
  RegisterComponents('MyComponent', [TImageEdit]);
end;

{ TImageEdit }

constructor TImageEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,csSetCaption,
   csDoubleClicks, csReplicatable, csParentBackground, csFixedHeight ,csOpaque];
  Width:=145;
  Height:=21;  
  FEdit:=TEdit.Create(Self);
  FEdit.Parent:=Self;
  FEdit.BorderStyle:=bsNone;
  FEdit.Height:=13;
  FEdit.Top:=4;
  FEdit.Left:=3;
  FEdit.Width:=120;
  FBitmap:=TBitmap.Create;
  FBitmap.LoadFromResourceName(HInstance,'PIC1');
end;

destructor TImageEdit.Destroy;
begin
  FEdit.Free;
  FBitmap.Free;
  inherited;
end;

procedure TImageEdit.Paint;
begin
  inherited;
  FEdit.Width:=Width-25;
  Canvas.Pen.Width:=1;
  Canvas.Pen.Color:=$00F0D2D2;
  Canvas.RoundRect(0,0,Width,Height,8,8);
  Canvas.Draw(Width-19,2,FBitmap);
  SelectPalette(Canvas.Handle,FBitmap.Palette,True);
  RealizePalette(Canvas.Handle);
end;

procedure TImageEdit.SetText(Value: TCaption);
begin
 if Value<>FText then
  begin
   FText:=Value;
   FEdit.Text:=Value;
  end;
end;

end.

А загрузку картинки я делал из ресурса {$R pics.res} фаил pics.res имя картинки в нём PIC1 можно организовать выбор если накидать туда поболше картинок а так если пользоватся Image мой первый вареант то прям из под него и загружай когда компонент установлен на форму.
По пути.
Код

ImageEdit.FImage.Picture....

PM MAIL ICQ   Вверх
IGDark
Дата 9.4.2007, 05:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 5.4.2007

Репутация: нет
Всего: нет



Цитата(ivan219 @  8.4.2007,  22:14 Найти цитируемый пост)
Вот ещё вареант через Bitmap.

Спасибо! Остался пожалуй последний вопрос - как добавить теперь в этот компонент события относящиеся к TEdit - OnChange, допустим?
PM MAIL   Вверх
ivan219
  Дата 9.4.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Я думал над этим но пока никаких результатов smile 
Тут надо перенапровлять это событие с Edit в ImageEdit smile 
PM MAIL ICQ   Вверх
ivan219
  Дата 11.4.2007, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Боле мене реализован  smile появился OnChange и можно вставлять свои картинки.
Код

unit ImageEdit;

interface

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

type
  TImageEdit = class(TCustomControl)
  private
    FEdit: TEdit;
    FPicture: TPicture;
    FOnChange: TNotifyEvent;
    procedure SetText(Value: TCaption);
    procedure SetPicture(Value: TPicture);
    function GetText: TCaption;
  protected
    procedure Paint; override;
    function CanResize(var NewWidth, NewHeight: Integer): Boolean; override;
    procedure EOnChange(Sender: TObject); virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Edit: TEdit read FEdit;
    property Text: TCaption read GetText write SetText;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
    property Picture: TPicture read FPicture write SetPicture;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyComponent', [TImageEdit]);
end;

{ TImageEdit }

constructor TImageEdit.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 Width:=145;
 Height:=21;
 FEdit:=TEdit.Create(Self);
 FEdit.Parent:=Self;
 FEdit.BorderStyle:=bsNone;
 FEdit.OnChange:=EOnChange;
 FEdit.Height:=13;
 FEdit.Top:=4;
 FEdit.Left:=3;
 FEdit.Width:=120;
 FPicture:=TPicture.Create;
end;

destructor TImageEdit.Destroy;
begin
 FEdit.Free;
 FPicture.Free;
 inherited;
end;

function TImageEdit.CanResize(var NewWidth, NewHeight: Integer): Boolean;
begin
 Result:=True;
 NewHeight:=FEdit.Height+8;
end;

procedure TImageEdit.EOnChange(Sender: TObject);
begin
 if Assigned(FOnChange) then FOnChange(Self);
end;

function TImageEdit.GetText: TCaption;
begin
 Result:=FEdit.Text;
end;

procedure TImageEdit.Paint;
begin
 inherited;
 FEdit.Width:=Width-25;
 Canvas.Pen.Width:=1;
 Canvas.Pen.Color:=$00F0D2D2;
 Canvas.RoundRect(0,0,Width,Height,8,8);
 Canvas.StretchDraw(Rect(Width-FPicture.Width-2,2,Width-2,FPicture.Height+2),
  FPicture.Graphic);
end;

procedure TImageEdit.SetText(Value: TCaption);
begin
 if Value<>GetText then FEdit.Text:=Value;
end;

procedure TImageEdit.SetPicture(Value: TPicture);
begin
 if Value<>FPicture then
  begin
   FPicture.Assign(Value);
   Invalidate;
  end;
end;
end.

PM MAIL ICQ   Вверх
IGDark
Дата 11.4.2007, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 5.4.2007

Репутация: нет
Всего: нет



Цитата(ivan219 @  11.4.2007,  01:12 Найти цитируемый пост)
Боле мене реализован   появился OnChange и можно вставлять свои картинки.

Спасибо! Всё работает отлично, респект тебе! smile  smile 
PM MAIL   Вверх
ivan219
  Дата 11.4.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Цитата(IGDark @  11.4.2007,  02:14 Найти цитируемый пост)
 Всё работает
 ну это ты меня перехвалил smile до полноценного компонента ему как до Пекина в известной позе  smile  

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1347 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.