Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
ВнизПодскажите, как Найти похожие ветки
← →
Layner (2004-02-03 08:36) [0]*
← →
Layner (2004-02-03 08:38) [1]В смысле ее рабочую область.
← →
Layner (2004-02-03 08:48) [2]У меня даже не получается текст вывести :(
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Canvas.Brush.Color := clMoneyGreen;
Form1.Canvas.Font.Color := clBlack;
Form1.Canvas.Font.Style:= [fsBold];
Form1.Canvas.TextOut(10,10,"Test");
end;
... и чистая форма..
← →
MBo (2004-02-03 08:51) [3]придется либо перекрывать WindowProc родительской формы, либо в обработчике Application.OnMessage рисование перехватывать
← →
Sergey_Masloff (2004-02-03 09:19) [4]Я с месяц назад приводил пример. Ищите в архивах - второй раз писать лень.
← →
Layner (2004-02-03 09:53) [5]Sergey_Masloff (03.02.04 09:19)
напишие плз ключевые слова, или если ветка старая, то она уже в архиве :( Если найду, напишу.
← →
Cobalt (2004-02-03 09:54) [6]Может, бросить на неё Image?
← →
Sergey_Masloff (2004-02-03 09:58) [7]Cobalt © (03.02.04 09:54) [6]
>Может, бросить на неё Image?
На MDI-форм? Слушай не знаешь так людей не смеши ;-)
← →
Sergey_Masloff (2004-02-03 10:06) [8]Layner © (03.02.04 09:53) [5]
Тема была как вывести текст лога на MDI. Сейчас нет времени я б написал за полчаса. Суть в том что нужно подменить оконную функцию и в ней обрабатывать события рисования. Если до вечера не найдешь я пример напишу. Сейчас нет времени.
← →
REP (2004-02-03 10:07) [9]procedure TMainForm.FormCreate(Sender: TObject);
begin
NewWinProc := MakeObjectInstance (NewWinProcedure);
OldWinProc := Pointer (SetWindowLong (
ClientHandle, gwl_WndProc, Cardinal (NewWinProc)));
OutCanvas := TCanvas.Create;
end;
procedure TMainForm.NewWinProcedure (var Msg: TMessage);
var
BmpWidth, BmpHeight: Integer;
I, J: Integer;
begin
// default processing first
Msg.Result := CallWindowProc (OldWinProc,
ClientHandle, Msg.Msg, Msg.wParam, Msg.lParam);
// handle background repaint
if Msg.Msg = wm_EraseBkgnd then
begin
BmpWidth := MainForm.Image1.Width;
BmpHeight := MainForm.Image1.Height;
if (BmpWidth <> 0) and (BmpHeight <> 0) then
begin
OutCanvas.Handle := Msg.wParam;
for I := 0 to MainForm.ClientWidth div BmpWidth do
for J := 0 to MainForm.ClientHeight div BmpHeight do
OutCanvas.Draw (I * BmpWidth,
J * BmpHeight, MainForm.Image1.Picture.Graphic);
end;
end;
end;
(C) Кэнту
← →
Sergey_Masloff (2004-02-03 10:10) [10]REP © (03.02.04 10:07) [9]
Да я в свое время у Кэнту научился. Но в приведенном коде есть недостаток - сделай максимизированное окно, потом "нормализуй" и снова разверни. Видишь? Хотя устраняется несложно.
← →
Layner (2004-02-03 10:25) [11]>Хотя устраняется несложно.
После ресайза прогнать процедуру заново?
← →
REP (2004-02-03 11:21) [12]Sergey_Masloff (03.02.04 10:10) [10]
Я так понимаю пример и не должен подходить 100% к вопросу, должно же остаться поле для деятельноси мозгов...
← →
Игорь Шевченко (2004-02-03 12:12) [13]REP © (03.02.04 11:21)
Для деятельности мозгов достаточно одного слова - WM_ERASEBKGND ;)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c