AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie bekomm ich eine Grafik in den Spaltenkopf?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie bekomm ich eine Grafik in den Spaltenkopf?

Ein Thema von schitho · begonnen am 23. Dez 2002 · letzter Beitrag vom 9. Jan 2003
Antwort Antwort
Benutzerbild von schitho
schitho

Registriert seit: 14. Dez 2002
Ort: Wien
47 Beiträge
 
Delphi 7 Professional
 
#1

Wie bekomm ich eine Grafik in den Spaltenkopf?

  Alt 23. Dez 2002, 15:31
Hi,

schön langsam und Dank Eurer Hilfe funktioniert das Einlesen eines Verzeichnisses in eine ListView.

Dabei verwende ich folgenden Code http://www.delphi-fundgrube.de/files/listview.txt

Nun hab ich auch schon eine Sortier-Routine eingebaut. Funktioniert super.

Allerdings würde ich gerne im Spaltenkopf je nach Sortierung eine kleine Grafik (kleines Dreieck) anzeigen.

Dies sollte so funktionieren:

Code:
 ListView.Columns.Items[0].ImageIndex:=1;
Dabei muss aber die Eigenschaft SmallImages von ListView mit einer ImageList verbunden sein.

Und genau da liegt nun das Problem, weil CreateImage (siehe http://www.delphi-fundgrube.de/files/listview.txt) ebenfalls SmallImages verwendet.

Was kann ich nun machen, um sowohl die Grafiken zu den einzelnen Dateien im ListView, als auch mein kleines Dreieck im Spaltenkopf angezeigt zu bekommen?

Gruß
Thomas
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 23. Dez 2002, 15:56
Moin Thomas,

es hindert Dich niemand daran die ImageList entsprechend zu erweitern.
Für das jeweils angezeigte Bild ist dann ja nur der entsprechende Index aus der Liste zu verwenden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3
  Alt 23. Dez 2002, 16:08
Und da man die System-ImageList nicht selbst verändern soll, kann man diese in eine eigene kopieren.
Delphi-Quellcode:
procedure Createimages;
var
  SysIL : uint;
  SFI : TSHFileInfo;
  SysSmallImages, SysLargeImages: TImageList;
  i: Integer;
begin
  SysLargeImages := TImageList.Create(MainForm);
  SysSmallImages := TImageList.Create(MainForm);
  try
    SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
    if SysIL <> 0 then begin
      SysLargeImages.Handle := SysIL;
      SysLargeImages.ShareImages := TRUE;
    end;
    SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
    if SysIL <> 0 then begin
      SysSmallImages.Handle := SysIL;
      SysSmallImages.ShareImages := TRUE;
    end;

    for i := MainForm.SmallImages.Count - 1 downto 2 {Anzahl der verbleibenden Images} do
      MainForm.SmallImages.Delete(i);
    MainForm.SmallImages.AddImages(SysSmallImages);

    for i := MainForm.LargeImages.Count - 1 downto 2 {Anzahl der verbleibenden Images} do
      MainForm.LargeImages.Delete(i);
    MainForm.LargeImages.AddImages(SysLargeImages);
  finally
    SysLargeImages.Free; // wird nicht mehr benötigt
    SysSmallImages.Free; // wird nicht mehr benötigt
  end;
end;
Bei diesem Code gehe ich davon aus, das zwei TImageList Komponenten SmallImages und LargeImages auf dem Formular liegen und mit der ListView verknüpft sind.

Und beim Hinzufügen der ListItems müssen die festen Images natürlich berücksichtigt werden:
NewItem.ImageIndex := Info.IIcon + 2 {Anzahl der festen Images};
  Mit Zitat antworten Zitat
Benutzerbild von schitho
schitho

Registriert seit: 14. Dez 2002
Ort: Wien
47 Beiträge
 
Delphi 7 Professional
 
#4
  Alt 23. Dez 2002, 20:38
Danke für Deine Antwort und den Source-Code.

Funktioniert unter W98 einwandfrei. Unter W2000 wird allerdings vor den Dateinamen kein Icon oder nur ein nicht dazupassendes angezeigt.

So lese ich die einzelnen Dateien ein:

Code:
procedure VerzeichnisEinlesen(VerzName, filter:string);
var NewItem : TListItem;
    Info   : TSHFileInfo;
    SR     : TSearchRec;
    dgroesse: String; // Dateigröße-Text
    dsize  : Integer; // Dateigröße
begin
  if VerzName[length(VerzName)]<>'\' then
    VerzName:=VerzName+'\';
  if filter='' then filter:='*.*';
  with FormShredExplor do begin
    ListView.Items.Clear;
    if FindFirst(VerzName+filter,faAnyFile-faDirectory   ,SR)=0 then begin
      repeat
        if (length(SR.Name)>0) and (SR.Name[1]<>'.') then begin
          NewItem:=ListView.Items.Add;
          NewItem.Caption:=SR.Name;
          SHGetFileInfo(PChar(VerzName+SR.Name),0,Info,SizeOf(TSHFileInfo),SHGFI_SYSIconIndex or SHGFI_TYPENAME);
          NewItem.ImageIndex:=Info.IIcon+2;
          dSize:=Round((SR.Size/1024)+0.5);
          dGroesse:=IntToStr(dSize);
          if Length(dgroesse)>3 then Insert('.',dGroesse,Length(dgroesse)-2);
          if Length(dgroesse)>7 then Insert('.',dGroesse,Length(dgroesse)-6);
          NewItem.SubItems.Add(dGroesse+ ' KB');
          NewItem.SubItems.Add(Info.szTypeName);
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
  end;
end;
Was mach ich falsch????

Gruß

Thomas
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 24. Dez 2002, 01:12
Moin Thomas,

also wenn Du schon so fragst

Im Ernst, zu Deinem eigentlichen Problem kann ich Dir leider jetzt nicht helfen, mir ist allerdings trotzdem noch ein Fehler aufgefallen:

Die Abfrage (SR.Name[1]<>'.') ist falsch, auch wenn sie meist so funktioniert wie gedacht.

Es muss explizit auf (SR.Name <> '.') and (SR.Name <> '..') abgefragt werden, denn ein Punkt zu Beginn eines Datei- oder Verzeichnisnamens ist erlaubt, und kann erzeugt werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von schitho
schitho

Registriert seit: 14. Dez 2002
Ort: Wien
47 Beiträge
 
Delphi 7 Professional
 
#6
  Alt 9. Jan 2003, 22:47
Spät aber doch: Ein Nachtrag. 8)

Das mit der Grafik im Spaltenkopf führt auch unter W98 zu einer fehlerhaften Anzeige. Allerdings viel seltener. Dadurch ist es mir auch nicht gleich aufgefallen.

Offensichtlich führt das Hinzufügen von anderen Icons in die Imagliste zu einem Fehlverhalten (sowohl unter W98 als auch unter W2000).

Hab daher jetzt einfach die Grafik in den Spaltenköpfen weggelassen. Nun funktioniert es wirklich fehlerfrei.

Oder habt ihr noch eine Idee, wie es doch funktionieren könnt???

Gruß
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz