Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Подстановка фона в TEDit


Автор: Mixasik 15.11.2006, 08:18
Кто-нибудь знает можно ли в TMemo подставить фон, рисунок желательно. И на нем бы отображался текст, или сделать компоненты(опять же Tedit TMemo и др.) невидимыми, но чтобы текст на месте этих компонентов был виден? 
Или может есть где литература о создании оформления к программам? Или просто кто научит как по-другому организовать оформление программы? 

Автор: VTK 15.11.2006, 09:06
Цитата(Mixasik @ 15.11.2006,  08:18)
Кто-нибудь знает можно ли в TMemo подставить фон, рисунок желательно. И на нем бы отображался текст.

Например использовать TImage+Tlabel вместо TMemo

Автор: Romikgy 15.11.2006, 11:07
имхо onPaint никто не отменял

Автор: Mixasik 15.11.2006, 14:44
Цитата(VTK @  15.11.2006,  09:06 Найти цитируемый пост)
Например использовать TImage+Tlabel вместо TMemo


Ну а как тогда вводить текст через них, мне не только вывод нужен?

Цитата(Romikgy @  15.11.2006,  11:07 Найти цитируемый пост)
имхо onPaint никто не отменял


А как это через onPaint сделать? Что-то я не все понял?

Автор: Poseidon 15.11.2006, 15:04
Цитата(Mixasik @  15.11.2006,  08:18 Найти цитируемый пост)
или сделать компоненты(опять же Tedit TMemo и др.) невидимыми, но чтобы текст на месте этих компонентов был виден?
 А что мешает сделать фон едита таким же, как и фон формы и убрать у едита борбюр? Тогда создастся впечатление невидимости компонента, но видимости текста.

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Color:= Form1.Color;
Edit1.BorderStyle:= bsNone;
end;


можно и в инспекторе настроить...

Добавлено @ 15:06 
Цитата(Romikgy @  15.11.2006,  11:07 Найти цитируемый пост)
имхо onPaint никто не отменял 

Romikgy, где ты видел в TEdit и TMemo onPaint?

Автор: Mephisto 15.11.2006, 15:52
Вот, быстренький примерчик как можно заюзать:
Unit 1
Код
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    myEdit : TMyEdit;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  myEdit := TMyEdit.Create(Self);

  myEdit.Left := 10;
  myEdit.Top := 10;

  myEdit.Show;
  myEdit.Width := 100;
  myEdit.Height := 100;
  myEdit.AutoSize := false;
  myEdit.Picture.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Buttons\Abort.bmp');
end;

end.


Unit2
Код
unit Unit2;

interface

uses Controls, StdCtrls, Graphics, Classes, Messages, Windows;

type
  TMyEdit = class (TCustomEdit)
  private
    FPicture : TPicture;
    FCanvas : TCanvas;
    procedure WndProc(var Message : TMessage); override;
    procedure Paint;
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
    property Picture : TPicture read FPicture write FPicture;
    property Autosize;
  end;

implementation

{ MyEdit }

constructor TMyEdit.Create(AOwner: TComponent);
begin
  inherited CReate(AOwner);
  FPicture := TPicture.Create;
  Parent := TWinControl(AOwner);
  FCanvas := TControlCanvas.Create;
  TControlCanvas(FCanvas).Control := Self;
end;

destructor TMyEdit.Destroy;
begin
  FPicture.Free;
  FCanvas.Free;
  inherited destroy;
end;

procedure TMyEdit.Paint;
begin
  try
    if FCanvas.LockCount > 0 then exit;
    FCanvas.Lock;
    FCanvas.Brush.Bitmap := FPicture.Bitmap;
    FillRect(FCanvas.Handle, ClientRect, 0);
    FCanvas.TextOut(0,0, Text);
    FCanvas.Unlock;
  finally
  end;
end;

procedure TMyEdit.WndProc(var Message: TMessage);
begin
  Case Message.Msg of
    WM_PAINT:
    begin
      Inherited WndProc(Message);
      Paint;
    end;
  else
    Inherited WndProc(Message);
  end;
end;

end.


В смысле как можно добавить св-во PIcture к Edit.

Автор: Mixasik 17.11.2006, 15:46
Цитата(Poseidon @  15.11.2006,  15:04 Найти цитируемый пост)
 А что мешает сделать фон едита таким же, как и фон формы и убрать у едита борбюр? Тогда создастся впечатление невидимости компонента, но видимости текста.


А если фон состоит из множества картинок, то так не получится?!

Цитата(Mephisto @  15.11.2006,  15:52 Найти цитируемый пост)
В смысле как можно добавить св-во PIcture к Edit.


Спасибо, попробую, думаю это как рас то, что надо smile 

Автор: Mixasik 17.11.2006, 17:58
user posted image
Вот дизайн, который предполагается для программы, а вто программа
user posted image
И подскажите, как прогу сделать с таким дизвйном?
Mephisto, этот способ добавляет рисунок, но когда текст набирается или выводится он написан на белом фоне smile 

Автор: Mixasik 18.11.2006, 06:46
Ну вот покрупнее прикрепил

Автор: Mixasik 18.11.2006, 06:47
А вот вид программы...

Автор: Poseidon 18.11.2006, 20:41
Ну так ё-мое, для этого и подойдет
Цитата(Poseidon @  15.11.2006,  15:04 Найти цитируемый пост)
сделать фон едита таким же, как и фон формы и убрать у едита бордюр


Фон у форма так же не стандартный оставляешь, а подбираешь какой надо. Или я чего-то недопонял...

Автор: Mixasik 19.11.2006, 10:15
Цитата(Poseidon @  18.11.2006,  20:41 Найти цитируемый пост)
Фон у форма так же не стандартный оставляешь, а подбираешь какой надо. Или я чего-то недопонял...


У меня фон - это картинка, а когда я ствлю, фон формы, поле принемает фон формы , а не картинки в компоненте Timage, который находится под TMemo....
А мне надо, чтобы был рисунок фоном компонента....
И никак это не сделаю

Автор: Mephisto 20.11.2006, 13:43
Прозрачный Edit сделать не получится, можно сделать только полупрозрачный! Ноэто безсмысленно. Текст будет плохо видно.
Лучше делать либо свой компонент на подобии TCustomEdit. Либо искать уже готовый.

Компонент на основе TCustomEdit как видишь сделать не получится. 

Автор: Mixasik 21.11.2006, 19:52
Цитата(Mephisto @  20.11.2006,  13:43 Найти цитируемый пост)
Лучше делать либо свой компонент на подобии TCustomEdit. Либо искать уже готовый.


Знать бы как сделать?! Ну придется искать?

Ну может кто знает, как создавать дизайн к программе, возможно я неправильно думаю?)

Автор: Mephisto 22.11.2006, 09:23
Цитата(Mixasik @  21.11.2006,  20:52 Найти цитируемый пост)
Знать бы как сделать?! 

Я был очень близок к решению. Только надо посмотреть где и каким образом в стандартном компоненте выводят текст и перекрыть метод...
Надо дальше коппать. У меня нет времени.
Цитата(Mixasik @  21.11.2006,  20:52 Найти цитируемый пост)
возможно я неправильно думаю

Возможно правильно!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)