![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
МАСТЕРА помогите!!! Как в EDIT поставить фон в виде рисунка!!! [D6, Win95/98, Win2k]
Songoku © (2003-02-05 15:58:00)Как в EDIT поставить фон в виде рисунка!!!
И спользуя функции API!!! Пожайлусто с примером!!!
Songoku (2003-02-10 16:57:00) [1]Удалено модератором
Примечание: Материться дома будешь
Безымянный среднего рода (2003-02-10 07:17:00) [2]> Songoku (09.02.03 18:51) дык.... возьми и доработай....кто мешает ?
Songoku (2003-02-09 18:51:00) [3]DVM : Много не дороботок: маргает кагда пишешь и кагда прокрутываешь!!!!
DVM (2003-02-07 13:07:00) [4]вот я когда то делал, правда для Мемо
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMemo1=class(TMemo)
private
public
protected
Procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
Procedure WMPaint(var Message: TWMPaint); message WM_Paint;
procedure WMMouseMove(var Message: TWMMouseMove); message WM_MouseMove;
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure DoPaint;dynamic;
procedure CHANGE; override;
end;
var
Form1: TForm1;
Memo1:TMemo1;
implementation
{$R *.dfm}
procedure TMemo1.DoPaint;
var
MyDC: HDC;
TempDC: HDC;
OldBmp, TempBmp: HBITMAP;
begin
begin
HideCaret(Handle);
MyDC := GetDC(Handle);
try
TempDC := CreateCompatibleDC(MyDC);
try
TempBmp := CreateCompatibleBitmap(MyDC, Succ(ClientWidth), Succ(ClientHeight));
try
OldBmp := SelectObject(TempDC, TempBmp);
PaintTo(TempDC, -2, -2);
BitBlt(MyDC, 0, 0, ClientWidth, ClientHeight, TempDC, 0, 0, SRCCOPY);
SelectObject(TempDC, OldBmp);
finally
DeleteObject(TempBmp);
end;
finally
DeleteDC(TempDC);
end;
finally
ReleaseDC(Handle, MyDC);
end;
ShowCaret(Handle);
end;
end;
procedure TMemo1.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
dopaint;
end;
procedure TMemo1.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
dopaint;
end;
procedure TMemo1.WMMouseMove(var Message:TWMMouseMove);
begin
inherited;
dopaint;
end;
procedure TMemo1.WMKeyDown(var Message: TWMKeyDown);
begin
inherited;
dopaint;
end;
procedure TMemo1.CHANGE;
begin
dopaint;
end;
procedure TMemo1.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
//SetBkColor(Message.DC, Transparent);
SetBkMode(message.dc, Transparent);
inherited;
memo1.Brush.Bitmap:=form1.image1.Picture.Bitmap;
//bitblt(message.DC,0,0,memo1.ClientWidth,memo1.ClientHeight,form1.Image1.Picture.Bitmap.canvas.Handle,0,0, SRCCOPY);
end;
procedure TMemo1.WMPaint(var Message: TWMPaint);
begin
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1:=TMemo1.Create(form1);
memo1.Parent:=form1;
memo1.Text:="fasdasdasd";
memo1.Font.Color:=clYellow;
memo1.Font.Size:=20;
memo1.Left:=10;
memo1.Top:=10;
memo1.Width:=200;
memo1.Height:=500;
//SetBkMode(getdc(memo1.Brush.Handle), Transparent);
//memo1.Enabled:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Text:="sdilfjdsofjofaofa";
end;
end.
i-C3H7OH (2003-02-07 11:49:00) [5]объявляем глобальную переменную
var hBr:HBRUSH;
(если создаешь класс, тогда обьявляем ее в приват-секции, как любой дескриптор)
в начале программы (или в обработчике WM_CREATE) создаем браш
hBr := CreatePatternBrush(Bitmap);
в конце уничтожаемDeleteObject(hBr)все
с битмапом тоже самое.
LoadBitmapFromFile("C:\bgr.bmp"));тоже создаетбитмап
уничтожается аналогичноDeleteObject(HBITMAP)
понятно? дерзай!
Songoku (2003-02-07 11:25:00) [6]Evgeny : Я знаю но он имел в виду что там про "DeleteObject(..)
"!!!
Evgeny (2003-02-07 05:47:00) [7]>Songoku (07.02.03 01:06)
А все-таки Вы, уважаемый, сделали именно так как предложил i-C3H7OH.
Songoku (2003-02-07 01:06:00) [8]i-C3H7OH : Yes работает только это делается немного по другому!!!
.....
procedureColorEdit(varM:TWMCTLCOLOREDIT);messageWM_CTLCOLOREDIT;.....
procedureTForm1.ColorEdit(varM:TWMCTLCOLOREDIT);
begin
SetTextColor(m.ChildDC,RGB(255,255,0));
SetBkMode(m.ChildDC,TRANSPARENT);
m.Result:=CreatePatternBrush(LoadBitmapFromFile("C:\bgr.bmp"));
end;
i-C3H7OH (2003-02-06 19:34:00) [9]если брашем надо заполнить, то тут даже проще
hBr := CreatePatternBrush(Bitmap);
делаем 1раз, создаем объест , который потом надо бы уничтожить
DeleteObject(..)
сообщение. как я понял для того чтоб задать заливку, цвет текста
используется WM_CTLCOLOREDIT. просто в качестве Resultа надо толкнуть hBr.
gsu (2003-02-06 15:56:00) [10]твая, твая (-:|~
Songoku (2003-02-06 15:55:00) [11]Скиньте мне кто исходник примера на мыло:
Songoku@tut.by
Songoku (2003-02-06 15:51:00) [12]i-C3H7OH: Это мая функция.
procedureSetWindowBkgBitmap(Window:HWND;Bitmap:HBitmap);
var
rc:Trect;
begin
Windows.GetClientRect(Window, rc);
FillRect(GetDC(Window), rc, CreatePatternBrush(Bitmap));
end;
functionLoadBitmapFromFile(Path:String):HBitmap;
begin
Result:=LoadImage(0,Pchar(Path),IMAGE_BITMAP,0,0,LR_LOADFROMFILEorLR_CREATEDIBSECTIONorLR_DEFAULTSIZE);
end;
Song (2003-02-06 12:27:00) [13]2Songoku (05.02.03 23:22)
Наверно долго теги вставлял? :)
i-C3H7OH (2003-02-06 12:12:00) [14]>Songoku
а BitBlt сделать?
LoadBitmapFromFile("C:\bgr.bmp") надо сделать один раз в начале выполнения программы,
а у тебя создаются битмапы при каждой перерисовке
кстати, что это за ф-ция SetWindowBkgBitmap(hWnd, HBITMAP)?
такую даже Google не находит
Songoku (2003-02-05 23:22:00) [15]......
dMemo:=Pointer(GetWindowLong(hEdit,GWL_WNDPROC));
SetWindowLong(hEdit,GWL_WNDPROC,Longint(@MemoProc));
...
functionMemoProc(hWnd,Msg,wParam,lParam:Longint):Longint;stdcall;
vart: TPaintStruct;begin
DC:HDC;
caseMsgof
WM_PAINT: begin SetWindowBkgBitmap(hWnd, LoadBitmapFromFile("C:\bgr.bmp"));
Result:=1;
end;
WM_ERASEBKGND:begin
DC:=BeginPaint(hWnd,t);end else
SetBkMode(DC,TRANSPARENT);
SetWindowBkgBitmap(hWnd, LoadBitmapFromFile("C:\bgr.bmp"));
EndPaint(hWnd,t);
Result:=1;Result:=CallWindowProc</CODE>(dMemo,hWnd,Msg,wParam,lParam);
end;
end;
DVM (2003-02-05 20:18:00) [16]
> Songoku
Возьмите на www.torry.net какой-нибудь компонент с исходниками и посмотрите. Там таких полно.
Есть еще CoolMemo, например.
Cobalt (2003-02-05 20:15:00) [17]Написать свой компонент, потомок от TEdit, и перекрыть в нем обработчик WM_ERASEBKGRND?
2 Songoku
Кстати, приведи примерчик того, что ты пытался сделать? и укажи, на какой строке у тебя вылазит ошибка.
Songoku (2003-02-05 17:10:00) [18]Удалено модератором
Songoku (2003-02-05 17:09:00) [19]Игорь Шевченко : Да в Edite или Memo!!!!
Song (2003-02-05 16:56:00) [20]А.. :), сорри
2Songoku (05.02.03 15:58)
А куда в едит вставлять фон?