sazehra
asked on
Tiled background image in listbox
Hi,
I want to create watermarks in instances of TListBox and TLMDListBox.
That is, i want to place one faint background image on the listbox and have it tiled all over the listbox. Even in case i resize my form (the listbox will also be resized), the image should get tiled smoothly, leaving no white space behind on the listbox.
Does anyone have a clue as to how can it be done?
Thanks a lot in advance...
I want to create watermarks in instances of TListBox and TLMDListBox.
That is, i want to place one faint background image on the listbox and have it tiled all over the listbox. Even in case i resize my form (the listbox will also be resized), the image should get tiled smoothly, leaving no white space behind on the listbox.
Does anyone have a clue as to how can it be done?
Thanks a lot in advance...
ASKER
hmmm... ok, then how do i do it using TListView?
Sorry. It was a mistake. I think what TListView has a BackGroundImage property.
May be easy to create a new Component whith own draw code.
It must look like this:
On WM_ERASEBKGND :
r := ClientRect;
rgn := CreateRectRgnIndirect(r);
SelectClipRgn(Canvas.Handl e, rgn);
Canvas.StretchDraw(r, FPicture.Bitmap);
SelectClipRgn(Sender.Canva s.Handle, 0);
DeleteObject(rgn);
On WM_DRAWITEM:
Flags := DrawTextBiDiModeFlags(DT_S INGLELINE or DT_VCENTER or DT_NOPREFIX);
SetBkMode(Canvas.Handle, TRANSPARENT);
DrawText(Canvas.Handle, PChar(Text), Length(Text), Rect, Flags);
May be easy to create a new Component whith own draw code.
It must look like this:
On WM_ERASEBKGND :
r := ClientRect;
rgn := CreateRectRgnIndirect(r);
SelectClipRgn(Canvas.Handl
Canvas.StretchDraw(r, FPicture.Bitmap);
SelectClipRgn(Sender.Canva
DeleteObject(rgn);
On WM_DRAWITEM:
Flags := DrawTextBiDiModeFlags(DT_S
SetBkMode(Canvas.Handle, TRANSPARENT);
DrawText(Canvas.Handle, PChar(Text), Length(Text), Rect, Flags);
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
don't forget to free the LbBmp in your form's OnDestroy
ASKER
Hello Slick812,
Thanks a lot... Your works wonderfully with TListBox.
However, there is a little problem when i use it with TLMDListBox. I have 4 columns in it. Using your code, all the items appear in 1 column with semi-colon seperated list. I'll try to depict it...
This is what i should get:
Col1 Col2 Col3 Col4
---- ---- ---- ----
Itm11 Itm12 Itm13 Itm14
Itm21 Itm22 Itm23 Itm24
Itm31 Itm32 Itm33 Itm34
..... ..... ..... .....
and this is what i m getting:
Col1 Col2 Col3 Col4
---- ---- ---- ----
Itm11;Itm12;Itm13;Itm14
Itm21;Itm22;Itm23;Itm24
Itm31;Itm32;Itm33;Itm34
.......................
the resizing of columns do not have any effect on the items in the LMDlistbox.
i'll be very grateful if u could help in this as well.
Thanks again!
Thanks a lot... Your works wonderfully with TListBox.
However, there is a little problem when i use it with TLMDListBox. I have 4 columns in it. Using your code, all the items appear in 1 column with semi-colon seperated list. I'll try to depict it...
This is what i should get:
Col1 Col2 Col3 Col4
---- ---- ---- ----
Itm11 Itm12 Itm13 Itm14
Itm21 Itm22 Itm23 Itm24
Itm31 Itm32 Itm33 Itm34
..... ..... ..... .....
and this is what i m getting:
Col1 Col2 Col3 Col4
---- ---- ---- ----
Itm11;Itm12;Itm13;Itm14
Itm21;Itm22;Itm23;Itm24
Itm31;Itm32;Itm33;Itm34
.......................
the resizing of columns do not have any effect on the items in the LMDlistbox.
i'll be very grateful if u could help in this as well.
Thanks again!
ASKER
actually i don't want to change the control if possible...
I'm not familar with the TLMDListBox component, is it a standard delphi component or an add On. You may look at the properties of the Columns, like width and when there is a single ";" in the items text then move the text draw over to the next column width to place the text at the right spot, deleting the ; so it will not show.
ASKER
No TLMDListBox isn't a standard component.
ok, i'll try what u have suggested but the columns are resizeable so i m not sure if that'll b the best way to do it. Thanks anyway...
ok, i'll try what u have suggested but the columns are resizeable so i m not sure if that'll b the best way to do it. Thanks anyway...
there should be a column width property somewhere, since the columns are resizable then it may be associated with the header, which I guess is a sub component?
ASKER
Hello, Slick812,
I didn't succeed with TLMDListBox so decided to change the component. But your code works beatifully with TListBox. Thank you very much.
Regards.
I didn't succeed with TLMDListBox so decided to change the component. But your code works beatifully with TListBox. Thank you very much.
Regards.
The simple way is to use the TListView component.