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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2013, 22:11   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Не получается сменить фон у ListView. Нужно как-то сменить обработку WM_ERASEBKGND, судя по всему

Ставлю обои так:
Код:
procedure TForm1.DrawWallpaper();
var
  Img: TImage;
  BkImg: TLVBKImage;
begin
  FillChar(BkImg, SizeOf(BkImg), 0);
  BkImg.ulFlags := LVBKIF_TYPE_WATERMARK;
  // Load image and take ownership of the bitmap handle
  Img := TImage.Create(nil);
  try
    Img.Picture.LoadFromFile('C:\sample.bmp');
    BkImg.hbm := Img.Picture.Bitmap.ReleaseHandle;
  finally
    Img.Free;
  end;
  // Set the watermark
  SendMessage(ListView1.Handle, LVM_SETBKIMAGE, 0, LPARAM(@BkImg));
end;
Вот и сабклассинг:
Код:
function NewWndProc(Handle: hWnd; Msg, wParam, lParam: Longint): Longint;
  stdcall;
var

begin
  Result := CallWindowProc(WProc, Handle, Msg, wParam, lParam);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    header: HWND;
begin
    header := ListView_GetHeader(ListView1.Handle);
    WProc := Pointer(SetWindowLong(ListView1.Handle, GWL_WNDPROC, NativeInt(@NewWndProc)));
end;
Уже кучу всего перекопал. Помогайте)


Как следующий код переделать для новой оконной процедуры?
Код:
procedure TwpListView.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_ERASEBKGND then
    DefaultHandler(Message)
  else
    inherited WndProc(Message);
end;

Последний раз редактировалось TwiX; 09.06.2013 в 22:39.
TwiX вне форума Ответить с цитированием
Старый 09.06.2013, 23:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

По моему проще стоит:
Код:
 TListView=class(ComCtrls.TListView)
    private
      procedure ebg(var m:TWMEraseBkgnd); message WM_EraseBkgnd;
  end;

  TForm1 = class(TForm)
    ListView1: TListView;
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

...
{ TListView }

procedure TListView1.ebg(var m: TWMEraseBkgnd);
begin
 ну и тут рисуй
end;
Однако я не понимаю разве у листвью нет событий на рисование элементов?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2013, 23:25   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

ListView - не мой, а чужого окна. Пока так текстирую
TwiX вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно по нажатию кнопки сменить пароль Алексей_2012 Общие вопросы Delphi 7 31.10.2012 13:02
Как сменить раскладку клавиатуры YourLastSong Общие вопросы C/C++ 1 17.12.2011 15:16
сменить фон строки таблицы Pein95 HTML и CSS 3 18.08.2011 19:20
Эквалайзер BASS сменить фон KoBRaAndrey Мультимедиа в Delphi 5 02.03.2011 20:57
как сменить ник ??? maladoy О форуме и сайтах клуба 12 07.02.2009 19:45