Форум — Ответы     (  К темам )
 ?  TRANSPARENT: как поставить фоновую картинку в компонент типа TMemo (08-01-2003 03:41:13)
Пытался,в конструкторе формы присваивал кисти TMemo битмап прорисовывался мой мемо с картинкой , вот только строка с курсором была чисто белой и в дальнейшем
строка на которую переходил курсор тоже очищалась,если понажимать бэкспэйс опять
прорисовывается битмап.
Я думаю, может дело в фоне текста.SetBgMode (или как ее там)не помогла.
Есть у когото идеи ?
Если есть поделитесь.

Зарание спасибо.
(А казалось таким легким делом)
 Devnvd (08-01-2003 14:43:05)
Вот так можно приспособить SetBkMode для Edit Control, каковым и является TMemo.
Буквы при этом стирать за вас никто небудет. Они так и останутся на экране, пока вы не сделаете перерисовку(Repaint) в событии OnChange.
Пример приведён полностью.
Используется:
TForm1 *Form1; //OnClose
TMemo *Memo1; //OnChange
TButton *Button1; //OnClick
TOpenDialog *OpenDialog1;




Graphics::TBitmap *BmpMemo=NULL;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
WindowProc=MyWindowProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyWindowProc(Messages::TMessage &msg)
{
switch(msg.Msg)
{
case WM_CTLCOLOREDIT:
if(msg.LParam==(int)Memo1->Handle)
{
HDC hdc=(HDC)msg.WParam;
SetBkMode(hdc,TRANSPARENT);
msg.Result=0;
return;
}
break;
default:
break;
}
WndProc(msg);
}
//---------------------------------------------------------------------------
//Загрузим фоновую картинку для Memo1
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(!OpenDialog1->Execute())return;
Memo1->Brush->Bitmap=NULL;
if(!BmpMemo)BmpMemo=new Graphics::TBitmap();
BmpMemo->LoadFromFile(OpenDialog1->FileName);
Memo1->Brush->Bitmap=BmpMemo;
Memo1->Repaint();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Memo1->Brush->Bitmap=NULL;
if(BmpMemo)delete BmpMemo;
BmpMemo=NULL;
}
//---------------------------------------------------------------------------
//Заставляем перерисовывать всё, в том числе и фон
void __fastcall TForm1::Memo1Change(TObject *Sender)
{
Memo1->Repaint();
}