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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2009, 16:08   #1
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию Вопрос, По Memo.

Здравствуйте.

Поместил в Memo картинку вместо фона, но теперь поменять цвет
шрифта не могу. Вот код :


Код:
var
 SplashImage: TImage;
 
begin
       SplashImage := TImage.Create(Memo1);
       SplashImage.Stretch := true;
       SplashImage.Align := alClient;

       SplashImage.Parent := Memo1;

       SplashImage.Picture.LoadFromFile('C:\3.bmp');
       SplashImage.Width:= Memo1.Width;
       SplashImage.Height:= Memo1.Height;
       SplashImage.Stretch:= True;

       Memo1.Brush.Bitmap:= SplashImage.Canvas.Brush.Bitmap;
end;
Как поменять цвет шрифта Memo ?

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 07.04.2009, 16:39   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

последней строкой допишите
Код:
 memo1.Font.Color:=clred
SERG1980 вне форума Ответить с цитированием
Старый 07.04.2009, 17:24   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

SERG1980, тото код что он пишет рисует картинку на областе Meme таким образом закрывая текст.. если начать изменять текст - то построчно пропадает картинка..

volod3000, посмотри эту тему http://www.programmersforum.ru/showthread.php?t=21960

или создай свой компонент.. кстать если делать его на GDI+ то он оч симпотно выглядид )..

я бы сделал ручную отрисовку текста на чем угодно (пеинтбокс например).. где слой текста располагается поверху слоя картинки..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось Ntlegend; 07.04.2009 в 17:30.
Ntlegend вне форума Ответить с цитированием
Старый 07.04.2009, 17:31   #4
Ulagay700
Пользователь
 
Регистрация: 07.11.2007
Сообщений: 91
По умолчанию

Правильно. Мемо - текстовый, на нем приходится извращаться.
Ulagay700 вне форума Ответить с цитированием
Старый 07.04.2009, 17:35   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Делал когда-то подобное для ЛистБокса, может пригодится:

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ImageList1: TImageList;
    procedure FormCreate(Sender: TObject);
    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var b:TBitmap;i:integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
b:=TBitmap.Create;
ListBox1.Style:=lbOwnerDrawFixed;
ListBox1.Items.Add('123435');
ListBox1.Items.Add('123435');ListBox1.Items.Add('123435');ListBox1.Items.Add('123435');
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);

begin
//ImageList1.Draw(ListBox1.Canvas,rect.left,rect.top,index);
if (index>ImageList1.Count)or(index=0) then i:=0 else inc(i);
ImageList1.GetBitmap(i,b);
StretchBlt(ListBox1.Canvas.Handle,rect.Left,rect.Top,rect.Right-rect.Left,
 rect.Bottom-rect.Top,b.Canvas.Handle,0,0,b.Width,b.Height,SRCCOPY);
SetBkMode(ListBox1.Canvas.Handle, TRANSPARENT);
ListBox1.Canvas.TextOut(rect.Left,rect.Top,listbox1.Items[index]);
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2009, 18:37   #6
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Можно написать и через BitMap,
тогта картинка не закрывает текст, но цвет шрифта не меняется


Код:
var
bm:TBitmap;
begin
bm:=TBitmap.Create;
bm.LoadFromFile('c:\3.bmp');
end;
Какбы добраться к свойству canvas компонента Memo ?

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 07.04.2009, 21:16   #7
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Memo не имеет свойства Canvas.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 07.04.2009, 22:12   #8
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Вот решение проблемы,
может еще кому пригодится !

Код:

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    procedure WMCTLCOLOREDIT(var msg:TMessage); message WM_CTLCOLOREDIT;
  public
    { Public declarations }
  end;

var
  Form1   : TForm1;
  LogFont : TLogFont;
  hdc1    :cardinal;
  dc      :HDC;

implementation

{$R *.dfm}


procedure TForm1.WMCTLCOLOREDIT(var msg:TMessage);
begin

hdc1:=msg.wParam;
SetTextColor(hdc1,clRed);

FillChar(LogFont, SizeOf(LogFont), 0);
  with LogFont do
  begin
    lfHeight := 25; // Высота буквы
    lfWidth := 0; // Ширина буквы
    lfEscapement := 0; // Угол наклона в десятых градуса
    lfWeight := 1000;  // Жирность 0..1000, 0 - по умолчанию
    lfItalic := 0;  // Курсив
    lfUnderline := 0;  // Подчеркнут
    lfStrikeOut := 0; // Зачеркнут
    lfCharSet := RUSSIAN_CharSet;  // CharSet
    StrCopy(lfFaceName, 'Georgia');  // Название шрифта
  end;

  Memo1.Font.Handle:=  CreateFontIndirect(LogFont);

      dc:=HDC(msg.WParam);
      SetBkMode(dc,TRANSPARENT);

   msg.Result:=0;


end;


procedure TForm1.FormCreate(Sender: TObject);
var
b:TBitMap;

begin
         Form1.DoubleBuffered:= True;
         b:= TBitMap.Create;
         b.LoadFromFile('c:\3.bmp');
         Memo1.Brush.Bitmap:= b;

end;
Тема закрыта

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про Memo doniyor Помощь студентам 1 25.03.2009 18:08
Вопрос про memo. Алён@ Компоненты Delphi 1 02.02.2009 13:23
Вопрос про memo Artem Общие вопросы Delphi 1 14.09.2007 10:47
В Memo сделать так, чтобы текст был разного цвета, разноцветный memo Artem Компоненты Delphi 3 07.09.2007 13:40
один вопрос по Memo Andr Общие вопросы Delphi 2 11.05.2007 17:58