Autor Beitrag
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: So 21.05.06 17:47 
Hi,

ich wollt's mal ausprobieren, komme aber nicht weiter. Ich möchte in einem Listview ein Hintergrundbild einbauen (wie in dem Windows Explorer zB. die Lupe oder Note).

Habe schon verschiedenes ausprobiert ohne Erfolg. :cry: Die leztze Version meines Versuches sieht so aus:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
type
  TfrmMain = class(TForm)
    ListView1: TListView;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    LVOldWndProc: TWndMethod;
    procedure ListViewSetBKImage;
    procedure LVWindowProc(var Msg: TMessage);
  public
    { Public-Deklarationen }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

uses
  ShellAPI, CommCtrl, ComObj;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  ListViewSetBKImage;

  LVOldWndProc := ListView1.WindowProc;
  ListView1.WindowProc := LVWindowProc;
end;

procedure TfrmMain.ListViewSetBKImage;
var
  LVBkImg: TLVBkImage;
  FFilename: String;
  FTile: Boolean;
  FXOffsetPercent,
  FYOffsetPercent: Integer;
begin
  FFilename := 'C:\Windows\Angler.bmp';
  FTile := FALSE;
  FXOffsetPercent := 0;
  FYOffsetPercent := 0;

  if assigned(ListView1) and ListView1.HandleAllocated then
  begin
    if FFilename <> '' then
      LVBkImg.ulFlags := LVBKIF_SOURCE_URL
    else
      LVBkImg.ulFlags := LVBKIF_SOURCE_NONE;
    if FTile then
      LVBkImg.ulFlags := LVBkImg.ulFlags or LVBKIF_STYLE_TILE
    else
      LVBkImg.ulFlags := LVBkImg.ulFlags or LVBKIF_STYLE_NORMAL;

    LVBkImg.hbm := 0; // Bitmap.Handle (HBitmap)
    LVBkImg.pszImage := PChar(FFilename);
    LVBkImg.cchImageMax := Length(FFilename);
    LVBkImg.xOffsetPercent := FXOffsetPercent;
    LVBkImg.yOffsetPercent := FYOffsetPercent;
    ListView_SetBkImage(ListView1.Handle, @LVBkImg);

    //ListView_SetBKColor(ListView1.Handle,CLR_NONE);
  end;
end;

procedure TfrmMain.LVWindowProc(var Msg: TMessage);
begin
  Case Msg.Msg of
    WM_ERASEBKGND: DefaultHandler(Msg);
    else LVOldWndProc(Msg);
  end;
end;


Die selbe Frage gibt es auch hier: DP
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mo 22.05.06 07:19 
Um ehrlich zu sein kannte ich die Funktion noch garnicht. Ich hätte das so gemacht, wie in der mitgelieferten CustomDraw Delphi Demo. Darin wird in einem TTreeView das OnCustomDrawEreignis benutzt und das Bild selbst auf den Canvas gemalt.
turboPASCAL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Mo 22.05.06 10:35 
user profile icondigi_c hat folgendes geschrieben:
Um ehrlich zu sein kannte ich die Funktion noch gar nicht.
Was windows kann, muss (man mit) Delphi auch können. ;)

user profile icondigi_c hat folgendes geschrieben:
Ich hätte das so gemacht, wie in der mitgelieferten CustomDraw Delphi Demo. Darin wird in einem TTreeView das OnCustomDrawEreignis benutzt und das Bild selbst auf den Canvas gemalt.
Leider hat das Demo auch so seine Tücken. Mit der o. genannten Funktion soll/kann das dann so dargestellt werden (Bild).
Einloggen, um Attachments anzusehen!
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mo 22.05.06 12:00 
Ja so hatte ich dich auch verstanden, vielleicht wäre TVirtualTreeview was?
turboPASCAL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Mi 24.05.06 09:58 
Nein, ich wollte nicht Komponenten verwenden. Irgendwie muss das aber zu machen sein...

Ich habe mal ein TestPrg gemacht dort funktioniert es schon bedingt. -> hier