From: <ah...@us...> - 2009-10-02 10:41:00
|
Revision: 12536 http://jvcl.svn.sourceforge.net/jvcl/?rev=12536&view=rev Author: ahuser Date: 2009-10-02 10:40:53 +0000 (Fri, 02 Oct 2009) Log Message: ----------- - Style cleaning (variable names) - Speed optimizations - added missing try/finally Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2009-10-02 09:36:42 UTC (rev 12535) +++ trunk/jvcl/run/JvListView.pas 2009-10-02 10:40:53 UTC (rev 12536) @@ -402,7 +402,7 @@ destructor Destroy; override; procedure ColClick(Column: TListColumn); override; procedure SaveToStrings(Strings: TStrings; Separator: Char); - procedure LoadFromStrings(Strings: TStrings; Separator: Char); + procedure LoadFromStrings(Strings: TStrings; Separator: Char; ClearItems: Boolean = False); procedure SaveToFile(FileName: string; ForceOldStyle: Boolean = False); procedure LoadFromFile(FileName: string); procedure SaveToStream(Stream: TStream; ForceOldStyle: Boolean = False); @@ -422,8 +422,7 @@ function GetInsertMarkPosition(const X, Y: Integer; var ItemIndex: Integer; var Position: TJvInsertMarkPosition): Boolean; property ItemPopup[Item: TListItem]: TPopupMenu read GetItemPopup write SetItemPopup; - procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; - AHeight: Integer); override; + procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; procedure SetFocus; override; published property AutoSelect: Boolean read FAutoSelect write FAutoSelect default True; @@ -1268,17 +1267,16 @@ var I, J, K: Integer; Buf: array [0..100] of Byte; - st: AnsiString; - ch1, checks: Boolean; - t: TListItem; + S: AnsiString; + ch1, Checks: Boolean; + ListItem: TListItem; begin I := Stream.Position; - t := nil; - st := ''; - Items.Clear; + ListItem := nil; + S := ''; if Assigned(FOnLoadProgress) then FOnLoadProgress(Self, 0, Stream.Size - Start); - checks := False; + Checks := False; ch1 := CheckBoxes; while I < Stream.Size do begin @@ -1291,30 +1289,30 @@ begin while (K < J) and (Buf[K] <> 0) and (Buf[K] <> 1) do begin - st := st + AnsiChar(Buf[K]); + S := S + AnsiChar(Buf[K]); Inc(K); end; if K < J then begin - if t <> nil then - t.SubItems.Add(string(st)) + if ListItem <> nil then + ListItem.SubItems.Add(string(S)) else begin - t := Items.Add; - checks := checks or (st[1] = 'T'); - t.Checked := st[1] = 'T'; - st := Copy(st, 2, Length(st)); - t.Caption := string(st); + ListItem := Items.Add; + Checks := Checks or (S[1] = 'T'); + ListItem.Checked := S[1] = 'T'; + S := Copy(S, 2, Length(S)); + ListItem.Caption := string(S); end; if Buf[K] = 1 then - t := nil; - st := ''; + ListItem := nil; + S := ''; end; Inc(K); end; end; - if (not ch1) and (not checks) then + if not ch1 and not Checks then CheckBoxes := False; end; @@ -1322,62 +1320,56 @@ const LV_HASCHECKBOXES = $80; var - Count, I, J: SmallInt; + Count: SmallInt; + I, J: Integer; Options: Byte; UTF8St: UTF8String; - st: string; - t: TListItem; + S: string; + ListItem: TListItem; Buf: array of AnsiChar; begin - try - Self.Items.BeginUpdate; - Self.Items.Clear; - Self.Items.EndUpdate; + Stream.Read(Options, SizeOf(Options)); + CheckBoxes := (Options and LV_HASCHECKBOXES) = LV_HASCHECKBOXES; - Stream.Read(Options, SizeOf(Options)); - CheckBoxes := (Options and LV_HASCHECKBOXES) = LV_HASCHECKBOXES; + //Read all lines + while Stream.Position < Stream.Size do + begin + Stream.Read(Count, SizeOf(Count)); - //Read all lines - while Stream.Position < Stream.Size do + //statistics + if Assigned(FOnLoadProgress) then + FOnLoadProgress(Self, Stream.Position, Stream.Size - Start); + + //Read all columns + ListItem := Self.Items.Add; + for I := 1 to Count do begin - Stream.Read(Count, SizeOf(Count)); + if I = 1 then + begin + Stream.Read(Options, SizeOf(Options)); + if CheckBoxes then + ListItem.Checked := Boolean(Options and Ord(True)); + end; - //statistics - if Assigned(FOnLoadProgress) then - FOnLoadProgress(Self, Stream.Position, Stream.Size - Start); + Stream.Read(J, SizeOf(J)); - //Read all columns - t := Self.Items.Add; - for I := 1 to Count do + //Read the string + if Length(Buf) < J then + SetLength(Buf, J); + if J > 0 then begin - if I = 1 then - begin - Stream.Read(Options, SizeOf(Options)); - if CheckBoxes then - t.Checked := Boolean(Options and Ord(True)); - end; + Stream.Read(Buf, J); + SetString(UTF8St, PAnsiChar(Buf[0]), J); + S := UTF8ToString(UTF8St); + end + else + S := ''; - Stream.Read(J, SizeOf(J)); - - //Read the string - if Length(Buf) < J then - SetLength(Buf, J); - if J > 0 then - begin - Stream.Read(Buf, J); - SetString(UTF8St, PAnsiChar(Buf[0]), J); - st := UTF8ToString(UTF8St); - end - else - st := ''; - - if I = 1 then - t.Caption := st - else - t.SubItems.Add(st); - end; + if I = 1 then + ListItem.Caption := S + else + ListItem.SubItems.Add(S); end; - except end; end; @@ -1387,13 +1379,20 @@ Start := Stream.Position; Stream.Read(Buf, 10); Buf[10] := #0; - if Buf <> cLISTVIEW01 then - begin - Stream.Position := Start; - LoadOldStyle(Stream); - end - else - LoadNewStyle(Stream); + + Items.BeginUpdate; + try + Items.Clear; + if Buf <> cLISTVIEW01 then + begin + Stream.Position := Start; + LoadOldStyle(Stream); + end + else + LoadNewStyle(Stream); + finally + Items.EndUpdate; + end; end; procedure TJvListView.SaveToFile(FileName: string; ForceOldStyle: Boolean); @@ -1414,7 +1413,7 @@ var I, J, K: Integer; b, c, d, e: Byte; - st: AnsiString; + S: AnsiString; Buf: array [0..1000] of Byte; begin b := 0; @@ -1427,10 +1426,10 @@ begin if Assigned(FOnSaveProgress) then FOnSaveProgress(Self, I + 1, Self.Items.Count); - st := AnsiString(Self.Items[I].Caption); - for K := 1 to Length(st) do - Buf[K - 1] := Byte(st[K]); - K := Length(st); + S := AnsiString(Self.Items[I].Caption); + for K := 1 to Length(S) do + Buf[K - 1] := Byte(S[K]); + K := Length(S); //write checked,not if Self.Items[I].Checked then Stream.Write(d, 1) @@ -1444,18 +1443,18 @@ Stream.Write(b, 1); for J := 0 to Self.Items[I].SubItems.Count - 2 do begin - st := AnsiString(Self.Items[I].SubItems[J]); - for K := 1 to Length(st) do - Buf[K - 1] := Byte(st[K]); - K := Length(st); + S := AnsiString(Self.Items[I].SubItems[J]); + for K := 1 to Length(S) do + Buf[K - 1] := Byte(S[K]); + K := Length(S); Stream.Write(Buf, K); Stream.Write(b, 1); end; J := Self.Items[I].SubItems.Count - 1; - st := AnsiString(Self.Items[I].SubItems[J]); - for K := 1 to Length(st) do - Buf[K - 1] := Byte(st[K]); - K := Length(st); + S := AnsiString(Self.Items[I].SubItems[J]); + for K := 1 to Length(S) do + Buf[K - 1] := Byte(S[K]); + K := Length(S); Stream.Write(Buf, K); Stream.Write(c, 1); end; @@ -1486,10 +1485,9 @@ begin Buf := cLISTVIEW01; Stream.Write(Buf, 10); + Options := 0; if CheckBoxes then - Options := LV_HASCHECKBOXES - else - Options := 0; + Options := LV_HASCHECKBOXES; Stream.Write(Options, SizeOf(Options)); for I := 0 to Items.Count - 1 do with Items[I] do @@ -1529,50 +1527,30 @@ end; end; -procedure TJvListView.LoadFromStrings(Strings: TStrings; Separator: Char); +procedure TJvListView.LoadFromStrings(Strings: TStrings; Separator: Char; ClearItems: Boolean); var I: Integer; Start, Stop, TmpStart: PChar; TmpStr: string; - Li: TListItem; + ListItem: TListItem; begin - for I := 0 to Strings.Count - 1 do - begin - Li := nil; - Start := PChar(Strings[I]); - Stop := Start + Length(Strings[I]); - if (Start <> Stop) and (Start <> nil) and (Start^ <> #0) then + Items.BeginUpdate; + try + if ClearItems then + Items.Clear; + + for I := 0 to Strings.Count - 1 do begin - if Start^ = '"' then + ListItem := nil; + Start := PChar(Strings[I]); + Stop := Start + Length(Strings[I]); + if (Start <> Stop) and (Start <> nil) and (Start^ <> #0) then begin - Li := Items.Add; - TmpStr := AnsiExtractQuotedStr(Start, '"'); // this moves the PChar pointer - Li.Caption := TmpStr; - end - else - begin - TmpStart := Start; - while Start^ <> Separator do - begin - if Start = Stop then - Break; - Inc(Start); - end; - SetString(TmpStr, TmpStart, Start - TmpStart); - Li := Items.Add; - Li.Caption := TmpStr; - end; - end; - if Li <> nil then - begin - while (Start <> Stop) and (Start <> nil) and (Start^ <> #0) do - begin - while Start^ = Separator do - Inc(Start); if Start^ = '"' then begin + ListItem := Items.Add; TmpStr := AnsiExtractQuotedStr(Start, '"'); // this moves the PChar pointer - Li.SubItems.Add(TmpStr); + ListItem.Caption := TmpStr; end else begin @@ -1584,10 +1562,38 @@ Inc(Start); end; SetString(TmpStr, TmpStart, Start - TmpStart); - Li.SubItems.Add(TmpStr); + ListItem := Items.Add; + ListItem.Caption := TmpStr; end; end; + if ListItem <> nil then + begin + while (Start <> Stop) and (Start <> nil) and (Start^ <> #0) do + begin + while Start^ = Separator do + Inc(Start); + if Start^ = '"' then + begin + TmpStr := AnsiExtractQuotedStr(Start, '"'); // this moves the PChar pointer + ListItem.SubItems.Add(TmpStr); + end + else + begin + TmpStart := Start; + while Start^ <> Separator do + begin + if Start = Stop then + Break; + Inc(Start); + end; + SetString(TmpStr, TmpStart, Start - TmpStart); + ListItem.SubItems.Add(TmpStr); + end; + end; + end; end; + finally + Items.EndUpdate; end; end; @@ -1596,13 +1602,10 @@ S: TStringList; begin S := TStringList.Create; - Items.BeginUpdate; try - Items.Clear; S.LoadFromFile(FileName); - LoadFromStrings(S, Separator); + LoadFromStrings(S, Separator, True); finally - Items.EndUpdate; S.Free; end; end; @@ -1612,12 +1615,10 @@ S: TStringList; begin S := TStringList.Create; - Items.BeginUpdate; try SaveToStrings(S, Separator); S.SaveToFile(FileName); finally - Items.EndUpdate; S.Free; end; end; @@ -1627,9 +1628,12 @@ I: Integer; begin Items.BeginUpdate; - for I := 0 to Items.Count - 1 do - Items[I].Selected := not Items[I].Selected; - Items.EndUpdate; + try + for I := 0 to Items.Count - 1 do + Items[I].Selected := not Items[I].Selected; + finally + Items.EndUpdate; + end; end; procedure TJvListView.UnselectAll; @@ -1637,9 +1641,12 @@ I: Integer; begin Items.BeginUpdate; - for I := 0 to Items.Count - 1 do - Items[I].Selected := False; - Items.EndUpdate; + try + for I := 0 to Items.Count - 1 do + Items[I].Selected := False; + finally + Items.EndUpdate; + end; end; procedure TJvListView.KeyUp(var Key: Word; Shift: TShiftState); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2009-10-25 09:48:47
|
Revision: 12568 http://jvcl.svn.sourceforge.net/jvcl/?rev=12568&view=rev Author: ahuser Date: 2009-10-25 09:48:40 +0000 (Sun, 25 Oct 2009) Log Message: ----------- Mantis #4984: Delphi 2009 crash in TJvListView.LoadFromStream Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2009-10-22 08:50:56 UTC (rev 12567) +++ trunk/jvcl/run/JvListView.pas 2009-10-25 09:48:40 UTC (rev 12568) @@ -946,7 +946,7 @@ //=== { TJvListView } ======================================================== const - cLISTVIEW01 = 'LISTVIEW01'; // 10 chars + cLISTVIEW01: PAnsiChar = 'LISTVIEW01'; // 10 chars constructor TJvListView.Create(AOwner: TComponent); begin @@ -1320,8 +1320,8 @@ const LV_HASCHECKBOXES = $80; var - Count: SmallInt; - I, J: Integer; + Count, J: SmallInt; + I: Integer; Options: Byte; UTF8St: UTF8String; S: string; @@ -1358,8 +1358,8 @@ SetLength(Buf, J); if J > 0 then begin - Stream.Read(Buf, J); - SetString(UTF8St, PAnsiChar(Buf[0]), J); + Stream.Read(Buf[0], J); + SetString(UTF8St, PAnsiChar(@Buf[0]), J); S := UTF8ToString(UTF8St); end else @@ -1383,7 +1383,7 @@ Items.BeginUpdate; try Items.Clear; - if Buf <> cLISTVIEW01 then + if StrComp(Buf, cLISTVIEW01) <> 0 then begin Stream.Position := Start; LoadOldStyle(Stream); @@ -1411,7 +1411,7 @@ procedure SaveOldStyle(Stream: TStream); var - I, J, K: Integer; + I, SubItemIndex, K: Integer; b, c, d, e: Byte; S: AnsiString; Buf: array [0..1000] of Byte; @@ -1441,17 +1441,17 @@ else begin Stream.Write(b, 1); - for J := 0 to Self.Items[I].SubItems.Count - 2 do + for SubItemIndex := 0 to Self.Items[I].SubItems.Count - 2 do begin - S := AnsiString(Self.Items[I].SubItems[J]); + S := AnsiString(Self.Items[I].SubItems[SubItemIndex]); for K := 1 to Length(S) do Buf[K - 1] := Byte(S[K]); K := Length(S); Stream.Write(Buf, K); Stream.Write(b, 1); end; - J := Self.Items[I].SubItems.Count - 1; - S := AnsiString(Self.Items[I].SubItems[J]); + SubItemIndex := Self.Items[I].SubItems.Count - 1; + S := AnsiString(Self.Items[I].SubItems[SubItemIndex]); for K := 1 to Length(S) do Buf[K - 1] := Byte(S[K]); K := Length(S); @@ -1478,13 +1478,11 @@ end; var - Buf: array [0..100] of AnsiChar; I: Integer; J: SmallInt; Options, IsChecked: Byte; begin - Buf := cLISTVIEW01; - Stream.Write(Buf, 10); + Stream.Write(cLISTVIEW01[0], 10); Options := 0; if CheckBoxes then Options := LV_HASCHECKBOXES; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2010-10-08 13:16:15
|
Revision: 12854 http://jvcl.svn.sourceforge.net/jvcl/?rev=12854&view=rev Author: obones Date: 2010-10-08 13:16:08 +0000 (Fri, 08 Oct 2010) Log Message: ----------- Mantis 5011: The groups management has been added in D2009 and is apparently better than the one from us Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2010-10-08 13:04:11 UTC (rev 12853) +++ trunk/jvcl/run/JvListView.pas 2010-10-08 13:16:08 UTC (rev 12854) @@ -55,7 +55,9 @@ type TJvListView = class; + {$IFNDEF RTL200_UP} TJvListViewGroup = class; + {$ENDIF !RTL200_UP} EJvListViewError = EJVCLException; // Mantis 980: new type for Groups @@ -74,7 +76,9 @@ // TJvSortMethod = (smAutomatic, smAlphabetic, smNonCaseSensitive, smNumeric, smDate, smTime, smDateTime, smCurrency); TJvOnProgress = procedure(Sender: TObject; Progression, Total: Integer) of object; + {$IFNDEF RTL200_UP} TJvListViewCompareGroupEvent = procedure(Sender: TObject; Group1, Group2: TJvListViewGroup; var Compare: Integer) of object; + {$ENDIF !RTL200_UP} TJvListItems = class(TListItems, IJvAppStorageHandler, IJvAppStoragePublishedProps) private @@ -172,6 +176,7 @@ property Items[Index: Integer] : TJvListExtendedColumn read GetItem write SetItem; default; end; + {$IFNDEF RTL200_UP} TJvListViewGroup = class(TCollectionItem) private FHeader: WideString; @@ -281,6 +286,7 @@ // Note that BorderColor is currently ignored by the Win32 API property BorderColor: TJvGroupsPropertiesBorderColors read FBorderColor write SetBorderColor; end; + {$ENDIF !RTL200_UP} TJvViewStyles = set of TJvViewStyle; @@ -338,10 +344,12 @@ FExtendedColumns: TJvListExtendedColumns; FSavedExtendedColumns: TJvListExtendedColumns; FViewStylesItemBrush: TJvViewStyles; // use for Create/DestroyWnd process + {$IFNDEF RTL200_UP} FGroupView: Boolean; FGroups: TJvListViewGroups; FGroupsProperties: TJvGroupsProperties; FOnCompareGroups: TJvListViewCompareGroupEvent; + {$ENDIF !RTL200_UP} FViewStyle: TJvViewStyle; FTileViewProperties: TJvTileViewProperties; FInsertMarkColor: TColor; @@ -349,9 +357,11 @@ FSettingHeaderImagePosition: Boolean; procedure DoPictureChange(Sender: TObject); procedure SetPicture(const Value: TPicture); + {$IFNDEF RTL200_UP} procedure SetGroupView(const Value: Boolean); procedure SetGroups(const Value: TJvListViewGroups); procedure SetGroupsProperties(const Value: TJvGroupsProperties); + {$ENDIF !RTL200_UP} procedure SetTileViewProperties(const Value: TJvTileViewProperties); procedure SetInsertMarkColor(const Value: TColor); procedure SetHeaderImagePosition(const Value: TJvHeaderImagePosition); @@ -360,11 +370,13 @@ procedure WMAutoSelect(var Msg: TMessage); message WM_AUTOSELECT; procedure SetExtendedColumns(const Value: TJvListExtendedColumns); procedure SetViewStylesItemBrush(const Value: TJvViewStyles); + {$IFNDEF RTL200_UP} function DoCompareGroups(Group1, Group2: TJvListViewGroup): Integer; + procedure GroupsPropertiesChange(Sender: TObject); + procedure LoadGroupsProperties; + {$ENDIF !RTL200_UP} procedure TileViewPropertiesChange(Sender: TObject); - procedure GroupsPropertiesChange(Sender: TObject); procedure LoadTileViewProperties; - procedure LoadGroupsProperties; protected function CreateListItem: TListItem; override; function CreateListItems: TListItems; override; @@ -435,9 +447,11 @@ property SortOnClick: Boolean read FSortOnClick write FSortOnClick default True; property SmallImages write SetSmallImages; property AutoClipboardCopy: Boolean read FAutoClipboardCopy write FAutoClipboardCopy default True; + {$IFNDEF RTL200_UP} property GroupView: Boolean read FGroupView write SetGroupView default False; property Groups: TJvListViewGroups read FGroups write SetGroups; property GroupsProperties: TJvGroupsProperties read FGroupsProperties write SetGroupsProperties; + {$ENDIF !RTL200_UP} property TileViewProperties: TJvTileViewProperties read FTileViewProperties write SetTileViewProperties; property InsertMarkColor: TColor read FInsertMarkColor write SetInsertMarkColor default clBlack; @@ -449,7 +463,9 @@ property OnLoadProgress: TJvOnProgress read FOnLoadProgress write FOnLoadProgress; property OnSaveProgress: TJvOnProgress read FOnSaveProgress write FOnSaveProgress; property OnVerticalScroll: TNotifyEvent read FOnVerticalScroll write FOnVerticalScroll; + {$IFNDEF RTL200_UP} property OnCompareGroups: TJvListViewCompareGroupEvent read FOnCompareGroups write FOnCompareGroups; + {$ENDIF !RTL200_UP} property OnMouseEnter; property OnMouseLeave; property OnParentColorChange; @@ -966,19 +982,25 @@ FViewStylesItemBrush := ALL_VIEW_STYLES; FExtendedColumns := TJvListExtendedColumns.Create(Self); FSavedExtendedColumns := TJvListExtendedColumns.Create(Self); + {$IFNDEF RTL200_UP} FGroups := TJvListViewGroups.Create(Self); FGroupsProperties := TJvGroupsProperties.Create; + {$ENDIF !RTL200_UP} FTileViewProperties := TJvTileViewProperties.Create; FTileViewProperties.OnChange := TileViewPropertiesChange; + {$IFNDEF RTL200_UP} FGroupsProperties.OnChange := GroupsPropertiesChange; + {$ENDIF !RTL200_UP} end; destructor TJvListView.Destroy; begin + {$IFNDEF RTL200_UP} FGroupsProperties.Free; + FGroups.Free; + {$ENDIF !RTL200_UP} FTileViewProperties.Free; - FGroups.Free; FExtendedColumns.Free; FSavedExtendedColumns.Free; @@ -1756,12 +1778,16 @@ // Get the values from the newly created list view LoadTileViewProperties; + {$IFNDEF RTL200_UP} LoadGroupsProperties; + {$ENDIF !RTL200_UP} FInsertMarkColor := SendMessage(Handle, LVM_GETINSERTMARKCOLOR, 0, 0); + {$IFNDEF RTL200_UP} // Force a change from True to False so that InsertMarks work correctly. SendMessage(Handle, LVM_ENABLEGROUPVIEW, Integer(not FGroupView), 0); SendMessage(Handle, LVM_ENABLEGROUPVIEW, Integer(FGroupView), 0); + {$ENDIF !RTL200_UP} end; procedure TJvListView.UpdateHeaderImages(HeaderHandle: Integer); @@ -2151,6 +2177,7 @@ FPicture.Assign(Value); end; +{$IFNDEF RTL200_UP} procedure TJvListView.SetGroupView(const Value: Boolean); begin if FGroupView <> Value then @@ -2169,6 +2196,7 @@ begin FGroupsProperties.Assign(Value); end; +{$ENDIF !RTL200_UP} procedure TJvListView.SetTileViewProperties(const Value: TJvTileViewProperties); begin @@ -2294,6 +2322,7 @@ end; end; +{$IFNDEF RTL200_UP} function TJvListView.DoCompareGroups(Group1, Group2: TJvListViewGroup): Integer; begin if Assigned(OnCompareGroups) then @@ -2301,6 +2330,7 @@ else Result := Group2.GroupId - Group1.GroupId; end; +{$ENDIF !RTL200_UP} procedure TJvListView.TileViewPropertiesChange(Sender: TObject); var @@ -2319,6 +2349,7 @@ end; end; +{$IFNDEF RTL200_UP} procedure TJvListView.GroupsPropertiesChange(Sender: TObject); var Infos: TLVGROUPMETRICS; @@ -2342,17 +2373,21 @@ SendMessage(Handle, LVM_SETGROUPMETRICS, 0, LPARAM(@Infos)); end; end; +{$ENDIF !RTL200_UP} procedure TJvListView.LoadTileViewProperties; begin TileViewProperties.LoadFromList(Self); end; +{$IFNDEF RTL200_UP} procedure TJvListView.LoadGroupsProperties; begin GroupsProperties.LoadFromList(Self); end; +{$ENDIF !RTL200_UP} +{$IFNDEF RTL200_UP} { TJvListViewGroup } procedure TJvListViewGroup.Assign(AValue: TPersistent); @@ -2577,6 +2612,7 @@ SendMessage(List.Handle, LVM_SORTGROUPS, WPARAM(@LVGroupCompare), LPARAM(Self)); end; end; +{$ENDIF !RTL200_UP} { TJvTileViewProperties } @@ -2672,6 +2708,7 @@ DoChange; end; +{$IFNDEF RTL200_UP} { TJvGroupProperties } procedure TJvGroupsProperties.BorderColorChange(Sender: TObject); @@ -2838,6 +2875,7 @@ DoChange; end; end; +{$ENDIF !RTL200_UP} {$IFDEF UNITVERSIONING} initialization This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2010-10-22 06:34:15
|
Revision: 12873 http://jvcl.svn.sourceforge.net/jvcl/?rev=12873&view=rev Author: ahuser Date: 2010-10-22 06:34:08 +0000 (Fri, 22 Oct 2010) Log Message: ----------- Property ColumnOrder losts its content after a form handle recreate Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2010-10-20 20:37:12 UTC (rev 12872) +++ trunk/jvcl/run/JvListView.pas 2010-10-22 06:34:08 UTC (rev 12873) @@ -343,6 +343,7 @@ FPicture: TPicture; FExtendedColumns: TJvListExtendedColumns; FSavedExtendedColumns: TJvListExtendedColumns; + FSavedColumnOrder: string; FViewStylesItemBrush: TJvViewStyles; // use for Create/DestroyWnd process {$IFNDEF RTL200_UP} FGroupView: Boolean; @@ -647,9 +648,6 @@ TileSizeKindToLVTVIF: array[TJvTileSizeKind] of Integer = (LVTVIF_AUTOSIZE, LVTVIF_FIXEDWIDTH, LVTVIF_FIXEDHEIGHT, LVTVIF_FIXEDSIZE); InsertMarkPositionToLVIM: array[TJvInsertMarkPosition] of Integer = (0, LVIM_AFTER); - // (rom) increased from 100 - cColumnsHandled = 1024; - //=== { TJvListItem } ======================================================== constructor TJvListItem.CreateEnh(AOwner: TListItems; const Popup: TPopupMenu); @@ -1696,48 +1694,64 @@ function TJvListView.GetColumnsOrder: string; var - Res: array [0..cColumnsHandled - 1] of Integer; + Res: array of Integer; I: Integer; begin - ListView_GetColumnOrderArray(Columns.Owner.Handle, Columns.Count, @Res[0]); - Result := ''; - if Columns.Count > cColumnsHandled then - raise EJvListViewError.CreateRes(@RsETooManyColumns); - for I := 0 to Columns.Count - 1 do + if Columns.Count > 0 then begin - if Result <> '' then - Result := Result + ','; - Result := Result + IntToStr(Res[I]) + '=' + IntToStr(Columns[I].Width); - end; + if not Columns.Owner.HandleAllocated then + Result := FSavedColumnOrder + else + begin + SetLength(Res, Columns.Count); + ListView_GetColumnOrderArray(Columns.Owner.Handle, Columns.Count, @Res[0]); + Result := ''; + for I := 0 to Columns.Count - 1 do + begin + if Result <> '' then + Result := Result + ','; + Result := Result + IntToStr(Res[I]) + '=' + IntToStr(Columns[I].Width); + end; + end; + end + else + Result := ''; end; procedure TJvListView.SetColumnsOrder(const Order: string); var - Res: array [0..cColumnsHandled - 1] of Integer; + Res: array of Integer; I, J: Integer; - st: string; + S: string; + SL: TStrings; begin - FillChar(Res, SizeOf(Res), #0); - with TStringList.Create do - try - CommaText := Order; - I := 0; - while Count > 0 do + if not Columns.Owner.HandleAllocated then + FSavedColumnOrder := Order + else + begin + if Columns.Count > 0 then begin - st := Strings[0]; - J := Pos('=', st); - if (J <> 0) and (I < Columns.Count) then - begin - Columns[I].Width := StrToIntDef(Copy(st, J + 1, Length(st)), Columns[I].Width); - st := Copy(st, 1, J - 1); + SetLength(Res, Columns.Count); + FillChar(Res[0], Length(Res) * SizeOf(Integer), 0); + SL := TStringList.Create; + try + SL.CommaText := Order; + for I := 0 to SL.Count - 1 do + begin + S := SL[I]; + J := Pos('=', S); + if (J <> 0) and (I < Columns.Count) then + begin + Columns[I].Width := StrToIntDef(Copy(S, J + 1, Length(S)), Columns[I].Width); + S := Copy(S, 1, J - 1); + end; + Res[I] := StrToIntDef(S, 0); + end; + finally + SL.Free; end; - Res[I] := StrToIntDef(st, 0); - Delete(0); - Inc(I); + ListView_SetColumnOrderArray(Columns.Owner.Handle, Columns.Count, @Res[0]); end; - ListView_SetColumnOrderArray(Columns.Owner.Handle, Columns.Count, @Res[0]); - finally - Free; end; end; @@ -1788,6 +1802,11 @@ SendMessage(Handle, LVM_ENABLEGROUPVIEW, Integer(not FGroupView), 0); SendMessage(Handle, LVM_ENABLEGROUPVIEW, Integer(FGroupView), 0); {$ENDIF !RTL200_UP} + if FSavedColumnOrder <> '' then + begin + ColumnsOrder := FSavedColumnOrder; + FSavedColumnOrder := ''; + end; end; procedure TJvListView.UpdateHeaderImages(HeaderHandle: Integer); @@ -2277,7 +2296,11 @@ procedure TJvListView.DestroyWnd; begin - FSavedExtendedColumns.Assign(FExtendedColumns); + if not (csDestroying in ComponentState) then + begin + FSavedColumnOrder := ColumnsOrder; + FSavedExtendedColumns.Assign(FExtendedColumns); + end; inherited DestroyWnd; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2011-04-07 18:52:09
|
Revision: 13012 http://jvcl.svn.sourceforge.net/jvcl/?rev=13012&view=rev Author: ahuser Date: 2011-04-07 18:52:03 +0000 (Thu, 07 Apr 2011) Log Message: ----------- Added: OnItemClick, OnItemDblClick and ReturnKeyTriggersItemDblClick: Boolean default True Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2011-04-03 14:00:03 UTC (rev 13011) +++ trunk/jvcl/run/JvListView.pas 2011-04-07 18:52:03 UTC (rev 13012) @@ -76,6 +76,7 @@ // TJvSortMethod = (smAutomatic, smAlphabetic, smNonCaseSensitive, smNumeric, smDate, smTime, smDateTime, smCurrency); TJvOnProgress = procedure(Sender: TObject; Progression, Total: Integer) of object; + TListViewItemClickNotifyEvent = procedure(Sender: TObject; Item: TListItem; SubItemIndex: Integer; X, Y: Integer) of object; {$IFNDEF RTL200_UP} TJvListViewCompareGroupEvent = procedure(Sender: TObject; Group1, Group2: TJvListViewGroup; var Compare: Integer) of object; {$ENDIF !RTL200_UP} @@ -356,6 +357,9 @@ FInsertMarkColor: TColor; FSettingJvViewStyle: Boolean; FSettingHeaderImagePosition: Boolean; + FReturnKeyTriggersItemDblClick: Boolean; + FOnItemClick: TListViewItemClickNotifyEvent; + FOnItemDblClick: TListViewItemClickNotifyEvent; procedure DoPictureChange(Sender: TObject); procedure SetPicture(const Value: TPicture); {$IFNDEF RTL200_UP} @@ -383,6 +387,7 @@ function CreateListItems: TListItems; override; procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL; procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL; + procedure KeyPress(var Key: Char); override; procedure KeyUp(var Key: Word; Shift: TShiftState); override; procedure Notification(AComponent: TComponent; Operation: TOperation); override; function GetColumnsOrder: string; @@ -393,6 +398,8 @@ procedure Loaded; override; procedure SetViewStyle(Value: TViewStyle); override; procedure SetJvViewStyle(Value: TJvViewStyle); virtual; + procedure ItemClick(AItem: TListItem; SubItemIndex: Integer; X, Y: Integer); virtual; + procedure ItemDblClick(AItem: TListItem; SubItemIndex: Integer; X, Y: Integer); virtual; procedure CreateWnd; override; procedure DestroyWnd; override; @@ -448,6 +455,7 @@ property SortOnClick: Boolean read FSortOnClick write FSortOnClick default True; property SmallImages write SetSmallImages; property AutoClipboardCopy: Boolean read FAutoClipboardCopy write FAutoClipboardCopy default True; + property ReturnKeyTriggersItemDblClick: Boolean read FReturnKeyTriggersItemDblClick write FReturnKeyTriggersItemDblClick default True; {$IFNDEF RTL200_UP} property GroupView: Boolean read FGroupView write SetGroupView default False; property Groups: TJvListViewGroups read FGroups write SetGroups; @@ -470,6 +478,8 @@ property OnMouseEnter; property OnMouseLeave; property OnParentColorChange; + property OnItemClick: TListViewItemClickNotifyEvent read FOnItemClick write FOnItemClick; + property OnItemDblClick: TListViewItemClickNotifyEvent read FOnItemDblClick write FOnItemDblClick; // This property contains a collection that allows to specify additional // properties for each columns (sort method for instance). It can not be @@ -970,6 +980,7 @@ FLast := -1; FInsertMarkColor := clBlack; FAutoClipboardCopy := True; + FReturnKeyTriggersItemDblClick := True; FHeaderImagePosition := hipLeft; FImageChangeLink := TChangeLink.Create; FImageChangeLink.OnChange := DoHeaderImagesChange; @@ -1667,9 +1678,16 @@ end; end; +procedure TJvListView.KeyPress(var Key: Char); +begin + inherited KeyPress(Key); + if ReturnKeyTriggersItemDblClick and (Key = #13) and (Selected <> nil) and (SelCount = 1) then + ItemDblClick(Selected, -1, -1, -1); +end; + procedure TJvListView.KeyUp(var Key: Word; Shift: TShiftState); var - st: string; + S: string; I, J: Integer; begin inherited KeyUp(Key, Shift); @@ -1677,18 +1695,18 @@ if (Key in [Ord('c'), Ord('C')]) and (ssCtrl in Shift) then begin for I := 0 to Columns.Count - 1 do - st := st + Columns[I].Caption + Tab; - if st <> '' then - st := st + sLineBreak; + S := S + Columns[I].Caption + Tab; + if S <> '' then + S := S + sLineBreak; for I := 0 to Items.Count - 1 do if (SelCount = 0) or Items[I].Selected then begin - st := st + Items[I].Caption; + S := S + Items[I].Caption; for J := 0 to Items[I].SubItems.Count - 1 do - st := st + Tab + Items[I].SubItems[J]; - st := st + sLineBreak; + S := S + Tab + Items[I].SubItems[J]; + S := S + sLineBreak; end; - Clipboard.SetTextBuf(PChar(st)); + Clipboard.SetTextBuf(PChar(S)); end; end; @@ -2145,36 +2163,68 @@ procedure TJvListView.CNNotify(var Message: TWMNotify); +var + HitTestInfo: TLVHitTestInfo; begin with Message do begin - if NMHdr^.code = NM_CUSTOMDRAW then - begin - with PNMCustomDraw(NMHdr)^ do - begin - if (dwDrawStage and CDDS_SUBITEM <> 0) and - (PNMLVCustomDraw(NMHdr)^.iSubItem = 0) then + case NMHdr^.code of + NM_CUSTOMDRAW: + with PNMCustomDraw(NMHdr)^ do begin - // Mantis 3908: For some reason, the inherited handler will not call - // the CustomDrawSubItem if iSubItem is equal to zero. But not calling - // it has the consequence to trigger wrong rendering if the order of - // columns is modified and the list item has a non standard font. - // Calling it ourselves here is not enough as the inherited handler - // does some very specific management with the canvas. So we must - // trick it by changing the value to a recognizable value used - // in our CustomDrawSubItem handler. - PNMLVCustomDraw(NMHdr)^.iSubItem := -1; - inherited; - PNMLVCustomDraw(NMHdr)^.iSubItem := 0; - Exit; + if (dwDrawStage and CDDS_SUBITEM <> 0) and + (PNMLVCustomDraw(NMHdr)^.iSubItem = 0) then + begin + // Mantis 3908: For some reason, the inherited handler will not call + // the CustomDrawSubItem if iSubItem is equal to zero. But not calling + // it has the consequence to trigger wrong rendering if the order of + // columns is modified and the list item has a non standard font. + // Calling it ourselves here is not enough as the inherited handler + // does some very specific management with the canvas. So we must + // trick it by changing the value to a recognizable value used + // in our CustomDrawSubItem handler. + PNMLVCustomDraw(NMHdr)^.iSubItem := -1; + inherited; + PNMLVCustomDraw(NMHdr)^.iSubItem := 0; + Exit; + end; end; - end; + + NM_CLICK, NM_DBLCLK: + with PNMListView(NMHdr)^ do + begin + HitTestInfo.iItem := iItem; + if HitTestInfo.iItem = -1 then + begin + HitTestInfo.pt := ptAction; + ListView_SubItemHitTest(Handle, @HitTestInfo); + end; + if HitTestInfo.iItem <> -1 then + begin + if NMHdr^.code = NM_CLICK then + ItemClick(Items[HitTestInfo.iItem], iSubItem - 1, ptAction.X, ptAction.Y) + else + ItemDblClick(Items[HitTestInfo.iItem], iSubItem - 1, ptAction.X, ptAction.Y); + end; + end; end; end; inherited; end; +procedure TJvListView.ItemClick(AItem: TListItem; SubItemIndex: Integer; X, Y: Integer); +begin + if Assigned(FOnItemClick) then + FOnItemClick(Self, AItem, SubItemIndex, X, Y); +end; + +procedure TJvListView.ItemDblClick(AItem: TListItem; SubItemIndex: Integer; X, Y: Integer); +begin + if Assigned(FOnItemDblClick) then + FOnItemDblClick(Self, AItem, SubItemIndex, X, Y); +end; + function TJvListView.CustomDrawSubItem(Item: TListItem; SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage): Boolean; begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2011-05-26 07:58:49
|
Revision: 13031 http://jvcl.svn.sourceforge.net/jvcl/?rev=13031&view=rev Author: ahuser Date: 2011-05-26 07:58:40 +0000 (Thu, 26 May 2011) Log Message: ----------- Restore the text color to allow the ListView to paint the focus rectangle correctly. Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2011-05-17 22:35:04 UTC (rev 13030) +++ trunk/jvcl/run/JvListView.pas 2011-05-26 07:58:40 UTC (rev 13031) @@ -2145,9 +2145,13 @@ function TJvListView.CustomDrawItem(Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage): Boolean; +var + TextColor: TColorRef; begin + TextColor := 0; // silence the compiler if (Stage = cdPrePaint) and Assigned(Item) then begin + TextColor := GetTextColor(Canvas.Handle); Canvas.Font := TJvListItem(Item).Font; if ViewStyle in ViewStylesItemBrush then begin @@ -2159,6 +2163,10 @@ end; Result := inherited CustomDrawItem(Item, State, Stage); + + // Restore the text color to allow the ListView to paint the focus rectangle correctly. + if (Stage = cdPrePaint) and Assigned(Item) then + SetTextColor(Canvas.Handle, TextColor); end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2011-09-27 16:11:58
|
Revision: 13122 http://jvcl.svn.sourceforge.net/jvcl/?rev=13122&view=rev Author: ahuser Date: 2011-09-27 16:11:52 +0000 (Tue, 27 Sep 2011) Log Message: ----------- Added OnCancelEdit event that is missing in the ComCtrls.TListView implementation. Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2011-09-21 12:31:58 UTC (rev 13121) +++ trunk/jvcl/run/JvListView.pas 2011-09-27 16:11:52 UTC (rev 13122) @@ -80,6 +80,7 @@ {$IFNDEF RTL200_UP} TJvListViewCompareGroupEvent = procedure(Sender: TObject; Group1, Group2: TJvListViewGroup; var Compare: Integer) of object; {$ENDIF !RTL200_UP} + TJvListViewCancelEditEvent = procedure(Sender: TObject; Item: TListItem) of object; TJvListItems = class(TListItems, IJvAppStorageHandler, IJvAppStoragePublishedProps) private @@ -363,6 +364,7 @@ FReturnKeyTriggersItemDblClick: Boolean; FOnItemClick: TListViewItemClickNotifyEvent; FOnItemDblClick: TListViewItemClickNotifyEvent; + FOnCancelEdit: TJvListViewCancelEditEvent; procedure DoPictureChange(Sender: TObject); procedure SetPicture(const Value: TPicture); {$IFNDEF RTL200_UP} @@ -420,6 +422,8 @@ Stage: TCustomDrawStage): Boolean; override; function CustomDrawSubItem(Item: TListItem; SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage): Boolean; override; + + procedure EditCanceled(Item: TListItem); virtual; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -471,6 +475,7 @@ property ViewStyle: TJvViewStyle read FViewStyle write SetJvViewStyle default vsIcon; property OnAutoSort: TJvListViewColumnSortEvent read FOnAutoSort write FOnAutoSort; + property OnCancelEdit: TJvListViewCancelEditEvent read FOnCancelEdit write FOnCancelEdit; property OnHorizontalScroll: TNotifyEvent read FOnHorizontalScroll write FOnHorizontalScroll; property OnLoadProgress: TJvOnProgress read FOnLoadProgress write FOnLoadProgress; property OnSaveProgress: TJvOnProgress read FOnSaveProgress write FOnSaveProgress; @@ -2201,6 +2206,11 @@ end; end; + LVN_ENDLABELEDITA, LVN_ENDLABELEDITW: + with PLVDispInfo(Message.NMHdr)^ do + if (item.pszText = nil) and (item.iItem <> -1) then + EditCanceled(Items[item.iItem]); + NM_CLICK, NM_DBLCLK: with PNMListView(NMHdr)^ do begin @@ -2236,6 +2246,12 @@ FOnItemDblClick(Self, AItem, SubItemIndex, X, Y); end; +procedure TJvListView.EditCanceled(Item: TListItem); +begin + if Assigned(FOnCancelEdit) then + FOnCancelEdit(Self, Item); +end; + function TJvListView.CustomDrawSubItem(Item: TListItem; SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage): Boolean; begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2012-02-27 14:24:28
|
Revision: 13245 http://jvcl.svn.sourceforge.net/jvcl/?rev=13245&view=rev Author: obones Date: 2012-02-27 14:24:17 +0000 (Mon, 27 Feb 2012) Log Message: ----------- Mantis 5007: Added column resize events Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2012-02-27 14:00:07 UTC (rev 13244) +++ trunk/jvcl/run/JvListView.pas 2012-02-27 14:24:17 UTC (rev 13245) @@ -80,6 +80,8 @@ TJvListViewCompareGroupEvent = procedure(Sender: TObject; Group1, Group2: TJvListViewGroup; var Compare: Integer) of object; {$ENDIF !RTL200_UP} TJvListViewCancelEditEvent = procedure(Sender: TObject; Item: TListItem) of object; + TJvListViewBeginColumnResizeEvent = procedure(Sender: TCustomListview; ColumnIndex: Integer; ColumnWidth: Integer; var CanResize: Boolean) of object; + TJvListViewColumnResizeEvent = procedure(Sender: TCustomListview; ColumnIndex: Integer; ColumnWidth: Integer) of Object; TJvListItems = class(TListItems, IJvAppStorageHandler, IJvAppStoragePublishedProps) private @@ -364,6 +366,10 @@ FOnItemClick: TListViewItemClickNotifyEvent; FOnItemDblClick: TListViewItemClickNotifyEvent; FOnCancelEdit: TJvListViewCancelEditEvent; + FOnBeginColumnResize: TJvListViewBeginColumnResizeEvent; + FOnEndColumnResize: TJvListViewColumnResizeEvent; + FOnColumnResizing: TJvListViewColumnResizeEvent; + procedure DoPictureChange(Sender: TObject); procedure SetPicture(const Value: TPicture); {$IFNDEF RTL200_UP} @@ -386,6 +392,8 @@ {$ENDIF !RTL200_UP} procedure TileViewPropertiesChange(Sender: TObject); procedure LoadTileViewProperties; + function GetColumnIndex(PHeader: PNMHdr): Integer; + function GetColumnWidth(PHeader: PNMHdr): Integer; protected function CreateListItem: TListItem; override; function CreateListItems: TListItems; override; @@ -413,6 +421,7 @@ procedure LVMInsertColumn(var Msg: TMessage); message LVM_INSERTCOLUMN; procedure LVMSetColumn(var Msg: TMessage); message LVM_SETCOLUMN; procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; + procedure WMNotify(var Msg: TWMNotify); message WM_NOTIFY; procedure InsertItem(Item: TListItem); override; function IsCustomDrawn(Target: TCustomDrawTarget; Stage: TCustomDrawStage): Boolean; override; @@ -423,6 +432,9 @@ State: TCustomDrawState; Stage: TCustomDrawStage): Boolean; override; procedure EditCanceled(Item: TListItem); virtual; + function DoBeginColumnResize(ColumnIndex, ColumnWidth: Integer): Boolean; virtual; + procedure DoColumnResizing(ColumnIndex, ColumnWidth: Integer); virtual; + procedure DoEndColumnResize(ColumnIndex, ColumnWidth: Integer); virtual; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -487,6 +499,9 @@ property OnParentColorChange; property OnItemClick: TListViewItemClickNotifyEvent read FOnItemClick write FOnItemClick; property OnItemDblClick: TListViewItemClickNotifyEvent read FOnItemDblClick write FOnItemDblClick; + property OnBeginColumnResize: TJvListViewBeginColumnResizeEvent read FOnBeginColumnResize write FOnBeginColumnResize; + property OnEndColumnResize: TJvListViewColumnResizeEvent read FOnEndColumnResize write FOnEndColumnResize; + property OnColumnResizing: TJvListViewColumnResizeEvent read FOnColumnResizing write FOnColumnResizing; // This property contains a collection that allows to specify additional // properties for each columns (sort method for instance). It can not be @@ -1715,6 +1730,36 @@ end; end; +function TJvListView.GetColumnIndex(PHeader: PNMHdr): Integer; +var + HwndHeader: HWND; + ItemInfo: THdItem; + ItemIndex: Integer; + Buffer: array [0..128] of Char; +begin + Result := -1; + HwndHeader := pHeader^.hwndFrom; + ItemIndex := pHDNotify(pHeader)^.Item; + FillChar(ItemInfo, SizeOf(ItemInfo), 0); + ItemInfo.Mask := HDI_TEXT; + ItemInfo.pszText := Buffer; + ItemInfo.cchTextMax := SizeOf(Buffer) - 1; + Header_GetItem(HwndHeader, ItemIndex, ItemInfo); + if CompareStr(Columns[ItemIndex].Caption, ItemInfo.pszText) = 0 then + begin + Result := ItemIndex; + end + else + begin + for ItemIndex := 0 to Columns.Count - 1 do + if CompareStr(Columns[ItemIndex].Caption, ItemInfo.pszText) = 0 then + begin + Result := ItemIndex; + Break; + end; + end; +end; + function TJvListView.GetColumnsOrder: string; var Res: array of Integer; @@ -1741,6 +1786,14 @@ Result := ''; end; +function TJvListView.GetColumnWidth(PHeader: PNMHdr): Integer; +begin + Result := -1; + if Assigned(PHDNotify(PHeader)^.PItem) and + ((PHDNotify(PHeader)^.PItem^.Mask and HDI_WIDTH) <> 0) then + Result := PHDNotify(PHeader)^.PItem^.cxy; +end; + procedure TJvListView.SetColumnsOrder(const Order: string); var Res: array of Integer; @@ -1807,8 +1860,11 @@ end; procedure TJvListView.CreateWnd; +var + Wnd: HWND; begin inherited CreateWnd; + UpdateHeaderImages(ListView_GetHeader(Handle)); if FSavedExtendedColumns.Count > 0 then FExtendedColumns.Assign(FSavedExtendedColumns); @@ -1830,6 +1886,10 @@ ColumnsOrder := FSavedColumnOrder; FSavedColumnOrder := ''; end; + + // This will ensure the HDN_Track notification message is sent: + Wnd := GetWindow(Handle, GW_CHILD); + SetWindowLong(wnd, GWL_STYLE, GetWindowLong(wnd, GWL_STYLE) and not HDS_FULLDRAG); end; procedure TJvListView.UpdateHeaderImages(HeaderHandle: Integer); @@ -1886,6 +1946,24 @@ // Top := Top + HeaderImages.Height + 3; end; +procedure TJvListView.WMNotify(var Msg: TWMNotify); +begin + inherited; + + // Must be tested for in WM_NOTIFY handler because the CN_NOTIFY handler + // does not receive them. + // Must also be processed AFTER the inherited handler or the code won't work + case Msg.NMHdr^.code of + HDN_ENDTRACK: + DoEndColumnResize(GetColumnIndex(Msg.NMHdr), GetColumnWidth(Msg.NMHdr)); + HDN_BEGINTRACK: + if not DoBeginColumnResize(GetColumnIndex(Msg.NMHdr), GetColumnWidth(Msg.NMHdr)) Then + Msg.Result := 1; + HDN_TRACK: + DoColumnResizing(GetColumnIndex(Msg.NMHdr), GetColumnWidth(Msg.NMHdr)); + end; +end; + procedure TJvListView.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); begin inherited SetBounds(ALeft, ATop, AWidth, AHeight); @@ -2419,6 +2497,14 @@ end; end; +function TJvListView.DoBeginColumnResize(ColumnIndex, + ColumnWidth: Integer): Boolean; +begin + Result := True; + if Assigned(FOnBeginColumnResize) then + FOnBeginColumnResize(Self, ColumnIndex, ColumnWidth, Result); +end; + {$IFNDEF RTL200_UP} function TJvListView.DoCompareGroups(Group1, Group2: TJvListViewGroup): Integer; begin @@ -2429,6 +2515,18 @@ end; {$ENDIF !RTL200_UP} +procedure TJvListView.DoColumnResizing(ColumnIndex, ColumnWidth: Integer); +begin + if Assigned(FOnColumnResizing) then + FOnColumnResizing(Self, ColumnIndex, ColumnWidth); +end; + +procedure TJvListView.DoEndColumnResize(ColumnIndex, ColumnWidth: Integer); +begin + if Assigned(FOnEndColumnResize) then + FOnEndColumnResize(Self, ColumnIndex, ColumnWidth); +end; + procedure TJvListView.TileViewPropertiesChange(Sender: TObject); var Infos: TLVTILEVIEWINFO; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2012-02-27 14:25:07
|
Revision: 13246 http://jvcl.svn.sourceforge.net/jvcl/?rev=13246&view=rev Author: obones Date: 2012-02-27 14:25:01 +0000 (Mon, 27 Feb 2012) Log Message: ----------- Mantis 5007: Better naming Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2012-02-27 14:24:17 UTC (rev 13245) +++ trunk/jvcl/run/JvListView.pas 2012-02-27 14:25:01 UTC (rev 13246) @@ -1057,7 +1057,7 @@ procedure TJvListView.ColClick(Column: TListColumn); type TParamSort = record - Index: Integer; + ColumnIndex: Integer; Sender: TObject; end; var @@ -1199,16 +1199,16 @@ Parm := TParamSort(Pointer(ParamSort)^); i1 := TListItem(Item1); i2 := TListItem(Item2); - I := Parm.Index; + I := Parm.ColumnIndex; // (Salvatore) - if Parm.Index < TJvListView(Parm.Sender).ExtendedColumns.Count then - SortKind := TJvListView(Parm.Sender).ExtendedColumns[Parm.Index].SortMethod + if Parm.ColumnIndex < TJvListView(Parm.Sender).ExtendedColumns.Count then + SortKind := TJvListView(Parm.Sender).ExtendedColumns[Parm.ColumnIndex].SortMethod else SortKind := TJvListView(Parm.Sender).SortMethod; if Assigned(TJvListView(Parm.Sender).OnAutoSort) then - TJvListView(Parm.Sender).OnAutoSort(Parm.Sender, Parm.Index, SortKind); + TJvListView(Parm.Sender).OnAutoSort(Parm.Sender, Parm.ColumnIndex, SortKind); case I of {sort by caption} @@ -1263,7 +1263,7 @@ inherited ColClick(Column); if FSortOnClick then begin - Parm.Index := Column.Index; + Parm.ColumnIndex := Column.Index; Parm.Sender := Self; if FLast = Column.Index then begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2012-02-27 14:29:16
|
Revision: 13247 http://jvcl.svn.sourceforge.net/jvcl/?rev=13247&view=rev Author: obones Date: 2012-02-27 14:29:05 +0000 (Mon, 27 Feb 2012) Log Message: ----------- Mantis 5007: Added LastSortedColumnIndex Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2012-02-27 14:25:01 UTC (rev 13246) +++ trunk/jvcl/run/JvListView.pas 2012-02-27 14:29:05 UTC (rev 13247) @@ -369,7 +369,8 @@ FOnBeginColumnResize: TJvListViewBeginColumnResizeEvent; FOnEndColumnResize: TJvListViewColumnResizeEvent; FOnColumnResizing: TJvListViewColumnResizeEvent; - + FLastSortedColumnIndex: Integer; + procedure DoPictureChange(Sender: TObject); procedure SetPicture(const Value: TPicture); {$IFNDEF RTL200_UP} @@ -412,6 +413,7 @@ procedure SetJvViewStyle(Value: TJvViewStyle); virtual; procedure ItemClick(AItem: TListItem; SubItemIndex: Integer; X, Y: Integer); virtual; procedure ItemDblClick(AItem: TListItem; SubItemIndex: Integer; X, Y: Integer); virtual; + procedure SetLastSortedColumnIndex(const Value: Integer); virtual; procedure CreateWnd; override; procedure DestroyWnd; override; @@ -462,6 +464,8 @@ property ItemPopup[Item: TListItem]: TPopupMenu read GetItemPopup write SetItemPopup; procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; procedure SetFocus; override; + + property LastSortedColumnIndex: Integer read FLastSortedColumnIndex write SetLastSortedColumnIndex; published property AutoSelect: Boolean read FAutoSelect write FAutoSelect default True; property ColumnsOrder: string read GetColumnsOrder write SetColumnsOrder; @@ -1263,6 +1267,7 @@ inherited ColClick(Column); if FSortOnClick then begin + FLastSortedColumnIndex := Column.Index; Parm.ColumnIndex := Column.Index; Parm.Sender := Self; if FLast = Column.Index then @@ -2497,6 +2502,15 @@ end; end; +procedure TJvListView.SetLastSortedColumnIndex(const Value: Integer); +begin + if FLastSortedColumnIndex <> Value then + begin + FLastSortedColumnIndex := Value; + ColClick(Columns[Value]); + end; +end; + function TJvListView.DoBeginColumnResize(ColumnIndex, ColumnWidth: Integer): Boolean; begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2013-05-25 14:32:33
|
Revision: 13526 http://jvcl.svn.sourceforge.net/jvcl/?rev=13526&view=rev Author: ahuser Date: 2013-05-25 14:32:24 +0000 (Sat, 25 May 2013) Log Message: ----------- Mantis #6037: Prevent AutoSelect from stealing the selected item when processing messages Modified Paths: -------------- trunk/jvcl/run/JvListView.pas Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2013-05-25 14:16:02 UTC (rev 13525) +++ trunk/jvcl/run/JvListView.pas 2013-05-25 14:32:24 UTC (rev 13526) @@ -1990,13 +1990,16 @@ var lv: TListItem; begin - with Msg do + if AutoSelect and (Selected = nil) then // Mantis 6037: Prevent AutoSelect from stealing the selected item when processing messages begin - lv := TListItem(WParam); - if Assigned(lv) and (Items.IndexOf(lv) >= 0) and (LParam = 1) then + with Msg do begin - lv.Selected := True; - lv.Focused := True; + lv := TListItem(WParam); + if Assigned(lv) and (Items.IndexOf(lv) >= 0) and (LParam = 1) then + begin + lv.Selected := True; + lv.Focused := True; + end; end; end; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |