Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#5
  Alt 20. Jan 2003, 08:45
So´n Quark, Daniel B. Nichts für ungut, dennoch.

Der Fehler bezieht sich darauf, dass bestimmte "Common Controls" der älteren Delphi-Versionen (bis einschließlich D6, würde ich mal behaupten) unter bestimmten Umständen Fehler verursachen, wenn man sie mit der Manifest-Datei von WinXP im neuen Glanz "erstrahlen" lassen will. Im Fall der Listview wäre das im "vsReport"-Modus.

Die mir bekannten XP-Komponenten funktionieren alle nach dem selben Prinzip: sie stellen dem Programm die besagte XML-Manifest-Datei zur Verfügung; ob nun extern oder in den Resourcen.

Da erst Delphi 7 offiziell mit einer kompletten WinXP-Unterstützung ausgewiesen wurde, müssen IMHO also alle älteren Versionen manuell fit gemacht werden. Das hat mit den Komponenten, wenn es denn um den LUNA-Stil von WinXP geht, nichts zu tun.


@Scorpion: Keine Ahnung, wo dein Fehler liegt, aber prinzipiell steht alles im Kommentar drin. Unit "ComCtrl.pas" öffnen -> die genannte Prozedur suchen -> die auskommentierte Zeile suchen, auskommtentieren und dann das reinschreiben, was die Schweizer angeben -> die Unit kompilieren und das Programm mit einer Listview testen ...
Vielleicht hätte man besser die komplette Prozedur zeigen sollen; nicht nur den Auszug, das könnte ein Grund für die Verwirrung sein. Meine sieht übrigens so aus:
Code:
procedure TCustomListView.UpdateColumn(AnIndex: Integer);
const IAlignment: array[Boolean, TAlignment] of LongInt =
  ((LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_CENTER),
   (LVCFMT_RIGHT, LVCFMT_LEFT, LVCFMT_CENTER));
var
  Column: TLVColumn;
  AAlignment: TAlignment;
begin
  if HandleAllocated then
    with Column, Columns.Items[AnIndex] do
    begin
      mask := LVCF_TEXT or LVCF_FMT or LVCF_IMAGE;
      iImage := FImageIndex;
      pszText := PChar(Caption);
      AAlignment := Alignment;
      if Index <> 0 then
        fmt := IAlignment[UseRightToLeftAlignment, AAlignment]
      else fmt := LVCFMT_LEFT;
      if FImageIndex <> -1 then
        fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES
// WinXP patch
      else
        mask := mask and not (LVCF_IMAGE);
      if WidthType > ColumnTextWidth then
      begin
        mask := mask or LVCF_WIDTH;
        cx := FWidth;
        ListView_SetColumn(Handle, Columns[AnIndex].FOrderTag, Column);
      end
      else begin
        ListView_SetColumn(Handle, Columns[AnIndex].FOrderTag, Column);
      if ViewStyle = vsList then
          ListView_SetColumnWidth(Handle, -1, WidthType)
      else if (ViewStyle = vsReport) and not OwnerData then
          ListView_SetColumnWidth(Handle, Columns[AnIndex].FOrderTag, WidthType);
      end;
    end;
end;
  Mit Zitat antworten Zitat