From: <ah...@us...> - 2009-03-18 10:27:37
|
Revision: 12240 http://jvcl.svn.sourceforge.net/jvcl/?rev=12240&view=rev Author: ahuser Date: 2009-03-18 10:27:22 +0000 (Wed, 18 Mar 2009) Log Message: ----------- - Protect JvEditor against "division by zero" - Fixed NullReferenceException in JvPanel Modified Paths: -------------- trunk/jvcl/run/JvEditorCommon.pas trunk/jvcl/run/JvPanel.pas Modified: trunk/jvcl/run/JvEditorCommon.pas =================================================================== --- trunk/jvcl/run/JvEditorCommon.pas 2009-03-18 00:17:32 UTC (rev 12239) +++ trunk/jvcl/run/JvEditorCommon.pas 2009-03-18 10:27:22 UTC (rev 12240) @@ -4325,7 +4325,7 @@ ECR: TRect; BX, EX, BY, EY: Integer; begin - if UpdateLock > 0 then + if (UpdateLock > 0) and (CellRect.Width > 1) and (CellRect.Height > 0) then Exit; PaintCaret(False); Modified: trunk/jvcl/run/JvPanel.pas =================================================================== --- trunk/jvcl/run/JvPanel.pas 2009-03-18 00:17:32 UTC (rev 12239) +++ trunk/jvcl/run/JvPanel.pas 2009-03-18 10:27:22 UTC (rev 12240) @@ -1231,6 +1231,8 @@ CurrControl := GetNextControlByTabOrder(LastTabOrder + 1); Inc(I); end; + if (Length(ControlRects) > 0) and not ControlRects[High(ControlRects)].LineBreak then + Inc(LineCount); { Vertical/Horizontal alignment } OffsetX := 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2009-03-20 19:35:57
|
Revision: 12243 http://jvcl.svn.sourceforge.net/jvcl/?rev=12243&view=rev Author: ahuser Date: 2009-03-20 19:35:51 +0000 (Fri, 20 Mar 2009) Log Message: ----------- New event OnCaretChanged Modified Paths: -------------- trunk/jvcl/run/JvEditor.pas trunk/jvcl/run/JvEditorCommon.pas trunk/jvcl/run/JvUnicodeEditor.pas Modified: trunk/jvcl/run/JvEditor.pas =================================================================== --- trunk/jvcl/run/JvEditor.pas 2009-03-19 11:39:42 UTC (rev 12242) +++ trunk/jvcl/run/JvEditor.pas 2009-03-20 19:35:51 UTC (rev 12243) @@ -194,6 +194,7 @@ property OnKeyPress; property OnKeyUp; property OnChange; + property OnCaretChanged; property OnSelectionChange; property OnMouseDown; property OnMouseMove; Modified: trunk/jvcl/run/JvEditorCommon.pas =================================================================== --- trunk/jvcl/run/JvEditorCommon.pas 2009-03-19 11:39:42 UTC (rev 12242) +++ trunk/jvcl/run/JvEditorCommon.pas 2009-03-20 19:35:51 UTC (rev 12243) @@ -263,6 +263,7 @@ TOnGutterClick = procedure(Sender: TObject; Line: Integer) of object; TJvLineChangeEvent = procedure(Sender: TObject; Line: Integer) of object; + TJvCaretChangedEvent = procedure(Sender: TObject; LastCaretX, LastCaretY: Integer) of object; TEditCommand = Word; TMacro = AnsiString; { used as buffer (array of char) } @@ -756,6 +757,7 @@ FOnLineInserted: TJvLineChangeEvent; FOnLineDeleted: TJvLineChangeEvent; + FOnCaretChanged: TJvCaretChangedEvent; { internal message processing } procedure WMEditCommand(var Msg: TMessage); message WM_EDITCOMMAND; @@ -973,6 +975,8 @@ procedure Undo; procedure Redo; // not implemented yet + procedure CaretChanged(LastCaretX, LastCaretY: Integer); virtual; + procedure SelectRange(BegX, BegY, EndX, EndY: Integer); function CalcCellRect(X, Y: Integer): TRect; procedure SetCaret(X, Y: Integer); @@ -1077,6 +1081,7 @@ property OnPaintGutter: TOnPaintGutter read FOnPaintGutter write FOnPaintGutter; property OnGutterClick: TOnGutterClick read FOnGutterClick write FOnGutterClick; property OnGutterDblClick: TOnGutterClick read FOnGutterDblClick write FOnGutterDblClick; + property OnCaretChanged: TJvCaretChangedEvent read FOnCaretChanged write FOnCaretChanged; property OnCompletionIdentifier: TOnCompletion read FOnCompletionIdentifier write FOnCompletionIdentifier; property OnCompletionTemplate: TOnCompletion read FOnCompletionTemplate write FOnCompletionTemplate; @@ -4859,6 +4864,12 @@ CY := LineCount - 1; end; +procedure TJvCustomEditorBase.CaretChanged(LastCaretX, LastCaretY: Integer); +begin + if Assigned(FOnCaretChanged) then + FOnCaretChanged(Self, LastCaretX, LastCaretY); +end; + procedure TJvCustomEditorBase.CaretCoord(X, Y: Integer; var CX, CY: Integer); begin CX := X - FLeftCol; @@ -4885,7 +4896,7 @@ procedure TJvCustomEditorBase.SetCaretInternal(X, Y: Integer); var R: TRect; - LastCaretY: Integer; + LastCaretX, LastCaretY: Integer; begin if (X = FCaretX) and (Y = FCaretY) then Exit; @@ -4916,6 +4927,7 @@ if (FCaretX <> X) or (FCaretY <> Y) then begin + LastCaretX := FCaretX; LastCaretY := FCaretY; FCaretX := X; FCaretY := Y; @@ -4925,6 +4937,7 @@ PaintLine(FCaretY); end; StatusChanged; + CaretChanged(LastCaretX, LastCaretY); end; end; Modified: trunk/jvcl/run/JvUnicodeEditor.pas =================================================================== --- trunk/jvcl/run/JvUnicodeEditor.pas 2009-03-19 11:39:42 UTC (rev 12242) +++ trunk/jvcl/run/JvUnicodeEditor.pas 2009-03-20 19:35:51 UTC (rev 12243) @@ -197,6 +197,7 @@ property OnKeyPress; property OnKeyUp; property OnChange; + property OnCaretChanged; property OnSelectionChange; property OnMouseDown; property OnMouseMove; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2009-03-21 22:18:29
|
Revision: 12252 http://jvcl.svn.sourceforge.net/jvcl/?rev=12252&view=rev Author: ahuser Date: 2009-03-21 22:18:25 +0000 (Sat, 21 Mar 2009) Log Message: ----------- Unicode bugfixes Modified Paths: -------------- trunk/jvcl/run/JvCheckListBox.pas trunk/jvcl/run/JvDBTreeView.pas trunk/jvcl/run/JvDockControlForm.pas trunk/jvcl/run/JvDockSupportProc.pas trunk/jvcl/run/JvDockTree.pas trunk/jvcl/run/JvGIF.pas trunk/jvcl/run/JvGnugettext.pas trunk/jvcl/run/JvID3v2Base.pas trunk/jvcl/run/JvInterpreter.pas trunk/jvcl/run/JvInterpreter_Classes.pas trunk/jvcl/run/JvJCLUtils.pas trunk/jvcl/run/JvListView.pas trunk/jvcl/run/JvRichEdit.pas trunk/jvcl/run/JvSchedEvtStore.pas trunk/jvcl/run/JvTMTimeLine.pas trunk/jvcl/run/JvTimeLine.pas trunk/jvcl/run/JvZlibMultiple.pas trunk/jvcl/run/JvgXMLSerializer.pas Modified: trunk/jvcl/run/JvCheckListBox.pas =================================================================== --- trunk/jvcl/run/JvCheckListBox.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvCheckListBox.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -544,7 +544,6 @@ Checked[I] := True; end; - procedure TJvCheckListBox.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); @@ -555,7 +554,6 @@ Style := Style xor WS_HSCROLL; end; - function TJvCheckListBox.DeleteExactString(Value: string; All: Boolean; CaseSensitive: Boolean): Integer; begin @@ -621,7 +619,6 @@ Selected[I] := not Selected[I]; end; - procedure TJvCheckListBox.LBNSelCancel(var Msg: TMessage); begin if Assigned(FOnSelectCancel) then @@ -643,7 +640,6 @@ inherited; end; - procedure TJvCheckListBox.LoadFromFile(FileName: TFileName); var Stream: TFileStream; @@ -659,7 +655,10 @@ procedure TJvCheckListBox.LoadFromStream(Stream: TStream); var CheckLst: TCheckListRecord; - Buf: array [0..1023] of Char; + UTF8Item: UTF8String; + {$IFDEF CLR} + Buf: TBytes; + {$ENDIF CLR} begin Items.Clear; while Stream.Position + SizeOf(TCheckListRecord) <= Stream.Size do @@ -670,22 +669,21 @@ {$ELSE} Stream.Read(CheckLst, SizeOf(TCheckListRecord)); {$ENDIF CLR} - if (Stream.Position + CheckLst.StringSize <= Stream.Size) and - (CheckLst.StringSize < High(Buf)) then + if Stream.Position + CheckLst.StringSize <= Stream.Size then begin {$IFDEF CLR} ReadCharsFromStream(Stream, Buf, CheckLst.StringSize); + UTF8Item := Buf; {$ELSE} - Stream.Read(Buf, CheckLst.StringSize); + SetLength(UTF8Item, CheckLst.StringSize); + if CheckLst.StringSize > 0 then + Stream.Read(PAnsiChar(UTF8Item)^, CheckLst.StringSize); {$ENDIF CLR} - Buf[CheckLst.StringSize] := #0; - Checked[Items.Add(Buf)] := CheckLst.Checked; + Checked[Items.Add(UTF8ToString(UTF8Item))] := CheckLst.Checked; end; end; end; - - procedure TJvCheckListBox.MouseEnter(Control: TControl); begin if csDesigning in ComponentState then @@ -724,8 +722,6 @@ SetHScroll(FScroll); end; - - procedure TJvCheckListBox.SaveToFile(FileName: TFileName); var Stream: TFileStream; @@ -740,26 +736,25 @@ procedure TJvCheckListBox.SaveToStream(Stream: TStream); var - I, J: Integer; + I: Integer; CheckLst: TCheckListRecord; - Buf: array [1..1023] of Char; + UTF8Item: UTF8String; begin for I := 0 to Items.Count - 1 do begin + UTF8Item := UTF8Encode(Items[I]); CheckLst.Checked := Checked[I]; - CheckLst.StringSize := Length(Items[I]); + CheckLst.StringSize := Length(UTF8Item); {$IFDEF CLR} Stream.Write(CheckLst.Checked); Stream.Write(CheckLst.StringSize); {$ELSE} Stream.Write(CheckLst, SizeOf(TCheckListRecord)); {$ENDIF CLR} - for J := 1 to Length(Items[I]) do - Buf[J] := Items[I][J]; {$IFDEF CLR} - WriteStringToStream(Stream, Buf, CheckLst.StringSize) + Stream.Write(BytesOf(Buf), CheckLst.StringSize); {$ELSE} - Stream.Write(Buf, CheckLst.StringSize); + Stream.Write(PAnsiChar(UTF8Item)^, CheckLst.StringSize); {$ENDIF CLR} end; end; @@ -790,8 +785,6 @@ Selected[I] := True; end; - - procedure TJvCheckListBox.SetHotTrack(const Value: Boolean); begin FHotTrack := Value; @@ -806,8 +799,6 @@ SendMessage(Handle, LB_SETHORIZONTALEXTENT, FMaxWidth, 0); end; - - procedure TJvCheckListBox.UnCheckAll; var I: Integer; @@ -825,8 +816,6 @@ Selected[I] := False; end; - - procedure TJvCheckListBox.WMHScroll(var Msg: TWMHScroll); var ScrollPos: Integer; @@ -904,8 +893,6 @@ inherited WndProc(Msg); end; - - {$IFDEF UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); Modified: trunk/jvcl/run/JvDBTreeView.pas =================================================================== --- trunk/jvcl/run/JvDBTreeView.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvDBTreeView.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -1486,7 +1486,7 @@ begin FMastersStream.Read(strLength, SizeOf(strLength)); SetLength(temp, strLength); - FMastersStream.Read(temp[1], strLength); + FMastersStream.Read(temp[1], strLength * SizeOf(Char)); // internally used stream TJvDBTreeNode(Node).SetMasterValue(temp); FMastersStream.Read(HasChildren, SizeOf(HasChildren)); Node.HasChildren := HasChildren <> 0; @@ -1516,7 +1516,7 @@ temp := VarToStr(TJvDBTreeNode(Node).MasterValue); strLength := length(temp); FMastersStream.Write(strLength, SizeOf(strLength)); - FMastersStream.Write(temp[1], strLength); + FMastersStream.Write(temp[1], strLength * SizeOf(Char)); // internally used stream HasChildren := Byte(Node.HasChildren); FMastersStream.Write(HasChildren, SizeOf(HasChildren)); Node := Node.GetNext; Modified: trunk/jvcl/run/JvDockControlForm.pas =================================================================== --- trunk/jvcl/run/JvDockControlForm.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvDockControlForm.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -5092,7 +5092,7 @@ procedure TJvDockTabPageControl.LoadFromStream(Stream: TStream); var I, ACount, NameLen, SheetVisible, ActiveSheetIndex: Integer; - ControlName: string; + ControlName: UTF8String; AControl: TControl; Index: Integer; begin @@ -5108,14 +5108,14 @@ if NameLen > 0 then begin SetLength(ControlName, NameLen); - Stream.Read(Pointer(ControlName)^, NameLen); + Stream.Read(ControlName[1], NameLen); end; Stream.Read(SheetVisible, SizeOf(SheetVisible)); if ControlName <> '' then begin - ReloadDockedControl(ControlName, AControl); + ReloadDockedControl({$IFDEF UNICODE}UTF8ToString{$ELSE}UTF8Decode{$ENDIF}(ControlName), AControl); if AControl <> nil then begin AControl.ManualDock(Self, nil, alClient); @@ -5142,7 +5142,7 @@ procedure TJvDockTabPageControl.SaveToStream(Stream: TStream); var I, ACount, NameLen, SheetVisible, ActiveSheetIndex: Integer; - ControlName: string; + ControlName: UTF8String; CurrentControl: TControl; TabPageStreamEndFlag: Integer; begin @@ -5155,13 +5155,13 @@ if Pages[I].ControlCount > 0 then begin CurrentControl := Pages[I].Controls[0]; - ControlName := CurrentControl.Name; + + ControlName := UTF8Encode(CurrentControl.Name); NameLen := Length(ControlName); - Stream.Write(NameLen, SizeOf(NameLen)); + if NameLen > 0 then + Stream.Write(ControlName[1], NameLen); - if NameLen > 0 then - Stream.Write(Pointer(ControlName)^, NameLen); SheetVisible := 0; if (Self is TJvDockVSNETTabPageControl) and (ParentForm.HostDockSite is TJvDockPanel) then SheetVisible := Integer(TJvDockVSNETTabSheet(Pages[I]).OldVisible) Modified: trunk/jvcl/run/JvDockSupportProc.pas =================================================================== --- trunk/jvcl/run/JvDockSupportProc.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvDockSupportProc.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -140,7 +140,7 @@ function JvDockStreamDataToString(Stream: TStream): string; var - Ch: Char; + Ch: AnsiChar; begin Result := ''; Stream.Position := 0; @@ -154,12 +154,12 @@ procedure JvDockStringToStreamData(Stream: TStream; const Data: string); var I: Integer; - Ch: Char; + Ch: AnsiChar; begin I := 1; while I < Length(Data) do begin - Ch := Char(StrToInt('$' + Copy(Data, I, 2))); + Ch := AnsiChar(StrToInt('$' + Copy(Data, I, 2))); Stream.Write(Ch, SizeOf(Ch)); Inc(I, 2); end; Modified: trunk/jvcl/run/JvDockTree.pas =================================================================== --- trunk/jvcl/run/JvDockTree.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvDockTree.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -3516,14 +3516,14 @@ procedure TJvDockTree.WriteControlName(Stream: TStream; const ControlName: string); var NameLen: Longint; - UTF8ControlName: {$IFDEF SUPPORTS_UNICODE}UTF8String{$ELSE}string{$ENDIF SUPPORTS_UNICODE}; + UTF8ControlName: UTF8String; begin - UTF8ControlName := {$IFDEF COMPILER6_UP}UTF8Encode{$ENDIF COMPILER6_UP}(ControlName); + UTF8ControlName := UTF8Encode(ControlName); NameLen := Length(UTF8ControlName); Stream.Write(NameLen, SizeOf(NameLen)); if NameLen > 0 then - Stream.Write(PAnsiChar(UTF8ControlName)^, NameLen); + Stream.Write(UTF8ControlName[1], NameLen); end; procedure TJvDockTree.DoLoadZone(Stream: TStream); Modified: trunk/jvcl/run/JvGIF.pas =================================================================== --- trunk/jvcl/run/JvGIF.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvGIF.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -2533,7 +2533,7 @@ procedure TJvGIFImage.ReadStream(Size: Longint; Stream: TStream; ForceDecode: Boolean); var - SeparatorChar: Char; + SeparatorChar: AnsiChar; NewItem: TJvGIFFrame; Extensions: TList; ScreenDesc: TScreenDescriptor; @@ -2569,7 +2569,7 @@ function ReadDataBlock(Stream: TStream): TStringList; var BlockSize: Byte; - S: string; + S: AnsiString; begin Result := TStringList.Create; try @@ -2579,7 +2579,7 @@ begin SetLength(S, BlockSize); Stream.Read(S[1], BlockSize); - Result.Add(S); + Result.Add(string(S)); end; until (BlockSize = 0) or (Stream.Position >= Stream.Size); except @@ -2635,14 +2635,14 @@ end; end; - function ReadSeparator(Stream: TStream): Char; + function ReadSeparator(Stream: TStream): AnsiChar; begin Result := #0; while (Stream.Size > Stream.Position) and (Result = #0) do Stream.Read(Result, SizeOf(Byte)); end; - function ReadExtensionBlock(Stream: TStream; var SeparatorChar: Char): TList; + function ReadExtensionBlock(Stream: TStream; var SeparatorChar: AnsiChar): TList; var NewExt: TExtension; begin @@ -2711,8 +2711,7 @@ ReadScreenDescriptor(Data); ReadGlobalColorMap(Data); SeparatorChar := ReadSeparator(Data); - while not CharInSet(SeparatorChar, [CHR_TRAILER, #0]) and not - (Data.Position >= Data.Size) do + while not (SeparatorChar in [CHR_TRAILER, #0]) and not (Data.Position >= Data.Size) do begin Extensions := ReadExtensionBlock(Data, SeparatorChar); if SeparatorChar = CHR_IMAGE_SEPARATOR then @@ -2730,12 +2729,10 @@ raise; end; if not (Data.Position >= Data.Size) then - begin - SeparatorChar := ReadSeparator(Data); - end + SeparatorChar := ReadSeparator(Data) else SeparatorChar := CHR_TRAILER; - if not CharInSet(SeparatorChar, [CHR_EXT_INTRODUCER, CHR_IMAGE_SEPARATOR, CHR_TRAILER]) then + if not (SeparatorChar in [CHR_EXT_INTRODUCER, CHR_IMAGE_SEPARATOR, CHR_TRAILER]) then begin SeparatorChar := #0; {GifError(RsEGIFDecodeError);} @@ -2764,7 +2761,7 @@ end; end else - if not CharInSet(SeparatorChar, [CHR_TRAILER, #0]) then + if not (SeparatorChar in [CHR_TRAILER, #0]) then GifError(SReadError); end; finally @@ -2848,7 +2845,7 @@ procedure TJvGIFImage.WriteStream(Stream: TStream; WriteSize: Boolean); var - Separator: Char; + Separator: Byte; Temp: Byte; FrameNo: Integer; Frame: TJvGIFFrame; @@ -2901,12 +2898,12 @@ procedure WriteDataBlock(Stream: TStream; Data: TStrings); var I: Integer; - S: string; + S: AnsiString; BlockSize: Byte; begin for I := 0 to Data.Count - 1 do begin - S := Data[I]; + S := AnsiString(Data[I]); BlockSize := Min(Length(S), 255); if BlockSize > 0 then begin @@ -2923,9 +2920,9 @@ I: Integer; Ext: TExtension; ExtensionLabel: Byte; - SeparateChar: Char; + SeparateChar: Byte; begin - SeparateChar := CHR_EXT_INTRODUCER; + SeparateChar := Byte(CHR_EXT_INTRODUCER); for I := 0 to Extensions.Count - 1 do begin Ext := TExtension(Extensions[I]); @@ -2973,7 +2970,7 @@ if FLooping and (FItems.Count > 1) then begin { write looping extension } - Separator := CHR_EXT_INTRODUCER; + Separator := Byte(CHR_EXT_INTRODUCER); Mem.Write(Separator, SizeOf(Byte)); Temp := ExtLabels[etApplication]; Mem.Write(Temp, SizeOf(Byte)); @@ -2989,7 +2986,7 @@ StrList.Free; end; end; - Separator := CHR_IMAGE_SEPARATOR; + Separator := Byte(CHR_IMAGE_SEPARATOR); for FrameNo := 0 to FItems.Count - 1 do begin Frame := TJvGIFFrame(FItems[FrameNo]); @@ -3002,13 +2999,13 @@ end; if FImage.FComment.Count > 0 then begin - Separator := CHR_EXT_INTRODUCER; + Separator := Byte(CHR_EXT_INTRODUCER); Mem.Write(Separator, SizeOf(Byte)); Temp := ExtLabels[etComment]; Mem.Write(Temp, SizeOf(Byte)); WriteDataBlock(Mem, FImage.FComment); end; - Separator := CHR_TRAILER; + Separator := Byte(CHR_TRAILER); Mem.Write(Separator, SizeOf(Byte)); Size := Mem.Size; if WriteSize then Modified: trunk/jvcl/run/JvGnugettext.pas =================================================================== --- trunk/jvcl/run/JvGnugettext.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvGnugettext.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -2639,7 +2639,7 @@ begin marker := sLineBreak + '===========================================================================' + sLineBreak; - fs.WriteBuffer(marker[1], Length(marker)); + fs.Write(marker[1], Length(marker)); end; if DebugLog <> nil then @@ -2684,7 +2684,7 @@ sLineBreak + sLineBreak + sLineBreak + sLineBreak + sLineBreak; DebugLogOutputPaused := True; end; - DebugLog.WriteBuffer(Line[1], Length(Line)); + DebugLog.Write(Line[1], Length(Line)); finally DebugLogCS.EndWrite; end; @@ -3125,8 +3125,7 @@ function TFileLocator.ReadInt64(str: TStream): Int64; begin - Assert(SizeOf(Result) = 8); - str.ReadBuffer(Result, 8); + str.ReadBuffer(Result, SizeOf(Int64)); end; procedure TFileLocator.ReleaseMoFile(var moFile: TMoFile); Modified: trunk/jvcl/run/JvID3v2Base.pas =================================================================== --- trunk/jvcl/run/JvID3v2Base.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvID3v2Base.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -1898,7 +1898,7 @@ const CBufferSize = $0F00; var - LBuffer: PAnsiChar; + LBuffer: array[0..CBufferSize - 1] of Byte; I: Integer; LastWasFF: Boolean; BytesRead: Longint; @@ -1907,40 +1907,35 @@ LastWasFF := False; Result := AStream.Seek(BeginOffset, soFromBeginning); - GetMem(LBuffer, CBufferSize); - try - while True do + while True do + begin + BytesRead := AStream.Read(LBuffer, CBufferSize); + if BytesRead = 0 then begin - BytesRead := AStream.Read(LBuffer^, CBufferSize); - if BytesRead = 0 then - begin - Result := -1; - Break; - end; + Result := -1; + Break; + end; - for I := 0 to BytesRead - 1 do + for I := 0 to BytesRead - 1 do + begin + if LastWasFF and (LBuffer[I] and $E0 = $E0) then begin - if LastWasFF and (Byte(LBuffer[I]) and $E0 = $E0) then + Inc(Result, I - 1); + if (I + BufferSize - 1 >= BytesRead) or (I = 0) then begin - Inc(Result, I - 1); - if (I + BufferSize - 1 >= BytesRead) or (I = 0) then - begin - AStream.Seek(Result, soFromBeginning); - if not AStream.Read(Buffer, BufferSize) = BufferSize then - Result := -1; - end - else - Move((LBuffer + I - 1)^, Buffer, BufferSize); + AStream.Seek(Result, soFromBeginning); + if not AStream.Read(Buffer, BufferSize) = BufferSize then + Result := -1; + end + else + Move(LBuffer[I - 1], Buffer, BufferSize); - Exit; - end; - - LastWasFF := LBuffer[I] = #$FF; + Exit; end; - Inc(Result, BytesRead); + + LastWasFF := LBuffer[I] = $FF; end; - finally - FreeMem(LBuffer); + Inc(Result, BytesRead); end; end; @@ -1981,44 +1976,37 @@ LastWasFF: Boolean; BytesRead: Integer; SourcePtr, DestPtr: Integer; - SourceBuf, DestBuf: PAnsiChar; + SourceBuf, DestBuf: array[0..MaxBufSize - 1] of Byte; begin { Replace $FF 00 with $FF } - GetMem(SourceBuf, Min(MaxBufSize, BytesToRead)); - GetMem(DestBuf, Min(MaxBufSize, BytesToRead)); - try - LastWasFF := False; - while BytesToRead > 0 do - begin - { Read at max CBufferSize bytes from the stream } - BytesRead := Source.Read(SourceBuf^, Min(MaxBufSize, BytesToRead)); - if BytesRead = 0 then - ID3Error(RsECouldNotReadData); + LastWasFF := False; + while BytesToRead > 0 do + begin + { Read at max CBufferSize bytes from the stream } + BytesRead := Source.Read(SourceBuf[0], Min(MaxBufSize, BytesToRead)); + if BytesRead = 0 then + ID3Error(RsECouldNotReadData); - Dec(BytesToRead, BytesRead); + Dec(BytesToRead, BytesRead); - DestPtr := 0; - SourcePtr := 0; + DestPtr := 0; + SourcePtr := 0; - while SourcePtr < BytesRead do + while SourcePtr < BytesRead do + begin + { If previous was $FF and current is $00 then skip.. } + if not LastWasFF or (SourceBuf[SourcePtr] <> $00) then begin - { If previous was $FF and current is $00 then skip.. } - if not LastWasFF or (SourceBuf[SourcePtr] <> #$00) then - begin - { ..otherwise copy } - DestBuf[DestPtr] := SourceBuf[SourcePtr]; - Inc(DestPtr); - end; - - LastWasFF := SourceBuf[SourcePtr] = #$FF; - Inc(SourcePtr); + { ..otherwise copy } + DestBuf[DestPtr] := SourceBuf[SourcePtr]; + Inc(DestPtr); end; - Dest.Write(DestBuf^, DestPtr); + + LastWasFF := SourceBuf[SourcePtr] = $FF; + Inc(SourcePtr); end; - finally - FreeMem(DestBuf); - FreeMem(SourceBuf); + Dest.Write(DestBuf[0], DestPtr); end; end; Modified: trunk/jvcl/run/JvInterpreter.pas =================================================================== --- trunk/jvcl/run/JvInterpreter.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvInterpreter.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -1760,23 +1760,25 @@ procedure StringSaveToStream(Stream: TStream; const S: string); var L: Integer; - P: PChar; + UTF8Str: UTF8String; begin - L := Length(S); + UTF8Str := UTF8Encode(S); + L := Length(UTF8Str); Stream.WriteBuffer(L, SizeOf(L)); - P := PChar(S); - Stream.WriteBuffer(P^, L); + if L > 0 then + Stream.WriteBuffer(UTF8Str[1], L); end; function StringLoadFromStream(Stream: TStream): string; var L: Integer; - P: PChar; + UTF8Str: UTF8String; begin Stream.ReadBuffer(L, SizeOf(L)); - SetLength(Result, L); - P := PChar(Result); - Stream.ReadBuffer(P^, L); + SetLength(UTF8Str, L); + if L > 0 then + Stream.ReadBuffer(UTF8Str[1], L); + Result := UTF8ToString(UTF8Str); end; procedure IntSaveToStream(Stream: TStream; AInt: Integer); Modified: trunk/jvcl/run/JvInterpreter_Classes.pas =================================================================== --- trunk/jvcl/run/JvInterpreter_Classes.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvInterpreter_Classes.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -741,12 +741,12 @@ procedure TStream_ReadBuffer(var Value: Variant; Args: TJvInterpreterArgs); var - P: PChar; - S: string; + S: AnsiString; begin + // ahuser: Shouldn't this be the opposite of TStream_WriteBuffer ? SetLength(S, Integer(Args.Values[1])); - P := PChar(S); - TStream(Args.Obj).ReadBuffer(P^, Args.Values[1]); + if S <> '' then + TStream(Args.Obj).ReadBuffer(S[1], Args.Values[1]); Args.Values[0] := S; end; Modified: trunk/jvcl/run/JvJCLUtils.pas =================================================================== --- trunk/jvcl/run/JvJCLUtils.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvJCLUtils.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -139,6 +139,10 @@ function ReadCharsFromStream(Stream: TStream; var Buf: array of AnsiChar; BufSize: Integer): Integer; // ANSI-Stream function WriteStringToStream(Stream: TStream; const Buf: AnsiString; BufSize: Integer): Integer; // ANSI-Stream +{$IFNDEF COMPILER12_UP} +function UTF8ToString(const S: UTF8String): string; {$IFDEF SUPPORTS_INLINE} inline; {$ENDIF} +{$ENDIF ~COMPILER12_UP} + const DefaultDateOrder = doDMY; CenturyOffset: Byte = 60; @@ -1505,6 +1509,12 @@ {$ENDIF CLR} end; +{$IFNDEF COMPILER12_UP} +function UTF8ToString(const S: UTF8String): string; +begin + Result := UTF8Decode(S); +end; +{$ENDIF ~COMPILER12_UP} // DEPRECATED: // StrToFloatUS uses US '.' as decimal separator and ',' as thousand separator @@ -4009,12 +4019,9 @@ {$IFNDEF CLR} procedure MemStreamToClipBoard(MemStream: TMemoryStream; const Format: Word); - var Data: THandle; DataPtr: Pointer; - - begin Clipboard.Open; try @@ -4038,11 +4045,9 @@ end; procedure ClipBoardToMemStream(MemStream: TMemoryStream; const Format: Word); - var Data: THandle; DataPtr: Pointer; - begin Clipboard.Open; try Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvListView.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -964,7 +964,8 @@ //=== { TJvListView } ======================================================== const - cLISTVIEW01 = 'LISTVIEW01'; + cLISTVIEW01 = 'LISTVIEW01'; // 10 chars + cLISTVIEW02 = 'LISTVIEW01'; // 10 chars constructor TJvListView.Create(AOwner: TComponent); begin @@ -1277,18 +1278,15 @@ end; end; -// (rom) a 100 char buffer is silly - procedure TJvListView.LoadFromStream(Stream: TStream); var - Buf: array [0..100] of Char; Start: Integer; procedure LoadOldStyle(Stream: TStream); var I, J, K: Integer; Buf: array [0..100] of Byte; - st: string; + st: AnsiString; ch1, checks: Boolean; t: TListItem; begin @@ -1302,7 +1300,7 @@ ch1 := CheckBoxes; while I < Stream.Size do begin - J := Stream.Read(Buf, 100); + J := Stream.Read(Buf, SizeOf(Buf)); if Assigned(FOnLoadProgress) then FOnLoadProgress(Self, J, Stream.Size - Start); I := I + J; @@ -1311,21 +1309,21 @@ begin while (K < J) and (Buf[K] <> 0) and (Buf[K] <> 1) do begin - st := st + Char(Buf[K]); + st := st + AnsiChar(Buf[K]); Inc(K); end; if K < J then begin if t <> nil then - t.SubItems.Add(st) + t.SubItems.Add(string(st)) else begin t := Items.Add; checks := checks or (st[1] = 'T'); t.Checked := st[1] = 'T'; st := Copy(st, 2, Length(st)); - t.Caption := st; + t.Caption := string(st); end; if Buf[K] = 1 then t := nil; @@ -1341,13 +1339,13 @@ procedure LoadNewStyle(Stream: TStream); const LV_HASCHECKBOXES = $80; - // hs- LV_CHECKED = $8000; var Count, I, J: SmallInt; Options: Byte; + UTF8St: UTF8String; st: string; t: TListItem; - Buf: array [0..2048] of Char; + Buf: array of AnsiChar; begin try Self.Items.BeginUpdate; @@ -1370,34 +1368,30 @@ t := Self.Items.Add; for I := 1 to Count do begin - // hs- if I = 1 then begin Stream.Read(Options, SizeOf(Options)); if CheckBoxes then t.Checked := Boolean(Options and Ord(True)); end; - // -hs - (* hs- - Stream.Read(J, SizeOf(I)); - -hs *) Stream.Read(J, SizeOf(J)); //Read the string - FillChar(Buf, SizeOf(Buf), #0); - Stream.Read(Buf, J); - st := Buf; - - if I = 1 then + if Length(Buf) < J then + SetLength(Buf, J); + if J > 0 then begin - t.Caption := st; - (* hs- - if CheckBoxes then - t.Checked := (I and LV_CHECKED) = LV_CHECKED; - -hs *) + 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; end; @@ -1405,6 +1399,8 @@ end; end; +var + Buf: array [0..10] of AnsiChar; begin Start := Stream.Position; Stream.Read(Buf, 10); @@ -1436,7 +1432,7 @@ var I, J, K: Integer; b, c, d, e: Byte; - st: string; + st: AnsiString; Buf: array [0..1000] of Byte; begin b := 0; @@ -1449,7 +1445,7 @@ begin if Assigned(FOnSaveProgress) then FOnSaveProgress(Self, I + 1, Self.Items.Count); - st := Self.Items[I].Caption; + st := AnsiString(Self.Items[I].Caption); for K := 1 to Length(st) do Buf[K - 1] := Byte(st[K]); K := Length(st); @@ -1466,7 +1462,7 @@ Stream.Write(b, 1); for J := 0 to Self.Items[I].SubItems.Count - 2 do begin - st := Self.Items[I].SubItems[J]; + st := AnsiString(Self.Items[I].SubItems[J]); for K := 1 to Length(st) do Buf[K - 1] := Byte(st[K]); K := Length(st); @@ -1474,7 +1470,7 @@ Stream.Write(b, 1); end; J := Self.Items[I].SubItems.Count - 1; - st := Self.Items[I].SubItems[J]; + st := AnsiString(Self.Items[I].SubItems[J]); for K := 1 to Length(st) do Buf[K - 1] := Byte(st[K]); K := Length(st); @@ -1487,26 +1483,24 @@ procedure SaveNewStyle(Stream: TStream); const LV_HASCHECKBOXES = $80; - // hs- LV_CHECKED = $8000; - var - Buf: array [0..100] of Char; - // hs- I, J: Word; - I: Integer; - J: SmallInt; - // hs Options : Byte; - Options, IsChecked: Byte; - procedure WriteString(const Txt: string); var I: Word; + UTF8Txt: UTF8String; begin - I := Length(Txt); + UTF8Txt := UTF8Encode(Txt); + I := Length(UTF8Txt); Stream.Write(I, SizeOf(I)); if I > 0 then - Stream.Write(Txt[1], I); + Stream.Write(UTF8Txt[1], I); end; + var + Buf: array [0..100] of AnsiChar; + I: Integer; + J: SmallInt; + Options, IsChecked: Byte; begin Buf := cLISTVIEW01; Stream.Write(Buf, 10); @@ -1520,10 +1514,8 @@ begin J := SubItems.Count + 1; Stream.Write(J, SizeOf(J)); - // hs- IsChecked := Options or (Byte(Ord(Checked))); Stream.Write(IsChecked, SizeOf(IsChecked)); - // -hs WriteString(Items[I].Caption); for J := 0 to Items[I].SubItems.Count - 1 do WriteString(SubItems[J]); Modified: trunk/jvcl/run/JvRichEdit.pas =================================================================== --- trunk/jvcl/run/JvRichEdit.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvRichEdit.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -283,8 +283,8 @@ procedure Done; virtual; function Retry: Boolean; virtual; - function ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; virtual; - function ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; virtual; + function ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; virtual; + function ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; virtual; function UserCancel: Boolean; virtual; function Error: Boolean; virtual; @@ -307,8 +307,8 @@ function Open(Stream: TStream; const AKind: TJvConversionKind): Boolean; override; procedure Done; override; function Retry: Boolean; override; - function ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; - function ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; + function ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; + function ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; property Stream: TStream read FStream; end; @@ -330,8 +330,8 @@ TJvOEMConversion = class(TJvStreamConversion) public - function ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; - function ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; + function ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; + function ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; function TextKind: TJvConversionTextKind; override; end; @@ -340,7 +340,7 @@ { typedef long (PASCAL *PFN_RTF)(long, long); } PFN_RTF = function(I1, I2: Longint): Longint; stdcall; { long PASCAL InitConverter32(HANDLE hWnd, char *szModule); } - TInitConverter32 = function(hWnd: THandle; szModule: PChar): LongBool; stdcall; + TInitConverter32 = function(hWnd: THandle; szModule: PAnsiChar): LongBool; stdcall; { void PASCAL UninitConverter(void); } TUninitConverter = procedure; stdcall; { void PASCAL GetReadNames(HANDLE haszClass, HANDLE haszDescrip, HANDLE haszExt); } @@ -358,7 +358,7 @@ TRtfToForeign32 = function(ghszFile: THandle; pstgForeign: Pointer; ghBuff, ghshClass: THandle; lpfnIn: PFN_RTF): FCE; stdcall; { long PASCAL CchFetchLpszError(long fce, char FAR *lpszError, long cb); } - TCchFetchLpszError = function(fce: Longint; lpszError: PChar; cb: Longint): Longint; stdcall; + TCchFetchLpszError = function(fce: Longint; lpszError: PAnsiChar; cb: Longint): Longint; stdcall; { long PASCAL FRegisterConverter(HANDLE hkeyRoot); } TFRegisterConverter = function(hkeyRoot: THandle): Longint; stdcall; @@ -386,7 +386,7 @@ FBytesAvailable: Integer; { Buffer accessable by the converter dll } FBuffer: HGLOBAL; - FBufferPtr: PChar; + FBufferPtr: PAnsiChar; FTempProgress: Integer; { Thread synchronization based on the source of Wordpad, see @@ -472,8 +472,8 @@ function IsFormatCorrect(const AFileName: string): Boolean; override; function TranslateError(ErrorCode: FCE): string; - function ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; - function ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; + function ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; + function ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; override; function UserCancel: Boolean; override; function Error: Boolean; override; @@ -1423,7 +1423,7 @@ RichLangOptions: array[TRichLangOption] of DWORD = (IMF_AUTOKEYBOARD, IMF_AUTOFONT, IMF_IMECANCELCOMPLETE, IMF_IMEALWAYSSENDNOTIFY); - CHex: array[0..$F] of Char = + CHex: array[0..$F] of AnsiChar = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); @@ -1685,7 +1685,7 @@ function CoAllocCStr(const S: string): PChar; begin - Result := StrCopy(CoTaskMemAlloc(Length(S) + 1), PChar(S)); + Result := StrCopy(CoTaskMemAlloc(Length(S) * SizeOf(Char) + 1), PChar(S)); end; function WStrToString(P: PWideChar): string; @@ -1757,7 +1757,7 @@ try pcb := 0; if Converter <> nil then - pcb := Converter.ConvertWrite({$IFNDEF COMPILER12_UP}PChar{$ENDIF !COMPILER12_UP}(pbBuff), cb); + pcb := Converter.ConvertWrite({$IFNDEF COMPILER12_UP}PAnsiChar{$ENDIF !COMPILER12_UP}(pbBuff), cb); except Result := WriteError; end; @@ -1881,11 +1881,11 @@ function TCookie.Load(Buffer: PByte; BufferSize: Longint): Longint; var - pBuff: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; + pBuff: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; begin BufferSize := BufferSize div 2; Result := 0; - pBuff := {$IFNDEF COMPILER12_UP}PChar{$ENDIF !COMPILER12_UP}(Buffer) + BufferSize; + pBuff := {$IFNDEF COMPILER12_UP}PAnsiChar{$ENDIF !COMPILER12_UP}(Buffer) + BufferSize; if Converter <> nil then Result := Converter.ConvertRead(pBuff, BufferSize); if Result > 0 then @@ -1902,7 +1902,7 @@ Result := 0; pBuff := PWideChar(Buffer) + BufferSize div 2; if Converter <> nil then - Result := Converter.ConvertRead({$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}(pBuff), BufferSize); + Result := Converter.ConvertRead({$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}(pBuff), BufferSize); if Result > 0 then Result := 2 * AdjustLineBreaksW(PWideChar(Buffer), PWideChar(pBuff), Result div 2); end; @@ -1958,7 +1958,7 @@ end; end; -function StringToHGLOBAL(const S: string): HGLOBAL; +function AnsiStringToHGLOBAL(const S: AnsiString): HGLOBAL; var DataPtr: Pointer; begin @@ -1966,7 +1966,7 @@ try DataPtr := GlobalLock(Result); try - Move(PChar(S)^, DataPtr^, Length(S)); + Move(PAnsiChar(S)^, DataPtr^, Length(S) + 1); finally GlobalUnlock(Result); end; @@ -2013,12 +2013,12 @@ procedure BitmapToRTF(ABitmap: TBitmap; AStream: TStream); const CPrefix = '{\rtf1 {\pict\picw%d\pich%d\dibitmap0 '; - CPostfix = ' }}'; + CPostfix = AnsiString(' }}'); var - Header, Bits: PChar; + Header, Bits: PAnsiChar; HeaderSize, BitsSize: DWORD; - P, Q: PChar; - S: string; + P, Q: PAnsiChar; + S: AnsiString; begin GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize); GetMem(Header, 2 * (HeaderSize + BitsSize)); @@ -2045,8 +2045,8 @@ Dec(P); Dec(Q); end; - S := Format(CPrefix, [ABitmap.Width, ABitmap.Height]); - AStream.Write(PChar(S)^, Length(S)); + S := AnsiString(Format(CPrefix, [ABitmap.Width, ABitmap.Height])); + AStream.Write(PAnsiChar(S)^, Length(S)); AStream.Write(Header^, (HeaderSize + BitsSize) * 2); AStream.Write(CPostfix, Length(CPostfix)); finally @@ -2074,15 +2074,15 @@ const CPrefix = '{\rtf1 {\pict\wmetafile8\picw%d\pich%d\picwgoal%d\pichgoal%d '; - CPostfix = ' }}'; + CPostfix = AnsiString(' }}'); var - P, Q: PChar; - S: string; + P, Q: PAnsiChar; + S: AnsiString; DC: HDC; MetafileHandle: HMETAFILE; Size: TPoint; BitsLength: UINT; - Bits: PChar; + Bits: PAnsiChar; begin Result := False; @@ -2123,10 +2123,10 @@ Dec(Q); end; - S := Format(CPrefix, [Size.X, Size.Y, + S := AnsiString(Format(CPrefix, [Size.X, Size.Y, MulDiv(ABitmap.Width, CTwipsPerInch, Screen.PixelsPerInch), - MulDiv(ABitmap.Height, CTwipsPerInch, Screen.PixelsPerInch)]); - AStream.Write(PChar(S)^, Length(S)); + MulDiv(ABitmap.Height, CTwipsPerInch, Screen.PixelsPerInch)])); + AStream.Write(PAnsiChar(S)^, Length(S)); AStream.Write(Bits^, BitsLength * 2); AStream.Write(CPostfix, Length(CPostfix)); @@ -2390,13 +2390,13 @@ Result := True; end; -function TJvConversion.ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; +function TJvConversion.ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; begin Result := -1; end; -function TJvConversion.ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; +function TJvConversion.ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; begin Result := -1; @@ -4669,11 +4669,11 @@ DoError(Result); end; -function TJvMSTextConversion.ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; +function TJvMSTextConversion.ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; var AvailableBufferSize: Integer; - DestBufferPtr: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; + DestBufferPtr: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; ByteCount: Integer; begin { Fill Buffer with BufSize bytes data from FBuffer } @@ -4719,10 +4719,10 @@ Result := BufSize; end; -function TJvMSTextConversion.ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; +function TJvMSTextConversion.ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; var - DestBufferPtr: PChar; + DestBufferPtr: PAnsiChar; begin if not Assigned(FForeignToRtf32) then DoError(fceWriteErr); @@ -4774,8 +4774,8 @@ Exit; end; - hDesc := StringToHGLOBAL(''); - hSubset := StringToHGLOBAL(''); + hDesc := AnsiStringToHGLOBAL(''); + hSubset := AnsiStringToHGLOBAL(''); if FConverterKind = ckImport then begin @@ -4981,7 +4981,7 @@ LoadConverter; if not Assigned(FInitConverter32) or - not FInitConverter32(ParentWindow, PChar(AnsiUpperCaseFileName(Application.ExeName))) then + not FInitConverter32(ParentWindow, PAnsiChar(AnsiString(AnsiUpperCaseFileName(Application.ExeName)))) then raise EMSTextConversionError.CreateRes(@RsECouldNotInitConverter); end; @@ -4999,7 +4999,7 @@ Exit; hFile := FileNameToHGLOBAL({$IFDEF SUPPORTS_UNICODE}UTF8Encode{$ENDIF SUPPORTS_UNICODE}(AFileName)); - hClass := StringToHGLOBAL(''); + hClass := AnsiStringToHGLOBAL(''); try Result := FIsFormatCorrect32(hFile, hClass) = fceTrue; finally @@ -5090,7 +5090,7 @@ CMaxErrorStrSize = 1024; { arbitrary value } var Data: THandle; - DataPtr: PChar; + DataPtr: PAnsiChar; Size: Longint; begin InitConverter; @@ -5161,7 +5161,7 @@ //=== { TJvOEMConversion } =================================================== -function TJvOEMConversion.ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; +function TJvOEMConversion.ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; var Mem: TMemoryStream; @@ -5169,14 +5169,14 @@ Mem := TMemoryStream.Create; try Mem.SetSize(BufSize); - Result := inherited ConvertRead({$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}(Mem.Memory), BufSize); + Result := inherited ConvertRead({$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}(Mem.Memory), BufSize); OemToCharBuffA(PAnsiChar(Mem.Memory), PAnsiChar(Buffer), Result); finally Mem.Free; end; end; -function TJvOEMConversion.ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; +function TJvOEMConversion.ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; var Mem: TMemoryStream; @@ -5185,7 +5185,7 @@ try Mem.SetSize(BufSize); CharToOemBuffA(PAnsiChar(Buffer), PAnsiChar(Mem.Memory), BufSize); - Result := inherited ConvertWrite({$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}(Mem.Memory), BufSize); + Result := inherited ConvertWrite({$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}(Mem.Memory), BufSize); finally Mem.Free; end; @@ -6373,11 +6373,11 @@ function TJvRTFConversion.IsFormatCorrect(AStream: TStream): Boolean; const - CRTFHeader = '{\rtf'; + CRTFHeader = AnsiString('{\rtf'); CRTFHeaderSize = Length(CRTFHeader); var SavedPosition: Int64; - Buffer: array[0..CRTFHeaderSize] of Char; // + #0 + Buffer: array[0..CRTFHeaderSize] of AnsiChar; // + #0 begin SavedPosition := AStream.Position; try @@ -6385,14 +6385,13 @@ Result := (AStream.Read(Buffer, CRTFHeaderSize) = CRTFHeaderSize) and - (StrIComp(PChar(CRTFHeader), Buffer) = 0); + (StrIComp(PAnsiChar(CRTFHeader), Buffer) = 0); finally AStream.Position := SavedPosition; end; end; -function TJvRTFConversion.IsFormatCorrect( - const AFileName: string): Boolean; +function TJvRTFConversion.IsFormatCorrect(const AFileName: string): Boolean; var LStream: TStream; begin @@ -6415,7 +6414,7 @@ //=== { TJvStreamConversion } ================================================ -function TJvStreamConversion.ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; +function TJvStreamConversion.ConvertRead(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; begin Result := FStream.Read(Buffer^, BufSize); @@ -6426,7 +6425,7 @@ end; end; -function TJvStreamConversion.ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; +function TJvStreamConversion.ConvertWrite(Buffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PAnsiChar{$ENDIF COMPILER12_UP}; BufSize: Integer): Integer; begin Result := FStream.Write(Buffer^, BufSize); @@ -7353,8 +7352,7 @@ if @lpszLocation <> nil then begin if Trim(FRichEdit.Title) <> '' then - lpszLocation := CoAllocCStr(Format('%s - %s', - [FRichEdit.Title, Application.Title])) + lpszLocation := CoAllocCStr(Format('%s - %s', [FRichEdit.Title, Application.Title])) else lpszLocation := CoAllocCStr(Application.Title); end; Modified: trunk/jvcl/run/JvSchedEvtStore.pas =================================================================== --- trunk/jvcl/run/JvSchedEvtStore.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvSchedEvtStore.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -549,7 +549,7 @@ procedure TBinStore.CheckSignature; var - S: string; + S: AnsiString; begin SetLength(S, Length(BinStreamID)); FStream.ReadBuffer(S[1], Length(BinStreamID)); @@ -734,7 +734,7 @@ procedure TBinStore.StoreSignature; var - S: string; + S: AnsiString; begin S := BinStreamID; FStream.WriteBuffer(S[1], Length(S)); @@ -1385,27 +1385,29 @@ OrgPos: Integer; SIdx: Integer; Done: Boolean; + AnsiStr: AnsiString; begin OrgPos := FStream.Position; - Result := ''; + AnsiStr := ''; SIdx := 0; repeat Inc(SIdx); - SetLength(Result, Length(Result) + 255); - SetLength(Result, SIdx + FStream.Read(Result[SIdx], 255)); - Done := SIdx = Length(Result); + SetLength(AnsiStr, Length(AnsiStr) + 255); + SetLength(AnsiStr, SIdx + FStream.Read(AnsiStr[SIdx], 255)); + Done := SIdx = Length(AnsiStr); if not Done then begin - while (SIdx < Length(Result)) and (Copy(Result, SIdx, Length(sLineBreak)) <> sLineBreak) do + while (SIdx < Length(AnsiStr)) and (Copy(AnsiStr, SIdx, Length(sLineBreak)) <> sLineBreak) do Inc(SIdx); - Done := Copy(Result, SIdx, Length(sLineBreak)) = sLineBreak; + Done := Copy(AnsiStr, SIdx, Length(sLineBreak)) = sLineBreak; if Done then - SetLength(Result, SIdx + 1); + SetLength(AnsiStr, SIdx + 1); end; until Done; - FStream.Position := OrgPos + Length(Result); - if Copy(Result, Length(Result) - 1, Length(sLineBreak)) = sLineBreak then - SetLength(Result, Length(Result) - Length(sLineBreak)); + FStream.Position := OrgPos + Length(AnsiStr); + if Copy(AnsiStr, Length(AnsiStr) - 1, Length(sLineBreak)) = sLineBreak then + SetLength(AnsiStr, Length(AnsiStr) - Length(sLineBreak)); + Result := string(AnsiStr); end; function TTxtStore.ReadNextLine: string; @@ -1435,10 +1437,11 @@ procedure TTxtStore.WriteLn(const S: string); var - S2: string; + S2: AnsiString; begin - S2 := S + sLineBreak; - FStream.WriteBuffer(S2[1], Length(S2)); + S2 := AnsiString(S + sLineBreak); + if S2 <> '' then + FStream.WriteBuffer(S2[1], Length(S2)); end; function TTxtStore.ReadEnum(const AName: string; TypeInfo: PTypeInfo): Integer; Modified: trunk/jvcl/run/JvTMTimeLine.pas =================================================================== --- trunk/jvcl/run/JvTMTimeLine.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvTMTimeLine.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -337,12 +337,10 @@ uses Consts, - JvJVCLUtils, JvThemes; + JvJCLUtils, JvJVCLUtils, JvThemes; {$R JvTMTimeLine.res} - - const cMagic = 'Jv.TMTIMELINE1'; @@ -1189,11 +1187,13 @@ procedure WriteStr(Stream: TStream; const Value: string); var I: Integer; + UTF8Value: UTF8String; begin - I := Length(Value); + UTF8Value := UTF8Encode(Value); + I := Length(UTF8Value); WriteInt(Stream, I); if I > 0 then - Stream.Write(Value[1], I); + Stream.Write(UTF8Value[1], I); end; function ReadInt(Stream: TStream): Integer; @@ -1204,11 +1204,15 @@ function ReadStr(Stream: TStream): string; var I: Integer; + UTF8Value: UTF8String; begin I := ReadInt(Stream); SetLength(Result, I); if I > 0 then - Stream.Read(Result[1], I); + begin + Stream.Read(UTF8Value[1], I); + Result := UTF8ToString(UTF8Value); + end; end; function TJvCustomTMTimeline.ReadMagic(Stream: TStream): Boolean; Modified: trunk/jvcl/run/JvTimeLine.pas =================================================================== --- trunk/jvcl/run/JvTimeLine.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvTimeLine.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -509,7 +509,7 @@ {$IFDEF COMPILER6_UP} DateUtils, {$ENDIF COMPILER6_UP} - JvJVCLUtils, JvThemes; + JvJCLUtils, JvJVCLUtils, JvThemes; {$R JvTimeLine.res} @@ -592,7 +592,7 @@ procedure TJvTimeItem.Remove; begin - InvalidateRect(FParent.FTimeLine.Handle, @FRect, True); + Windows.InvalidateRect(FParent.FTimeLine.Handle, @FRect, True); // (rom) suspicious inherited Free; end; @@ -616,9 +616,9 @@ procedure TJvTimeItem.Update; begin - InvalidateRect(FParent.FTimeLine.Handle, @FRect, True); + Windows.InvalidateRect(FParent.FTimeLine.Handle, @FRect, True); FParent.FTimeLine.UpdateItem(Index, FParent.FTimeLine.Canvas); - InvalidateRect(FParent.FTimeLine.Handle, @FRect, True); + Windows.InvalidateRect(FParent.FTimeLine.Handle, @FRect, True); end; function TJvTimeItem.GetDisplayName: string; @@ -2049,7 +2049,7 @@ ACanvas.Rectangle(R); R.Left := R.Left + 2; SetBkMode(ACanvas.Handle, TRANSPARENT); - DrawTextEx(ACanvas.Handle, PChar(Item.Caption), Length(Item.Caption), R, + Windows.DrawTextEx(ACanvas.Handle, PChar(Item.Caption), Length(Item.Caption), R, DT_LEFT or DT_NOPREFIX or DT_SINGLELINE or DT_END_ELLIPSIS, nil); end else @@ -2241,9 +2241,8 @@ UTF8Str := UTF8Str + Ch; Stream.Read(Ch, 1); end; + S := UTF8ToString(UTF8Str); - S := {$IFDEF SUPPORTS_UNICODE}UTF8ToString{$ELSE}{$IFDEF COMPILER6_UP}UTF8Decode{$ENDIF COMPILER6_UP}{$ENDIF SUPPORTS_UNICODE}(UTF8Str); - case I of 0: // Caption Item.Caption := S; @@ -2278,7 +2277,7 @@ var I: Integer; S: string; - UTF8Str: AnsiString; + UTF8Str: UTF8String; begin for I := 0 to Items.Count - 1 do begin @@ -2324,8 +2323,8 @@ SaveItem(Items[I], Stream); end; end; - S := Cr; - Stream.Write(S[1], 1); + UTF8Str := UTF8String(Cr); + Stream.Write(UTF8Str[1], 1); end; procedure TJvCustomTimeLine.BeginUpdate; Modified: trunk/jvcl/run/JvZlibMultiple.pas =================================================================== --- trunk/jvcl/run/JvZlibMultiple.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvZlibMultiple.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -243,21 +243,21 @@ procedure WriteFileRecord(const Directory, FileName: string; FileSize: Integer; CompressedSize: Integer); var B: Byte; - Tab: array [1..256] of Char; + AnsiStr: AnsiString; begin - { (RB) Can be improved } - for B := 1 to Length(Directory) do - Tab[B] := Directory[B]; - B := Length(Directory); + AnsiStr := AnsiString(Directory); + if Length(AnsiStr) > 255 then + SetLength(AnsiStr, 255); + B := Length(AnsiStr); DestStream.Write(B, SizeOf(B)); - DestStream.Write(Tab, B); + DestStream.Write(PAnsiChar(AnsiStr)^, B); - { (RB) Can be improved } - for B := 1 to Length(FileName) do - Tab[B] := FileName[B]; - B := Length(FileName); + AnsiStr := AnsiString(FileName); + if Length(AnsiStr) > 255 then + SetLength(AnsiStr, 255); + B := Length(AnsiStr); DestStream.Write(B, SizeOf(B)); - DestStream.Write(Tab, B); + DestStream.Write(PAnsiChar(AnsiStr)^, B); DestStream.Write(FileSize, SizeOf(FileSize)); DestStream.Write(CompressedSize, SizeOf(CompressedSize)); @@ -378,6 +378,7 @@ ZStream: TJclZLibDecompressStream; CStream: TMemoryStream; B, LastPos: Byte; + AnsiS: AnsiString; S: string; Count, FileSize, I: Integer; Buffer: array [0..1023] of Byte; @@ -394,13 +395,14 @@ begin //Read and force the directory Stream.Read(B, SizeOf(B)); - SetLength(S, B); + SetLength(AnsiS, B); if B > 0 then - Stream.Read(S[1], B); + Stream.Read(AnsiS[1], B); + S := string(AnsiS); fd := Directory + S; if (fd <> '') and (ForceDirectoriesFlag) then - ForceDirectories(fd); + ForceDirectories(fd); if S <> '' then S := IncludeTrailingPathDelimiter(S); @@ -413,9 +415,11 @@ Stream.Read(B, SizeOf(B)); if B > 0 then begin - LastPos := Length(S); - SetLength(S, LastPos + B); - Stream.Read(S[LastPos + 1], B); + AnsiS := AnsiString(S); + LastPos := Length(AnsiS); + SetLength(AnsiS, LastPos + B); + Stream.Read(AnsiS[LastPos + 1], B); + S := string(AnsiS); end; Stream.Read(FileSize, SizeOf(FileSize)); @@ -522,6 +526,7 @@ ZStream: TFileStream; FHByte: Byte; FilePos, HeaderPos, CompressedSize, UnCompressedSize: Integer; + AnsiFileInfo: AnsiString; FileInfo: string; ZStreamSize: Int64; begin @@ -531,18 +536,21 @@ while ZStream.Position < ZStreamSize do begin ZStream.Read(FHByte, SizeOf(FHByte)); - SetLength(FileInfo, FHByte); + SetLength(AnsiFileInfo, FHByte); if FHByte > 0 then - ZStream.Read(FileInfo[1], FHByte); + ZStream.Read(AnsiFileInfo[1], FHByte); + FileInfo := string(AnsiFileInfo); if FileInfo <> '' then FileInfo := IncludeTrailingPathDelimiter(FileInfo); ZStream.Read(FHByte, SizeOf(FHByte)); if FHByte > 0 then begin - HeaderPos := Length(FileInfo); - SetLength(FileInfo, HeaderPos + FHByte); - ZStream.Read(FileInfo[HeaderPos + 1], FHByte); + AnsiFileInfo := AnsiString(FileInfo); + HeaderPos := Length(AnsiFileInfo); + SetLength(AnsiFileInfo, HeaderPos + FHByte); + ZStream.Read(AnsiFileInfo[HeaderPos + 1], FHByte); + FileInfo := string(AnsiFileInfo); end; FileList.Add(FileInfo); Modified: trunk/jvcl/run/JvgXMLSerializer.pas =================================================================== --- trunk/jvcl/run/JvgXMLSerializer.pas 2009-03-21 17:45:12 UTC (rev 12251) +++ trunk/jvcl/run/JvgXMLSerializer.pas 2009-03-21 22:18:25 UTC (rev 12252) @@ -214,9 +214,14 @@ { writes string to output stream. Used for serialization. [translated] } procedure TJvgXMLSerializer.WriteOutStream(const Value: string); +var + AnsiValue: AnsiString; begin if Value <> '' then - OutStream.Write(PChar(Value)[0], Length(Value)); + begin + AnsiValue := AnsiString(Value); + OutStream.Write(AnsiValue[1], Length(AnsiValue)); + end; end; // \xCA\xEE\xED\xE2\xE5\xF0\xF2\xE8\xF0\xF3\xE5\xF2 \xEA\xEE\xEC\xEF\xEE\xED\xE5\xED\xF2 \xE2 XML-\xEA\xEE\xE4 \xE2 \xF1\xEE\xEE\xF2\xE2\xE5\xF2\xF1\xF2\xE2\xE8\xE8 @@ -251,11 +256,11 @@ OutStream := Stream; - WriteOutStream(PChar(Result)); + WriteOutStream(Result); - WriteOutStream(PChar(CR + '<' + Component.ClassName + '>')); + WriteOutStream(CR + '<' + Component.ClassName + '>'); SerializeInternal(Component); - WriteOutStream(PChar(CR + '</' + Component.ClassName + '>')); + WriteOutStream(CR + '</' + Component.ClassName + '>'); end; // \xC2\xED\xF3\xF2\xF0\xE5\xED\xED\xFF\xFF \xEF\xF0\xEE\xF6\xE5\xE4\xF3\xF0\xE0 \xEA\xEE\xED\xE2\xE5\xF0\xF2\xE0\xF6\xE8\xE8 \xEE\xE1\xFA\xE5\xEA\xF2\xE0 \xE2 XML @@ -886,6 +891,7 @@ procedure addElement(const ElementName: string; Data: string); var S: string; + UTF8S: UTF8String; begin if DTDList.IndexOf(ElementName) <> -1 then exit; @@ -894,7 +900,8 @@ if Data = '' then Data := PCDATA; S := S + '(' + Data + ')>'#13#10; - Stream.Write(PChar(S)[0], Length(S)); + UTF8S := UTF8Encode(S); + Stream.Write(UTF8S[1], Length(UTF8S)); end; begin This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2009-03-22 22:44:12
|
Revision: 12254 http://jvcl.svn.sourceforge.net/jvcl/?rev=12254&view=rev Author: jfudickar Date: 2009-03-22 22:44:07 +0000 (Sun, 22 Mar 2009) Log Message: ----------- Fixed Handling of Indexed Entries for JvAppXMLStorage Modified Paths: -------------- trunk/jvcl/run/JvAppXMLStorage.pas trunk/jvcl/run/JvPropertyStore.pas trunk/jvcl/run/JvPropertyStoreEditor.pas Modified: trunk/jvcl/run/JvAppXMLStorage.pas =================================================================== --- trunk/jvcl/run/JvAppXMLStorage.pas 2009-03-22 09:10:44 UTC (rev 12253) +++ trunk/jvcl/run/JvAppXMLStorage.pas 2009-03-22 22:44:07 UTC (rev 12254) @@ -466,9 +466,12 @@ end; procedure TJvCustomAppXMLStorage.SplitKeyPath(const Path: string; out Key, ValueName: string); +var + Index: Integer; begin inherited SplitKeyPath(Path, Key, ValueName); - ValueName := CheckNodeNameCharacters(ValueName); + if SplitNodeNameIndex (ValueName, Index) then + ValueName := ItemNameIndexPath(ValueName, Index); // Recombine both values again for strings which have value in an indexed path directly if Key = '' then Key := Path; end; Modified: trunk/jvcl/run/JvPropertyStore.pas =================================================================== --- trunk/jvcl/run/JvPropertyStore.pas 2009-03-22 09:10:44 UTC (rev 12253) +++ trunk/jvcl/run/JvPropertyStore.pas 2009-03-22 22:44:07 UTC (rev 12254) @@ -952,7 +952,8 @@ FItemName := cItem; FIntIgnoreProperties.Add('ItemName'); FIntIgnoreProperties.Add('FreeObjects'); - FIntIgnoreProperties.Add('CreateListEntries') + FIntIgnoreProperties.Add('CreateListEntries'); + FItemsObjectName := 'ItemName'; end; destructor TJvCustomPropertyListStore.Destroy; Modified: trunk/jvcl/run/JvPropertyStoreEditor.pas =================================================================== --- trunk/jvcl/run/JvPropertyStoreEditor.pas 2009-03-22 09:10:44 UTC (rev 12253) +++ trunk/jvcl/run/JvPropertyStoreEditor.pas 2009-03-22 22:44:07 UTC (rev 12254) @@ -111,8 +111,8 @@ procedure GotoEditObject(EditObject: TPersistent); property InspectedObjectListEditorHandler: IJvPropertyListEditorHandler read FInspectedObjectListEditorHandlerIntf; + published property PropertyStore: TComponent read FPropertyStore write SetPropertyStore; - published property Align; property Anchors; property AutoSize; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2009-03-23 21:09:07
|
Revision: 12257 http://jvcl.svn.sourceforge.net/jvcl/?rev=12257&view=rev Author: ahuser Date: 2009-03-23 21:08:54 +0000 (Mon, 23 Mar 2009) Log Message: ----------- Added checks for empty strings Modified Paths: -------------- trunk/jvcl/run/JvDBTreeView.pas trunk/jvcl/run/JvListView.pas trunk/jvcl/run/JvStringGrid.pas Modified: trunk/jvcl/run/JvDBTreeView.pas =================================================================== --- trunk/jvcl/run/JvDBTreeView.pas 2009-03-22 23:46:27 UTC (rev 12256) +++ trunk/jvcl/run/JvDBTreeView.pas 2009-03-23 21:08:54 UTC (rev 12257) @@ -1486,7 +1486,8 @@ begin FMastersStream.Read(strLength, SizeOf(strLength)); SetLength(temp, strLength); - FMastersStream.Read(temp[1], strLength * SizeOf(Char)); // internally used stream + if strLength > 0 then + FMastersStream.Read(temp[1], strLength * SizeOf(Char)); // internally used stream TJvDBTreeNode(Node).SetMasterValue(temp); FMastersStream.Read(HasChildren, SizeOf(HasChildren)); Node.HasChildren := HasChildren <> 0; @@ -1514,9 +1515,10 @@ begin // save MasterValue as string temp := VarToStr(TJvDBTreeNode(Node).MasterValue); - strLength := length(temp); + strLength := Length(temp); FMastersStream.Write(strLength, SizeOf(strLength)); - FMastersStream.Write(temp[1], strLength * SizeOf(Char)); // internally used stream + if strLength > 0 then + FMastersStream.Write(temp[1], strLength * SizeOf(Char)); // internally used stream HasChildren := Byte(Node.HasChildren); FMastersStream.Write(HasChildren, SizeOf(HasChildren)); Node := Node.GetNext; Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2009-03-22 23:46:27 UTC (rev 12256) +++ trunk/jvcl/run/JvListView.pas 2009-03-23 21:08:54 UTC (rev 12257) @@ -965,7 +965,6 @@ const cLISTVIEW01 = 'LISTVIEW01'; // 10 chars - cLISTVIEW02 = 'LISTVIEW01'; // 10 chars constructor TJvListView.Create(AOwner: TComponent); begin Modified: trunk/jvcl/run/JvStringGrid.pas =================================================================== --- trunk/jvcl/run/JvStringGrid.pas 2009-03-22 23:46:27 UTC (rev 12256) +++ trunk/jvcl/run/JvStringGrid.pas 2009-03-23 21:08:54 UTC (rev 12257) @@ -10,8 +10,8 @@ The Original Code is: JvStringGrid.PAS, released on 2001-02-28. -The Initial Developer of the Original Code is S?stien Buysse [sbuysse att buypin dott com] -Portions created by S?stien Buysse are Copyright (C) 2001 S?stien Buysse. +The Initial Developer of the Original Code is Sebastien Buysse [sbuysse att buypin dott com] +Portions created by Sebastien Buysse are Copyright (C) 2001 S?stien Buysse. All Rights Reserved. Contributor(s): Michael Beck [mbeck att bigfoot dott com]. @@ -892,7 +892,8 @@ else Bytes[K] := Byte(St[K + 1]); {$ENDIF} - Stream.Write(Bytes[0], Len); + if Len > 0 then + Stream.Write(Bytes[0], Len); if J <> ColCount - 1 then Stream.Write(A, 1); end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2009-04-10 20:08:17
|
Revision: 12264 http://jvcl.svn.sourceforge.net/jvcl/?rev=12264&view=rev Author: obones Date: 2009-04-10 20:08:13 +0000 (Fri, 10 Apr 2009) Log Message: ----------- D5/C5 compatibility issues. Modified Paths: -------------- trunk/jvcl/run/JvDockControlForm.pas trunk/jvcl/run/JvDockTree.pas trunk/jvcl/run/JvListView.pas trunk/jvcl/run/JvTMTimeLine.pas trunk/jvcl/run/JvVCL5Utils.pas trunk/jvcl/run/JvgXMLSerializer.pas Modified: trunk/jvcl/run/JvDockControlForm.pas =================================================================== --- trunk/jvcl/run/JvDockControlForm.pas 2009-04-01 23:17:57 UTC (rev 12263) +++ trunk/jvcl/run/JvDockControlForm.pas 2009-04-10 20:08:13 UTC (rev 12264) @@ -894,7 +894,7 @@ {$ELSE} IniFiles, Registry, {$ENDIF USEJVCL} - JvDockSupportProc, JvDockGlobals, JvDockInfo, JvDockVSNetStyle; + JvDockSupportProc, JvDockGlobals, JvDockInfo, JvDockVSNetStyle, JvVCL5Utils; {$R JvDockableForm.dfm} {$R JvDockConjoinHost.dfm} Modified: trunk/jvcl/run/JvDockTree.pas =================================================================== --- trunk/jvcl/run/JvDockTree.pas 2009-04-01 23:17:57 UTC (rev 12263) +++ trunk/jvcl/run/JvDockTree.pas 2009-04-10 20:08:13 UTC (rev 12264) @@ -616,7 +616,7 @@ {$ENDIF JVCLThemesEnabled} Consts, SysUtils, Math, JvDockControlForm, JvDockSupportProc, JvDockGlobals, JvDockVSNetStyle, - JvDockAdvTree; + JvDockAdvTree, JvVCL5Utils; type TWinControlAccessProtected = class(TWinControl); Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2009-04-01 23:17:57 UTC (rev 12263) +++ trunk/jvcl/run/JvListView.pas 2009-04-10 20:08:13 UTC (rev 12264) @@ -502,7 +502,7 @@ {$ELSE} ActiveX, {$ENDIF HAS_UNIT_VARIANTS} - JclWideStrings, + JclWideStrings, JvConsts, JvResources; type Modified: trunk/jvcl/run/JvTMTimeLine.pas =================================================================== --- trunk/jvcl/run/JvTMTimeLine.pas 2009-04-01 23:17:57 UTC (rev 12263) +++ trunk/jvcl/run/JvTMTimeLine.pas 2009-04-10 20:08:13 UTC (rev 12264) @@ -337,7 +337,7 @@ uses Consts, - JvJCLUtils, JvJVCLUtils, JvThemes; + JvJCLUtils, JvJVCLUtils, JvVCL5Utils, JvThemes; {$R JvTMTimeLine.res} @@ -580,7 +580,7 @@ Self.Date := Delta; end; -function TJvCustomTMTimeline.GetRectForDate(ADate: TDate): TRect; +function TJvCustomTMTimeline.GetRectForDate(ADate: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate): TRect; begin // all rects are the same size... Result := Rect(0, 0, DayWidth, ClientHeight + 1); @@ -593,7 +593,7 @@ OffsetRect(Result, ButtonWidth, 0); end; -function TJvCustomTMTimeline.DateFromPos(APos: Integer): TDate; +function TJvCustomTMTimeline.DateFromPos(APos: Integer): {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate; var Tmp: Integer; begin @@ -785,7 +785,7 @@ end; end; -procedure TJvCustomTMTimeline.DrawImage(ACanvas: TCanvas; ADate: TDate; const ARect: TRect); +procedure TJvCustomTMTimeline.DrawImage(ACanvas: TCanvas; ADate: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate; const ARect: TRect); var I, X, Y: Integer; begin @@ -826,7 +826,7 @@ end; end; -procedure TJvCustomTMTimeline.SetFirstDate(const Value: TDate); +procedure TJvCustomTMTimeline.SetFirstDate(const Value: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate); begin if Trunc(FDate) <> Trunc(Value) then begin @@ -859,7 +859,7 @@ Invalidate; end; -procedure TJvCustomTMTimeline.SetSelDate(const Value: TDate); +procedure TJvCustomTMTimeline.SetSelDate(const Value: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate); var R: TRect; begin @@ -941,14 +941,14 @@ FImages := nil; end; -function TJvCustomTMTimeline.GetImageIndex(ADate: TDate): Integer; +function TJvCustomTMTimeline.GetImageIndex(ADate: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate): Integer; begin Result := FDateImages.IndexOf(IntToStr(Trunc(ADate))); if Result > -1 then Result := Integer(FDateImages.Objects[Result]); end; -procedure TJvCustomTMTimeline.SetImageIndex(ADate: TDate; +procedure TJvCustomTMTimeline.SetImageIndex(ADate: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate; const Value: Integer); var I: Integer; @@ -960,7 +960,7 @@ Invalidate; end; -function TJvCustomTMTimeline.GetObjects(ADate: TDate): TObject; +function TJvCustomTMTimeline.GetObjects(ADate: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate): TObject; var I: Integer; begin @@ -970,7 +970,7 @@ Result := FObjects.Objects[I]; end; -procedure TJvCustomTMTimeline.SetObjects(ADate: TDate; const Value: TObject); +procedure TJvCustomTMTimeline.SetObjects(ADate: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate; const Value: TObject); var I: Integer; begin @@ -1092,7 +1092,7 @@ FRightClickSelect := Value; end; -procedure TJvCustomTMTimeline.SetMaxDate(const Value: TDate); +procedure TJvCustomTMTimeline.SetMaxDate(const Value: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate); begin if Trunc(FMaxDate) <> Trunc(Value) then begin @@ -1106,7 +1106,7 @@ end; end; -procedure TJvCustomTMTimeline.SetMinDate(const Value: TDate); +procedure TJvCustomTMTimeline.SetMinDate(const Value: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate); begin if Trunc(FMinDate) <> Trunc(Value) then begin @@ -1145,7 +1145,7 @@ FDateImages.Clear; end; -function TJvCustomTMTimeline.GetLastVisibleDate: TDate; +function TJvCustomTMTimeline.GetLastVisibleDate: {$IFNDEF RTL200_UP}Controls.{$ENDIF ~RTL200_UP}TDate; var Tmp: Integer; begin Modified: trunk/jvcl/run/JvVCL5Utils.pas =================================================================== --- trunk/jvcl/run/JvVCL5Utils.pas 2009-04-01 23:17:57 UTC (rev 12263) +++ trunk/jvcl/run/JvVCL5Utils.pas 2009-04-10 20:08:13 UTC (rev 12264) @@ -192,10 +192,16 @@ // Misc function GetMonitorWorkareaRect(Monitor: TMonitor): TRect; +{$IFNDEF RTL200_UP} type UTF8String = type string; +{$ENDIF ~RTL200_UP} +{$IFNDEF DELPHI6_UP} function Utf8Decode(const S: UTF8String): WideString; +function Utf8Encode(const S: WideString): UTF8String; +{$ENDIF ~DELPHI6_UP} + function Utf8ToAnsi(const S: UTF8String): string; // System @@ -289,7 +295,7 @@ uses CommCtrl, - JclSysUtils; + JclStringConversions, JclSysUtils; var GlobalCollectionHooked: Boolean = False; @@ -1205,6 +1211,10 @@ Result := Utf8Decode(S); end; +function Utf8Encode(const S: WideString): UTF8String; +begin + Result := WideStringToUTF8(S); +end; //=== { TCustomImageList } =================================================== Modified: trunk/jvcl/run/JvgXMLSerializer.pas =================================================================== --- trunk/jvcl/run/JvgXMLSerializer.pas 2009-04-01 23:17:57 UTC (rev 12263) +++ trunk/jvcl/run/JvgXMLSerializer.pas 2009-04-10 20:08:13 UTC (rev 12264) @@ -178,7 +178,7 @@ uses {$IFDEF USEJVCL} - JvResources, + JvVCL5Utils, JvResources, {$ENDIF USEJVCL} JvgUtils; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2009-04-12 18:42:02
|
Revision: 12266 http://jvcl.svn.sourceforge.net/jvcl/?rev=12266&view=rev Author: jfudickar Date: 2009-04-12 18:41:58 +0000 (Sun, 12 Apr 2009) Log Message: ----------- Mantis 0004740: Countdown in JvDSADialogs and other sizing problems (Mantis #0004740) Modified Paths: -------------- trunk/jvcl/run/JvDSADialogs.pas trunk/jvcl/run/JvDynControlEngineDevExpCx.pas trunk/jvcl/run/JvJVCLUtils.pas Modified: trunk/jvcl/run/JvDSADialogs.pas =================================================================== --- trunk/jvcl/run/JvDSADialogs.pas 2009-04-11 18:08:13 UTC (rev 12265) +++ trunk/jvcl/run/JvDSADialogs.pas 2009-04-12 18:41:58 UTC (rev 12266) @@ -39,7 +39,8 @@ {$ENDIF MSWINDOWS} SysUtils, Classes, Contnrs, Graphics, Controls, Forms, StdCtrls, Dialogs, ExtCtrls, JvComponent, - JvComponentBase, JvDynControlEngine, JvTypes, JvAppStorage; + JvComponentBase, JvDynControlEngine, JvTypes, JvAppStorage, + JvDynControlEngineIntf; type TDlgCenterKind = (dckScreen, dckMainForm, dckActiveForm); @@ -48,7 +49,7 @@ private FTimeout: Integer; FTimer: TTimer; - FCountdown: TLabel; + FCountdown: IJvDynControlCaption; FMsg: string; protected procedure CustomKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); @@ -477,7 +478,7 @@ JclRegistry, {$ENDIF MSWINDOWS} JclBase, JclSysUtils, - JvDynControlEngineIntf, JvConsts, JvResources; + JvConsts, JvResources; const cDSAStateValueName = 'DSA_State'; // do not localize @@ -559,8 +560,6 @@ CancelAutoClose; if (Shift = [ssCtrl]) and (Key = Word('C')) then begin - // (rom) deactivated annoying - // SysUtils.Beep; WriteToClipboard(GetFormText); end; end; @@ -597,7 +596,7 @@ end; end; end; - FCountdown := TLabel(FindComponent('Countdown')); + Supports(FindComponent('CountDown'),IJvDynControlCaption, FCountDown); end; procedure TDSAMessageForm.HelpButtonClick(Sender: TObject); @@ -628,8 +627,8 @@ Close; end else - if FCountdown <> nil then - FCountdown.Caption := TimeFormatter(Timeout); + if Assigned(FCountdown) then + FCountdown.ControlCaption := TimeFormatter(Timeout); end; end; @@ -698,7 +697,6 @@ procedure TDSAMessageForm.CancelAutoClose; begin FTimer.Enabled := False; - FreeAndNil(FCountdown); end; function TDSAMessageForm.IsDSAChecked: Boolean; @@ -737,7 +735,7 @@ mcHorzMargin = 8; mcVertMargin = 8; mcHorzSpacing = 10; - mcVertSpacing = 10; + mcVertSpacing = 4; mcButtonWidth = 50; mcButtonHeight = 14; mcButtonSpacing = 4; @@ -766,6 +764,8 @@ CheckBox : TWinControl; ImagePanel: TWinControl; CheckPanel : TWinControl; + MainPanel : TWinControl; + DynControlAutoSize: IJvDynControlAutoSize; {$IFDEF COMPILER12_UP} procedure CalcTextRect (iSingle : Boolean; lpString: PWideChar; nCount: Integer;var lpRect: TRect); @@ -843,14 +843,16 @@ end; ButtonHeight := MulDiv(mcButtonHeight, DialogUnits.Y, 8); ButtonSpacing := MulDiv(mcButtonSpacing, DialogUnits.X, 4); + if (Screen.Width div 2) > (CenterParWidth + (2 * CenterParLeft)) then SetRect(TextRect, 0, 0, CenterParWidth + (2 * CenterParLeft), 0) else SetRect(TextRect, 0, 0, Screen.Width div 2, 0); + + CalcTextRect (False, PChar(Msg), Length(Msg) + 1, TextRect); - IconTextWidth := TextRect.Right+10; - IconTextHeight := TextRect.Bottom; + IconTextHeight := TextRect.Bottom+4; if CheckCaption <> '' then begin SetRect(TempRect, 0, 0, Screen.Width div 2, 0); @@ -874,41 +876,46 @@ if IconTextHeight < APicture.Height then IconTextHeight := APicture.Height; end; + ButtonCount := Length(Buttons); ButtonGroupWidth := 0; if ButtonCount <> 0 then ButtonGroupWidth := ButtonWidth * ButtonCount + ButtonSpacing * (ButtonCount - 1); + ResultForm.ClientWidth := Max(TimeoutTextWidth, Max(17 + ChkTextWidth, Max(IconTextWidth, ButtonGroupWidth))) + HorzMargin * 2; ResultForm.ClientHeight := IconTextHeight + ButtonHeight + VertSpacing * 2 + VertMargin; + if CheckCaption <> '' then ResultForm.ClientHeight := ResultForm.ClientHeight + VertMargin + 17; if ATimeout > 0 then ResultForm.ClientHeight := ResultForm.ClientHeight + VertMargin + 13; + if ResultForm.ClientWidth > Screen.Width-100 then ResultForm.ClientWidth := Screen.Width-100; if ResultForm.ClientHeight > Screen.Height-100 then ResultForm.ClientHeight := Screen.Height-100; + ResultForm.Left := (CenterParWidth div 2) - (ResultForm.Width div 2) + CenterParLeft; ResultForm.Top := (CenterParHeight div 2) - (ResultForm.Height div 2) + CenterParTop; + if ACaption <> '' then ResultForm.Caption := ACaption else ResultForm.Caption := Application.Title; - CheckPanel := DynControlEngine.CreatePanelControl(ResultForm, ResultForm, 'CheckPanel', '', alBottom); + BottomPanel := DynControlEngine.CreatePanelControl(ResultForm, ResultForm, 'BottomPanel', '', alBottom); + BottomPanel.Height := VertSpacing+VertMargin+ButtonHeight; + + MainPanel := DynControlEngine.CreatePanelControl(ResultForm, ResultForm, 'MainPanel', '', alClient); + + CheckPanel := DynControlEngine.CreatePanelControl(ResultForm, MainPanel, 'CheckPanel', '', alBottom); CheckPanel.Visible := (CheckCaption <> '') or (ATimeout > 0); - BottomPanel := DynControlEngine.CreatePanelControl(ResultForm, ResultForm, 'BottomPanel', '', alBottom); - if CheckPanel.Visible then - BottomPanel.Height := VertSpacing+ButtonHeight - else - BottomPanel.Height := VertSpacing+VertMargin+ButtonHeight; - CheckPanel.Top := BottomPanel.Top +1; - ImagePanel := DynControlEngine.CreatePanelControl(ResultForm, ResultForm, 'ImagePanel', '', alLeft); + + ImagePanel := DynControlEngine.CreatePanelControl(ResultForm, MainPanel, 'ImagePanel', '', alLeft); ImagePanel.Visible := Assigned(APicture); - if Assigned(APicture) then begin ImagePanel.Width := APicture.Width + 4 + HorzMargin - 2; @@ -918,11 +925,15 @@ DynControlImage.ControlSetGraphic(APicture); DynControlImage.ControlSetCenter(True); end; - Image.SetBounds(HorzMargin - 2, VertMargin - 2, APicture.Width + 4, APicture.Height + 4); + Image.SetBounds(HorzMargin - 2, VertMargin - 2, APicture.Width + 2, APicture.Height + 2); Image.Enabled := False; end; - MessagePanel := DynControlEngine.CreatePanelControl(ResultForm, ResultForm, 'Panel', '', alClient); + MessagePanel := DynControlEngine.CreatePanelControl(ResultForm, MainPanel, 'Panel', '', alClient); + if ImagePanel.Visible then + MessagePanel.Width := MainPanel.Width-ImagePanel.Width + else + MessagePanel.Width := MainPanel.Width; MessageLabel := DynControlEngine.CreateLabelControl(ResultForm, MessagePanel, 'Message', Msg, nil); if Assigned(APicture) then @@ -935,6 +946,8 @@ if Supports(MessageLabel, IJvDynControlLabel, DynControlLabel) then DynControlLabel.ControlSetWordWrap(True); + if Supports(MessageLabel, IJvDynControlAutoSize, DynControlAutoSize) then + DynControlAutoSize.ControlSetAutoSize(True); MessageLabel.BiDiMode := ResultForm.BiDiMode; @@ -964,16 +977,17 @@ begin CountDownlabel := DynControlEngine.CreateLabelControl(ResultForm, CheckPanel, 'Countdown', TimeFormatter(ResultForm.Timeout), nil); + CountDownlabel.BiDiMode := ResultForm.BiDiMode; - if CheckCaption = '' then + if CheckCaption <> '' then begin - CheckPanel.Height := CheckPanel.Height+CountDownlabel.Height+VertSpacing+VertMargin; - CountDownlabel.SetBounds (HorzMargin, CheckPanel.Height+VertSpacing, + CheckPanel.Height := CheckBox.Height+CountDownlabel.Height+VertSpacing;; + CountDownlabel.SetBounds (HorzMargin, CheckBox.Height+VertSpacing, ResultForm.ClientWidth - 2 * HorzMargin, CountDownlabel.Height) end else begin - CheckPanel.Height := CountDownlabel.Height+VertMargin; + CheckPanel.Height := CountDownlabel.Height;; CountDownlabel.SetBounds(HorzMargin, 0, ResultForm.ClientWidth - 2 * HorzMargin, CountDownlabel.Height); end; Modified: trunk/jvcl/run/JvDynControlEngineDevExpCx.pas =================================================================== --- trunk/jvcl/run/JvDynControlEngineDevExpCx.pas 2009-04-11 18:08:13 UTC (rev 12265) +++ trunk/jvcl/run/JvDynControlEngineDevExpCx.pas 2009-04-12 18:41:58 UTC (rev 12266) @@ -2923,7 +2923,9 @@ procedure TJvDynControlCxImage.ControlSetCxProperties(Value: TCxDynControlWrapper); begin + Properties.Center := True; Style.LookAndFeel.Assign(Value.LookAndFeel); + Properties.ShowFocusRect := False; if Assigned(Style.StyleController) then begin Style.StyleController := Value.StyleController; Modified: trunk/jvcl/run/JvJVCLUtils.pas =================================================================== --- trunk/jvcl/run/JvJVCLUtils.pas 2009-04-11 18:08:13 UTC (rev 12265) +++ trunk/jvcl/run/JvJVCLUtils.pas 2009-04-12 18:41:58 UTC (rev 12266) @@ -8248,7 +8248,8 @@ function GenerateName(const AName: string; ANumber: Integer): string; begin Result := ValidateName (AName); - Result := AOwner.Name + '_' + Result; + if Assigned(AOwner) and (AOwner.Name <> '') then + Result := AOwner.Name + '_' + Result; if ANumber > 0 then Result := Result + IntToStr(ANumber); end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2009-04-13 19:59:25
|
Revision: 12269 http://jvcl.svn.sourceforge.net/jvcl/?rev=12269&view=rev Author: jfudickar Date: 2009-04-13 19:59:23 +0000 (Mon, 13 Apr 2009) Log Message: ----------- Another Resize Bugfix for the DSADialogs Unit (Hopefully the last :-) Modified Paths: -------------- trunk/jvcl/run/JvDSADialogs.pas trunk/jvcl/run/JvDynControlEngineDevExpCx.pas Modified: trunk/jvcl/run/JvDSADialogs.pas =================================================================== --- trunk/jvcl/run/JvDSADialogs.pas 2009-04-13 19:58:36 UTC (rev 12268) +++ trunk/jvcl/run/JvDSADialogs.pas 2009-04-13 19:59:23 UTC (rev 12269) @@ -743,7 +743,9 @@ DialogUnits: TPoint; HorzMargin, VertMargin, HorzSpacing, VertSpacing, ButtonWidth: Integer; ButtonHeight, ButtonSpacing, ButtonCount, ButtonGroupWidth: Integer; - IconTextWidth, IconTextHeight, X, ALeft: Integer; + IconWidth, IconHeight, + TextWidth, TextHeight, + X, ALeft: Integer; ChkTextWidth: Integer; TimeoutTextWidth: Integer; IconID: PChar; @@ -781,7 +783,30 @@ DT_EXPANDTABS or DT_CALCRECT or DT_WORDBREAK or ResultForm.DrawTextBiDiModeFlagsReadingOnly); end; + Procedure ResizeResultForm; + begin + ResultForm.ClientWidth := Max(TimeoutTextWidth, + Max(17 + ChkTextWidth, + Max(IconWidth+TextWidth, ButtonGroupWidth))) + + HorzMargin * 2; + ResultForm.ClientHeight := Max(IconHeight, TextHeight) + ButtonHeight + VertSpacing * 2 + VertMargin * 2; + if CheckCaption <> '' then + ResultForm.ClientHeight := ResultForm.ClientHeight + VertSpacing + 17; + if ATimeout > 0 then + ResultForm.ClientHeight := ResultForm.ClientHeight + VertSpacing + 13; + + if ResultForm.ClientWidth > Screen.Width-100 then + ResultForm.ClientWidth := Screen.Width-100; + if ResultForm.ClientHeight > Screen.Height-100 then + ResultForm.ClientHeight := Screen.Height-100; + + ResultForm.Left := (CenterParWidth div 2) - (ResultForm.Width div 2) + CenterParLeft; + ResultForm.Top := (CenterParHeight div 2) - (ResultForm.Height div 2) + CenterParTop; + end; + + + begin ResultForm := nil; if Assigned(ADynControlEngine) then @@ -851,8 +876,8 @@ CalcTextRect (False, PChar(Msg), Length(Msg) + 1, TextRect); - IconTextWidth := TextRect.Right+10; - IconTextHeight := TextRect.Bottom+4; + TextWidth := TextRect.Right; + TextHeight := TextRect.Bottom; if CheckCaption <> '' then begin SetRect(TempRect, 0, 0, Screen.Width div 2, 0); @@ -872,9 +897,13 @@ TimeoutTextWidth := 0; if APicture <> nil then begin - Inc(IconTextWidth, APicture.Width + HorzSpacing); - if IconTextHeight < APicture.Height then - IconTextHeight := APicture.Height; + IconWidth := APicture.Width + HorzSpacing; + IconHeight := APicture.Height; + end + else + begin + IconWidth := 0; + IconHeight := 0; end; ButtonCount := Length(Buttons); @@ -882,25 +911,8 @@ if ButtonCount <> 0 then ButtonGroupWidth := ButtonWidth * ButtonCount + ButtonSpacing * (ButtonCount - 1); - ResultForm.ClientWidth := Max(TimeoutTextWidth, - Max(17 + ChkTextWidth, - Max(IconTextWidth, ButtonGroupWidth))) - + HorzMargin * 2; - ResultForm.ClientHeight := IconTextHeight + ButtonHeight + VertSpacing * 2 + VertMargin; + ResizeResultForm; - if CheckCaption <> '' then - ResultForm.ClientHeight := ResultForm.ClientHeight + VertMargin + 17; - if ATimeout > 0 then - ResultForm.ClientHeight := ResultForm.ClientHeight + VertMargin + 13; - - if ResultForm.ClientWidth > Screen.Width-100 then - ResultForm.ClientWidth := Screen.Width-100; - if ResultForm.ClientHeight > Screen.Height-100 then - ResultForm.ClientHeight := Screen.Height-100; - - ResultForm.Left := (CenterParWidth div 2) - (ResultForm.Width div 2) + CenterParLeft; - ResultForm.Top := (CenterParHeight div 2) - (ResultForm.Height div 2) + CenterParTop; - if ACaption <> '' then ResultForm.Caption := ACaption else @@ -947,7 +959,11 @@ if Supports(MessageLabel, IJvDynControlLabel, DynControlLabel) then DynControlLabel.ControlSetWordWrap(True); if Supports(MessageLabel, IJvDynControlAutoSize, DynControlAutoSize) then + begin DynControlAutoSize.ControlSetAutoSize(True); + TextWidth := MessageLabel.Width; + TextHeight := MessageLabel.Height; + end; MessageLabel.BiDiMode := ResultForm.BiDiMode; @@ -992,6 +1008,9 @@ ResultForm.ClientWidth - 2 * HorzMargin, CountDownlabel.Height); end; end; + + ResizeResultForm; + except FreeAndNil(ResultForm); raise; Modified: trunk/jvcl/run/JvDynControlEngineDevExpCx.pas =================================================================== --- trunk/jvcl/run/JvDynControlEngineDevExpCx.pas 2009-04-13 19:58:36 UTC (rev 12268) +++ trunk/jvcl/run/JvDynControlEngineDevExpCx.pas 2009-04-13 19:59:23 UTC (rev 12269) @@ -2733,6 +2733,7 @@ BevelInner := bvNone; BevelOuter := bvNone; PanelStyle.Active := True; + PanelStyle.BorderWidth := 0; Style.BorderStyle := ebsNone; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2009-04-15 19:30:29
|
Revision: 12275 http://jvcl.svn.sourceforge.net/jvcl/?rev=12275&view=rev Author: ahuser Date: 2009-04-15 19:30:15 +0000 (Wed, 15 Apr 2009) Log Message: ----------- Mantis #4742: JvCsvData - Internal Limit of MAXCOLUMNS (120) reached. CSV Data has too many columns. Modified Paths: -------------- trunk/jvcl/run/JvCsvData.pas trunk/jvcl/run/JvResources.pas Modified: trunk/jvcl/run/JvCsvData.pas =================================================================== --- trunk/jvcl/run/JvCsvData.pas 2009-04-15 18:39:07 UTC (rev 12274) +++ trunk/jvcl/run/JvCsvData.pas 2009-04-15 19:30:15 UTC (rev 12275) @@ -178,8 +178,6 @@ JvCsv_ON_EOF_CRACK = -2; - - RowAlreadySaved=0; RowNeedsSaving=1; { return values from CompareBookmarks: } @@ -276,7 +274,6 @@ - { Memory usage by JvCsvDataSet: A row is an allocated BLOCK of memory grabbed by ALLOCMEM and it must be copyable @@ -313,7 +310,6 @@ PJvCsvRowWordFields = ^TJvCsvRowWordFields; - { Row collection } TJvCsvRows = class(TList) private @@ -371,10 +367,8 @@ { these properties should ONLY be set before any actual rows have been allocated. } - property TextBufferSize : Integer read FTextBufferSize write FTextBufferSize; // How big is TJvCsvRow.Text effectively? - property MarginSize : Integer read FMarginSize write FMarginSize; // How much margin space after the calculated fields? (typically 2 bytes) - - + property TextBufferSize: Integer read FTextBufferSize write FTextBufferSize; // How big is TJvCsvRow.Text effectively? + property MarginSize: Integer read FMarginSize write FMarginSize; // How much margin space after the calculated fields? (typically 2 bytes) end; TArrayOfPCsvColumn = array of PCsvColumn; @@ -438,8 +432,6 @@ // Easily Customizeable DataSet descendant our CSV handler and // any other variants we create: //------------------------------------------------------------------------- - - TJvCustomCsvDataSet = class(TDataSet) private FOpenFileName: string; // This is the Fully Qualified path and filename expanded from the FTableName property when InternalOpen was last called. @@ -450,9 +442,9 @@ procedure SetSeparator(const Value: AnsiChar); procedure InternalQuickSort(SortList: PPointerList; L, R: Integer; - SortColumns: TArrayOfPCsvColumn; ACount: Integer; SortAscending: Array of Boolean); + SortColumns: TArrayOfPCsvColumn; ACount: Integer; const SortAscending: array of Boolean); - procedure QuickSort(AList: TList; SortColumns: TArrayOfPCsvColumn; ACount: Integer; SortAscending: Array of Boolean); + procedure QuickSort(AList: TList; SortColumns: TArrayOfPCsvColumn; ACount: Integer; const SortAscending: array of Boolean); procedure AutoCreateDir(const FileName: string); function GetEnquoteBackslash: Boolean; procedure SetEnquoteBackslash(const Value: Boolean); @@ -466,7 +458,7 @@ function GetDecimalSeparator: AnsiChar; procedure SetDecimalSeparator(const Value: AnsiChar); - function _CsvFloatToStr(fvalue:Double):string; + function _CsvFloatToStr(fvalue: Double): string; protected // (rom) inacceptable names. Probably most of this should be private. @@ -548,9 +540,8 @@ function InternalSkipFiltered(DefaultResult: TGetResult; ForwardBackwardMode: Boolean): TGetResult; function ReadCsvFileStream: Boolean; + function WriteCsvFileStream: Boolean; - function WriteCsvFileStream:Boolean; - // Internal methods used by sorting: function InternalFieldCompare(Column: PCsvColumn; Left, Right: PCsvRow): Integer; function InternalCompare(SortColumns: TArrayOfPCsvColumn; SortColumnCount: Integer; @@ -635,7 +626,7 @@ function _Dequote(const StrVal: AnsiString): AnsiString; virtual; // removes quotes property Separator: AnsiChar read GetSeparator write SetSeparator default ','; - property DecimalSeparator:AnsiChar read GetDecimalSeparator write SetDecimalSeparator default ' '; // space means system default. + property DecimalSeparator: AnsiChar read GetDecimalSeparator write SetDecimalSeparator default ' '; // space means system default. public constructor Create(AOwner: TComponent); override; @@ -644,7 +635,7 @@ function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override; - function _AllocateRow:PCsvRow; // Don't try to create your own CsvRow Objects outside JvCsvDataSet by just allocating a TJvCsvDataRow object. Call this instead. + function _AllocateRow: PCsvRow; // Don't try to create your own CsvRow Objects outside JvCsvDataSet by just allocating a TJvCsvDataRow object. Call this instead. // Autoincrement feature: Get next available auto-incremented value for numbered/indexed autoincrementing fields. function GetAutoincrement(const FieldName: string): Integer; @@ -654,7 +645,7 @@ // SELECT * FROM TABLE WHERE <fieldname> LIKE <pattern>: procedure SetFilter(const FieldName: string; Pattern: AnsiString); // Make Rows Visible Only if they match filterString - procedure SetFilterNum(const FieldName: string; compareOperator:TJvCsvFilterNumCompare; numValue: Double ); + procedure SetFilterNum(const FieldName: string; compareOperator: TJvCsvFilterNumCompare; numValue: Double); // SELECT * FROM TABLE WHERE <fieldname> IS <NULL|NOT NULL>: procedure SetFilterOnNull(const FieldName: string; NullFlag: Boolean); @@ -722,7 +713,7 @@ { Special declarations } // as long as the field names and positions have not changed. - procedure AssignFromStrings(const Strings: TStrings); virtual; // update string Data directly. + procedure AssignFromStrings(Strings: TStrings); virtual; // update string Data directly. procedure AssignToStrings(Strings: TStrings); virtual; procedure DeleteRows(FromRow, ToRow: Integer); // NEW: Quickly zap a bunch of rows: @@ -821,7 +812,7 @@ property CsvKeyDef: string read FCsvKeyDef write FCsvKeyDef; // Primary key definition. property CsvUniqueKeys: Boolean read FCsvUniqueKeys write FCsvUniqueKeys; // Rows must be unique on the primary key. // not currently valuable, but maybe soon: - //property CsvColumns:TJvCsvColumns read FCsvColumns; + //property CsvColumns: TJvCsvColumns read FCsvColumns; property OpenFileName: string read FOpenFileName; // Set in InternalOpen, used elsewhere. property FieldDefs stored FieldDefsStored; @@ -830,17 +821,14 @@ property HeaderRow: AnsiString read FHeaderRow; // first row of CSV file. property SavesChanges: Boolean read FSavesChanges write FSavesChanges default True; - property AlwaysEnquoteStrings:Boolean read FAlwaysEnquoteStrings write FAlwaysEnquoteStrings; // Always put Double quotes around strings (for some CSV file reading software this is required.) - property AlwaysEnquoteFloats:Boolean read FAlwaysEnquoteFloats write FAlwaysEnquoteFloats; // Always put Double quotes around floating point values (useful when DecimalSeparator==CsvSeparator) - property UseSystemDecimalSeparator:Boolean read FUseSystemDecimalSeparator write FUseSystemDecimalSeparator default false; // Default is false which always uses US mode. Must be false by default because of existing code assuming this behaviour. + property AlwaysEnquoteStrings: Boolean read FAlwaysEnquoteStrings write FAlwaysEnquoteStrings; // Always put Double quotes around strings (for some CSV file reading software this is required.) + property AlwaysEnquoteFloats: Boolean read FAlwaysEnquoteFloats write FAlwaysEnquoteFloats; // Always put Double quotes around floating point values (useful when DecimalSeparator==CsvSeparator) + property UseSystemDecimalSeparator: Boolean read FUseSystemDecimalSeparator write FUseSystemDecimalSeparator default false; // Default is false which always uses US mode. Must be false by default because of existing code assuming this behaviour. - property AppendOnly:Boolean read FAppendOnly write FAppendOnly; // If true, we don't load the entire content of the CSV from disk, only the last row, and every time we append and write, we only maintain the last row in memory (saves a lot of RAM.) - - property TextBufferSize : Integer read GetTextBufferSize write SetTextBufferSize; // How big is TJvCsvRow.Text effectively? - property MarginSize : Integer read GetMarginSize write SetMarginSize; // How much margin space after the calculated fields? (typically 2 bytes) - + property TextBufferSize: Integer read GetTextBufferSize write SetTextBufferSize; // How big is TJvCsvRow.Text effectively? + property MarginSize: Integer read GetMarginSize write SetMarginSize; // How much margin space after the calculated fields? (typically 2 bytes) end; // TJvCsvDataSet is just a TJvCustomCsvDataSet with all properties and events exposed: @@ -1122,7 +1110,7 @@ end; { TJvCsvStream.ReadLine: - This reads a line of text, normally terminated by carriage return + linefeed + This reads a line of text, normally terminated by carriage return and/or linefeed but it is a bit special, and adapted for CSV usage because CR/LF characters inside quotes are read as a single line. @@ -1135,84 +1123,84 @@ var Buf: array of {$IFDEF COMPILER12_UP}Byte{$ELSE}Char{$ENDIF COMPILER12_UP}; n: Integer; - ok: Boolean; - QuoteFlag, LfFlag, CrFlag: Boolean; + QuoteFlag: Boolean; + LStreamBuffer: {$IFDEF COMPILER12_UP}PByte{$ELSE}PChar{$ENDIF COMPILER12_UP}; + LStreamSize: Integer; + LStreamIndex: Integer; + + procedure FillStreamBuffer; + begin + FStreamSize := Stream.Read(LStreamBuffer[0], JvCsvStreamReadChunkSize); + LStreamSize := FStreamSize; + if LStreamSize = 0 then + begin + if FStream.Position >= FStream.Size then + FLastReadFlag := True + else + raise EJvCsvDataSetError.CreateResFmt(@RsECannotReadCsvFile, [FFilename]); + end + else + if LStreamSize < JvCsvStreamReadChunkSize then + FLastReadFlag := True; + FStreamIndex := 0; + LStreamIndex := 0; + end; + begin { Ignore linefeeds, read until carriage return, strip carriage return, and return it } - SetLength(Buf,150); + SetLength(Buf, 150); -// SetLength(Buf,JvCsv_MAXLINELENGTH);//16384; - -// count := 1; n := 0; - LfFlag := False; - CrFlag := False; QuoteFlag := False; - repeat + LStreamBuffer := FStreamBuffer; + LStreamSize := FStreamSize; + LStreamIndex := FStreamIndex; + while True do + begin if n >= Length(Buf) then SetLength(Buf, n + 100); - if FStreamIndex >= FStreamSize then - begin - FStreamSize := Stream.Read(FStreamBuffer[0], JvCsvStreamReadChunkSize); - if FStreamSize = 0 then - begin - if FStream.Position >= FStream.Size then - FLastReadFlag:= True - else - raise EJvCsvDataSetError.CreateFmt('Can''t read CSV file %s', [FFilename]); - end - else - if FStreamSize < JvCsvStreamReadChunkSize then - FLastReadFlag := True; - FStreamIndex := 0; - end; + if LStreamIndex >= LStreamSize then + FillStreamBuffer; - if FStreamIndex >= FStreamSize then - ok := False - else - begin - Buf[n] := FStreamBuffer[FStreamIndex]; // p^; - Inc(FStreamIndex); - ok := True; - end; + if LStreamIndex >= LStreamSize then + Break; - if ok then - begin - if Buf[n]> JvCsvQuote {34} then // test for MOST common case first! - begin - Inc(n); - CrFlag := False; - LfFlag := False; - end - else - begin - if Buf[n] = JvCsvQuote {34} then // quote - QuoteFlag := not QuoteFlag; + Buf[n] := LStreamBuffer[LStreamIndex]; // p^; + Inc(LStreamIndex); - if Buf[n] = JvCsvLf {10} then // linefeed + case Buf[n] of + JvCsvQuote: {34} // quote + QuoteFlag := not QuoteFlag; + JvCsvLf: {10} // linefeed begin - LfFlag := True; Inc(n); - end else - if Buf[n]= JvCsvCR {13} then // carriage return + if not QuoteFlag then + Break; + end; + JvCsvCR: {13} // carriage return begin - CrFlag := True; Inc(n); - end else - begin - Inc(n); - CrFlag := False; - LfFlag := False; - end; + if not QuoteFlag then + begin + { If it is a CRLF we must skip the LF. Otherwise the next call to ReadLine + would return an empty line. } + if LStreamIndex >= LStreamSize then + FillStreamBuffer; + if LStreamBuffer[LStreamIndex] = JvCsvLf then + Inc(LStreamIndex); - if CrFlag and LfFlag and not QuoteFlag then - Break; - end; + Break; + end; + end + else + Inc(n); end; - until not ok; - Inc(n); + end; + FStreamIndex := LStreamIndex; + + //Inc(n); { ahuser: This cause the string to include CR or LF. Is this by intention? } Buf[n] := {$IFDEF COMPILER12_UP}0{$ELSE}#0{$ENDIF COMPILER12_UP}; SetLength(Buf, n); @@ -1344,7 +1332,7 @@ Result := FData.Separator; end; -function TJvCustomCsvDataSet._CsvFloatToStr(fvalue:Double):string; +function TJvCustomCsvDataSet._CsvFloatToStr(fvalue: Double): string; begin // raises exception EJvConvertError (same as EConvertError) FFormatSettings.DecimalSeparator := {$IFDEF COMPILER12_UP}Char({$ENDIF COMPILER12_UP}GetDecimalSeparator {$IFDEF COMPILER12_UP}){$ENDIF COMPILER12_UP}; @@ -1676,14 +1664,14 @@ // Numeric Filtering: Make Rows Visible Only if they match an Integer or floating point numeric comparison operator. // evaluate condition: // [FieldName] [numericoperator: < > = <> ] [Numeric Value Parameter] -procedure TJvCustomCsvDataSet.SetFilterNum(const FieldName: string; compareOperator:TJvCsvFilterNumCompare; numValue: Double ); +procedure TJvCustomCsvDataSet.SetFilterNum(const FieldName: string; compareOperator: TJvCsvFilterNumCompare; numValue: Double); var I: Integer; PRow: PCsvRow; FieldRec: PCsvColumn; FieldIndex: Integer; sFieldValue: AnsiString; - FieldValue:Double; + FieldValue: Double; //stillVisible : Integer; //m: TBookmark; begin @@ -4051,7 +4039,7 @@ end; procedure TJvCustomCsvDataSet.InternalQuickSort(SortList: PPointerList; - L, R: Integer; SortColumns: TArrayOfPCsvColumn; ACount: Integer; SortAscending: Array of Boolean); + L, R: Integer; SortColumns: TArrayOfPCsvColumn; ACount: Integer; const SortAscending: array of Boolean); var I, J: Integer; P, T: Pointer; @@ -4082,7 +4070,7 @@ end; procedure TJvCustomCsvDataSet.QuickSort(AList: TList; SortColumns: TArrayOfPCsvColumn; - ACount: Integer; SortAscending: Array of Boolean); + ACount: Integer; const SortAscending: array of Boolean); begin if (AList <> nil) and (AList.Count > 1) then InternalQuickSort(AList.List, 0, AList.Count - 1, SortColumns, ACount, SortAscending); @@ -4420,7 +4408,7 @@ { Additional Custom Methods - internal use } -procedure TJvCustomCsvDataSet.AssignFromStrings(const Strings: TStrings); +procedure TJvCustomCsvDataSet.AssignFromStrings(Strings: TStrings); var // HeaderRowFound: Boolean; I: Integer; Modified: trunk/jvcl/run/JvResources.pas =================================================================== --- trunk/jvcl/run/JvResources.pas 2009-04-15 18:39:07 UTC (rev 12274) +++ trunk/jvcl/run/JvResources.pas 2009-04-15 19:30:15 UTC (rev 12275) @@ -502,6 +502,7 @@ RsECsvFieldLocationError = 'CSV field location error: %s'; RsEFieldNotFound = 'Field %s not found in the data file'; RsECsvStringTooLong = 'CSV string is too long: %s...'; + RsECannotReadCsvFile = 'Can''t read CSV file %s'; RsEInternalLimit = 'JvCsvData - Internal Limit of MAXCOLUMNS (%d) reached. CSV Data has too many columns'; RsETableNameNotSet = 'TableName not specified'; RsEGetMode = 'Invalid option to GetMode'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2009-04-29 14:02:11
|
Revision: 12295 http://jvcl.svn.sourceforge.net/jvcl/?rev=12295&view=rev Author: obones Date: 2009-04-29 13:57:07 +0000 (Wed, 29 Apr 2009) Log Message: ----------- Mantis 4631: Now added notification when the image list is freed Modified Paths: -------------- trunk/jvcl/run/JvAppAnimatedIcon.pas trunk/jvcl/run/JvFormAnimatedIcon.pas Modified: trunk/jvcl/run/JvAppAnimatedIcon.pas =================================================================== --- trunk/jvcl/run/JvAppAnimatedIcon.pas 2009-04-29 13:41:13 UTC (rev 12294) +++ trunk/jvcl/run/JvAppAnimatedIcon.pas 2009-04-29 13:57:07 UTC (rev 12295) @@ -48,6 +48,8 @@ procedure SetDelay(const Value: Cardinal); procedure SetIcons(const Value: TImageList); procedure Animate(Sender: TObject); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -90,6 +92,18 @@ inherited Destroy; end; +procedure TJvAppAnimatedIcon.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + + if Operation = opRemove then + begin + if AComponent = FIcons then + SetIcons(nil); + end; +end; + procedure TJvAppAnimatedIcon.Animate(Sender: TObject); begin @@ -114,7 +128,13 @@ procedure TJvAppAnimatedIcon.SetIcons(const Value: TImageList); begin + if FIcons <> nil then + FIcons.RemoveFreeNotification(Self); + FIcons := Value; + + if Value <> nil then + FIcons.FreeNotification(Self); end; {$IFDEF UNITVERSIONING} Modified: trunk/jvcl/run/JvFormAnimatedIcon.pas =================================================================== --- trunk/jvcl/run/JvFormAnimatedIcon.pas 2009-04-29 13:41:13 UTC (rev 12294) +++ trunk/jvcl/run/JvFormAnimatedIcon.pas 2009-04-29 13:57:07 UTC (rev 12295) @@ -49,12 +49,14 @@ procedure SetActive(const Value: Boolean); procedure SetDelay(const Value: Cardinal); procedure Animate(Sender: TObject); + procedure SetIcons(const Value: TImageList); protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published - property Icons: TImageList read FIcons write FIcons; + property Icons: TImageList read FIcons write SetIcons; property Active: Boolean read FActive write SetActive default True; property Delay: Cardinal read FDelay write SetDelay default 100; end; @@ -97,6 +99,18 @@ inherited Destroy; end; +procedure TJvFormAnimatedIcon.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + + if Operation = opRemove then + begin + if AComponent = FIcons then + SetIcons(nil); + end; +end; + procedure TJvFormAnimatedIcon.Animate(Sender: TObject); begin @@ -121,6 +135,17 @@ FTimer.Interval := FDelay; end; +procedure TJvFormAnimatedIcon.SetIcons(const Value: TImageList); +begin + if FIcons <> nil then + FIcons.RemoveFreeNotification(Self); + + FIcons := Value; + + if Value <> nil then + FIcons.FreeNotification(Self); +end; + {$IFDEF UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2009-04-29 14:53:50
|
Revision: 12296 http://jvcl.svn.sourceforge.net/jvcl/?rev=12296&view=rev Author: obones Date: 2009-04-29 14:53:38 +0000 (Wed, 29 Apr 2009) Log Message: ----------- When using FreeNotification, there must be a call to RemoveFreeNotification to the previous value of the property. This way we are not notified of the destruction of a component we no longer care about. Modified Paths: -------------- trunk/jvcl/run/JvAppDBStorage.pas trunk/jvcl/run/JvBDEFilter.pas trunk/jvcl/run/JvBDEIndex.pas trunk/jvcl/run/JvBDEProgress.pas trunk/jvcl/run/JvBDESecurity.pas trunk/jvcl/run/JvBalloonHint.pas trunk/jvcl/run/JvBandForms.pas trunk/jvcl/run/JvCaptionButton.pas trunk/jvcl/run/JvComCtrls.pas trunk/jvcl/run/JvCtrls.pas trunk/jvcl/run/JvDBActions.pas trunk/jvcl/run/JvDBCombobox.pas trunk/jvcl/run/JvDBControls.pas trunk/jvcl/run/JvDBFindEdit.pas trunk/jvcl/run/JvDBGridFooter.pas trunk/jvcl/run/JvDBLookup.pas trunk/jvcl/run/JvDBLookupComboEdit.pas trunk/jvcl/run/JvDBLookupTreeView.pas trunk/jvcl/run/JvDBRadioPanel.pas trunk/jvcl/run/JvDBRemoteLogin.pas trunk/jvcl/run/JvDBRichEdit.pas trunk/jvcl/run/JvDBSpinEdit.pas trunk/jvcl/run/JvDBTreeView.pas trunk/jvcl/run/JvDesktopAlert.pas trunk/jvcl/run/JvDesktopAlertForm.pas trunk/jvcl/run/JvDockControlForm.pas trunk/jvcl/run/JvDockSupportControl.pas trunk/jvcl/run/JvDriveCtrls.pas trunk/jvcl/run/JvEmbeddedForms.pas trunk/jvcl/run/JvFindReplace.pas trunk/jvcl/run/JvGradientCaption.pas trunk/jvcl/run/JvLabel.pas trunk/jvcl/run/JvListView.pas trunk/jvcl/run/JvMRUManager.pas trunk/jvcl/run/JvMenus.pas trunk/jvcl/run/JvMergeManager.pas trunk/jvcl/run/JvNavigationPane.pas trunk/jvcl/run/JvOutlookBar.pas trunk/jvcl/run/JvPageManager.pas trunk/jvcl/run/JvPropertyStoreEditor.pas trunk/jvcl/run/JvScheduledEvents.pas trunk/jvcl/run/JvSimPID.pas trunk/jvcl/run/JvSpeedButton.pas trunk/jvcl/run/JvSpeedbar.pas trunk/jvcl/run/JvSpin.pas trunk/jvcl/run/JvSplit.pas trunk/jvcl/run/JvStaticText.pas trunk/jvcl/run/JvSystemPopup.pas trunk/jvcl/run/JvTFGlance.pas trunk/jvcl/run/JvTFManager.pas trunk/jvcl/run/JvToolEdit.pas trunk/jvcl/run/JvVersionControlActions.pas trunk/jvcl/run/JvWizard.pas trunk/jvcl/run/JvXPBar.pas trunk/jvcl/run/JvXPButtons.pas Modified: trunk/jvcl/run/JvAppDBStorage.pas =================================================================== --- trunk/jvcl/run/JvAppDBStorage.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvAppDBStorage.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -388,6 +388,8 @@ begin if Assigned(FSectionLink) and not (FSectionLink.DataSourceFixed and (csLoading in ComponentState)) then begin + FSectionLink.DataSource.RemoveFreeNotification(Self); + FSectionLink.DataSource := Value; FKeyLink.DataSource := Value; FValueLink.DataSource := Value; Modified: trunk/jvcl/run/JvBDEFilter.pas =================================================================== --- trunk/jvcl/run/JvBDEFilter.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvBDEFilter.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -397,7 +397,12 @@ try if not (csLoading in ComponentState) then ActiveChanged; + + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); + FDataLink.DataSource := Value; + if Value <> nil then Value.FreeNotification(Self); finally Modified: trunk/jvcl/run/JvBDEIndex.pas =================================================================== --- trunk/jvcl/run/JvBDEIndex.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvBDEIndex.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -232,6 +232,9 @@ procedure TJvDBIndexCombo.SetDataSource(Value: TDataSource); begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); + FDataLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvBDEProgress.pas =================================================================== --- trunk/jvcl/run/JvBDEProgress.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvBDEProgress.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -518,6 +518,8 @@ procedure TJvDBProgress.SetMessageControl(Value: TControl); begin + if FMessageControl <> nil then + FMessageControl.RemoveFreeNotification(Self); FMessageControl := Value; if Value <> nil then Value.FreeNotification(Self); @@ -525,6 +527,8 @@ procedure TJvDBProgress.SetGauge(Value: TControl); begin + if FGauge <> nil then + FGauge.RemoveFreeNotification(Self); FGauge := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvBDESecurity.pas =================================================================== --- trunk/jvcl/run/JvBDESecurity.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvBDESecurity.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -137,6 +137,8 @@ begin if FDatabase <> Value then begin + if FDatabase <> nil then + FDatabase.RemoveFreeNotification(Self); FDatabase := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvBalloonHint.pas =================================================================== --- trunk/jvcl/run/JvBalloonHint.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvBalloonHint.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1727,9 +1727,11 @@ procedure TJvBalloonHint.SetImages(const Value: TCustomImageList); begin + if FImages <> nil then + FImages.RemoveFreeNotification(Self); FImages := Value; - if Images <> nil then - Images.FreeNotification(Self); + if FImages <> nil then + FImages.FreeNotification(Self); end; procedure TJvBalloonHint.SetOptions(const Value: TJvBalloonOptions); Modified: trunk/jvcl/run/JvBandForms.pas =================================================================== --- trunk/jvcl/run/JvBandForms.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvBandForms.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -382,10 +382,13 @@ procedure TJvBandForm.SetContextMenu(const Value: TPopupMenu); begin + if FBandContextMenu <> nil then + FBandContextMenu.RemoveFreeNotification(Self); + FBandContextMenu := Value; - if Value = nil then - Exit; - Value.FreeNotification(Self); + + if Value <> nil then + Value.FreeNotification(Self); end; procedure TJvBandForm.Notification(AComponent: TComponent; Modified: trunk/jvcl/run/JvCaptionButton.pas =================================================================== --- trunk/jvcl/run/JvCaptionButton.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvCaptionButton.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -2270,6 +2270,8 @@ procedure TJvCaptionButton.SetAction(const Value: TBasicAction); begin + if (FActionLink <> nil) and (FActionLink.Action <> nil) then + FActionLink.Action.RemoveFreeNotification(Self); if Value = nil then begin FActionLink.Free; @@ -2368,7 +2370,10 @@ procedure TJvCaptionButton.SetImages(const Value: TCustomImageList); begin if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnRegisterChanges(FImageChangeLink); + end; FImages := Value; if FImages <> nil then begin Modified: trunk/jvcl/run/JvComCtrls.pas =================================================================== --- trunk/jvcl/run/JvComCtrls.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvComCtrls.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1842,7 +1842,10 @@ if FTabPainter <> Value then begin if FTabPainter <> nil then + begin + FTabPainter.RemoveFreeNotification(Self); FTabPainter.UnRegisterChange(Self); + end; FTabPainter := Value; if FTabPainter <> nil then begin @@ -2112,7 +2115,10 @@ if FTabPainter <> Value then begin if FTabPainter <> nil then + begin + FTabPainter.RemoveFreeNotification(Self); FTabPainter.UnRegisterChange(Self); + end; FTabPainter := Value; if FTabPainter <> nil then begin @@ -3209,12 +3215,16 @@ begin if FMenu <> Value then begin - if (FMenu <> nil) and not (csDesigning in ComponentState) then - {$IFDEF CLR} - SetProtectedObjectEvent(FMenu, 'OnChange', @FOldMenuChange); - {$ELSE} - TMenuAccessProtected(FMenu).OnChange := FOldMenuChange; - {$ENDIF CLR} + if (FMenu <> nil) then + begin + FMenu.RemoveFreeNotification(Self); + if not (csDesigning in ComponentState) then + {$IFDEF CLR} + SetProtectedObjectEvent(FMenu, 'OnChange', @FOldMenuChange); + {$ELSE} + TMenuAccessProtected(FMenu).OnChange := FOldMenuChange; + {$ENDIF CLR} + end; FMenu := Value; if FMenu <> nil then begin @@ -3306,6 +3316,8 @@ begin if FPageControl <> Value then begin + if FPageControl <> nil then + FPageControl.RemoveFreeNotification(Self); FPageControl := Value; if FPageControl <> nil then FPageControl.FreeNotification(Self); Modified: trunk/jvcl/run/JvCtrls.pas =================================================================== --- trunk/jvcl/run/JvCtrls.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvCtrls.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -862,7 +862,10 @@ procedure TJvCustomImageButton.SetImages(const Value: TCustomImageList); begin if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnRegisterChanges(FImageChangeLink); + end; FImages := Value; if FImages <> nil then begin Modified: trunk/jvcl/run/JvDBActions.pas =================================================================== --- trunk/jvcl/run/JvDBActions.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBActions.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -562,6 +562,8 @@ begin if Value <> FDataComponent then begin + if FDataComponent <> nil then + FDataComponent.RemoveFreeNotification(Self); FDataComponent := Value; if FDataComponent <> nil then FDataComponent.FreeNotification(Self); @@ -1203,6 +1205,8 @@ procedure TJvDatabaseInsertAction.SetSingleRecordWindowAction(const Value: TJvDatabaseSingleRecordWindowAction); begin + if FSingleRecordWindowAction <> nil then + FSingleRecordWindowAction.RemoveFreeNotification(Self); FSingleRecordWindowAction := Value; if Assigned(FSingleRecordWindowAction) then FSingleRecordWindowAction.FreeNotification(Self); @@ -1299,6 +1303,8 @@ procedure TJvDatabaseCopyAction.SetSingleRecordWindowAction(const Value: TJvDatabaseSingleRecordWindowAction); begin + if FSingleRecordWindowAction <> nil then + FSingleRecordWindowAction.RemoveFreeNotification(Self); FSingleRecordWindowAction := Value; if Assigned(FSingleRecordWindowAction) then FSingleRecordWindowAction.FreeNotification(Self); @@ -1346,6 +1352,8 @@ procedure TJvDatabaseEditAction.SetSingleRecordWindowAction(const Value: TJvDatabaseSingleRecordWindowAction); begin + if FSingleRecordWindowAction <> nil then + FSingleRecordWindowAction.RemoveFreeNotification(Self); FSingleRecordWindowAction := Value; if Assigned(FSingleRecordWindowAction) then FSingleRecordWindowAction.FreeNotification(Self); Modified: trunk/jvcl/run/JvDBCombobox.pas =================================================================== --- trunk/jvcl/run/JvDBCombobox.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBCombobox.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -457,7 +457,11 @@ procedure TJvCustomDBComboBox.SetDataSource(Value: TDataSource); begin if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; + end; if Value <> nil then Value.FreeNotification(Self); end; Modified: trunk/jvcl/run/JvDBControls.pas =================================================================== --- trunk/jvcl/run/JvDBControls.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBControls.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -858,7 +858,11 @@ procedure TJvDBMaskEdit.SetDataSource(Value: TDataSource); begin if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; + end; if Value <> nil then Value.FreeNotification(Self); end; @@ -1334,7 +1338,11 @@ procedure TJvDBComboEdit.SetDataSource(Value: TDataSource); begin if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; + end; if Value <> nil then Value.FreeNotification(Self); end; @@ -1650,7 +1658,11 @@ procedure TJvDBDateEdit.SetDataSource(Value: TDataSource); begin if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; + end; if Value <> nil then Value.FreeNotification(Self); end; @@ -2046,7 +2058,11 @@ if FDataLink.DataSource <> Value then begin if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; + end; if Value <> nil then Value.FreeNotification(Self); UpdateFieldParams; @@ -2666,7 +2682,11 @@ procedure TJvDBStatusLabel.SetDataSource(Value: TDataSource); begin if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; + end; if Value <> nil then Value.FreeNotification(Self); if not (csLoading in ComponentState) then Modified: trunk/jvcl/run/JvDBFindEdit.pas =================================================================== --- trunk/jvcl/run/JvDBFindEdit.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBFindEdit.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -377,7 +377,11 @@ procedure TJvDBFindEdit.SetDataSource(const Value: TDataSource); begin if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; + end; if Value <> nil then Value.FreeNotification(Self); end; Modified: trunk/jvcl/run/JvDBGridFooter.pas =================================================================== --- trunk/jvcl/run/JvDBGridFooter.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBGridFooter.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -406,6 +406,8 @@ if Assigned(DBGrid) then if Value <> DBGrid.DataSource then Value := DBGrid.DataSource; + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvDBLookup.pas =================================================================== --- trunk/jvcl/run/JvDBLookup.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBLookup.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1288,6 +1288,8 @@ procedure TJvLookupControl.SetDataSource(Value: TDataSource); begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); @@ -1458,6 +1460,8 @@ procedure TJvLookupControl.SetLookupSource(Value: TDataSource); begin CheckNotFixed; + if FLookupLink.DataSource <> nil then + FLookupLink.DataSource.RemoveFreeNotification(Self); FLookupLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvDBLookupComboEdit.pas =================================================================== --- trunk/jvcl/run/JvDBLookupComboEdit.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBLookupComboEdit.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -307,7 +307,11 @@ procedure TJvDBLookupComboEdit.SetDataSource(Value: TDataSource); begin if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; + end; if Value <> nil then Value.FreeNotification(Self); end; Modified: trunk/jvcl/run/JvDBLookupTreeView.pas =================================================================== --- trunk/jvcl/run/JvDBLookupTreeView.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBLookupTreeView.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -770,6 +770,8 @@ procedure TJvDBLookupControl.SetDataSource(Value: TDataSource); begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); @@ -806,6 +808,8 @@ procedure TJvDBLookupControl.SetListSource(Value: TDataSource); begin CheckNotLookup; + if FListLink.DataSource <> nil then + FListLink.DataSource.RemoveFreeNotification(Self); FListLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvDBRadioPanel.pas =================================================================== --- trunk/jvcl/run/JvDBRadioPanel.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBRadioPanel.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -512,6 +512,8 @@ procedure TJvDBRadioPanel.SetDataSource(Value: TDataSource); begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvDBRemoteLogin.pas =================================================================== --- trunk/jvcl/run/JvDBRemoteLogin.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBRemoteLogin.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -159,6 +159,8 @@ if FRemoteServer <> Value then begin UnprepareRemoteServer; + if FRemoveServer <> nil then + FRemoveServer.RemoveFreeNotification(Self); FRemoteServer := Value; if Value <> nil then begin Modified: trunk/jvcl/run/JvDBRichEdit.pas =================================================================== --- trunk/jvcl/run/JvDBRichEdit.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBRichEdit.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -317,6 +317,8 @@ procedure TJvDBRichEdit.SetDataSource(Value: TDataSource); begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvDBSpinEdit.pas =================================================================== --- trunk/jvcl/run/JvDBSpinEdit.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBSpinEdit.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -303,7 +303,11 @@ begin { FDataLink is built in TJvDBSpinEdit.Create; there's no need to check to see if it's assigned. } if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + begin + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; + end; { Tell the new DataSource that our TJvDBSpinEdit component should be notified (using the Notification method) if the DataSource is ever removed from a data module or form that is different than the owner of this control. } Modified: trunk/jvcl/run/JvDBTreeView.pas =================================================================== --- trunk/jvcl/run/JvDBTreeView.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDBTreeView.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -526,6 +526,8 @@ if Value = FDataLink.DataSource then Exit; Items.Clear; + if FDataLink.DataSource <> nil then + FDataLink.DataSource.RemoveFreeNotification(Self); FDataLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvDesktopAlert.pas =================================================================== --- trunk/jvcl/run/JvDesktopAlert.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDesktopAlert.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -977,6 +977,8 @@ begin if FImages <> Value then begin + if FImages <> nil then + FImages.RemoveFreeNotification(Self); FImages := Value; if FImages <> nil then FImages.FreeNotification(Self); @@ -1734,6 +1736,8 @@ begin if FStacker <> Value then begin + if FStacker <> nil then + FStacker.RemoveFreeNotification(Self); FStacker := Value; if FStacker <> nil then begin Modified: trunk/jvcl/run/JvDesktopAlertForm.pas =================================================================== --- trunk/jvcl/run/JvDesktopAlertForm.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDesktopAlertForm.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -539,7 +539,10 @@ if FImages <> Value then begin if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnRegisterChanges(FChangeLink); + end; FImages := Value; if FImages <> nil then begin Modified: trunk/jvcl/run/JvDockControlForm.pas =================================================================== --- trunk/jvcl/run/JvDockControlForm.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDockControlForm.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -3520,6 +3520,8 @@ procedure TJvDockClient.SetNCPopupMenu(Value: TPopupMenu); begin + if FNCPopupMenu <> nil then + FNCPopupMenu.RemoveFreeNotification(Self); FNCPopupMenu := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvDockSupportControl.pas =================================================================== --- trunk/jvcl/run/JvDockSupportControl.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDockSupportControl.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1535,7 +1535,10 @@ procedure TJvDockCustomTabControl.SetImages(Value: TCustomImageList); begin if Images <> nil then + begin + Images.RemoveFreeNotification(Self); Images.UnRegisterChanges(FImageChangeLink); + end; FImages := Value; if Images <> nil then begin Modified: trunk/jvcl/run/JvDriveCtrls.pas =================================================================== --- trunk/jvcl/run/JvDriveCtrls.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvDriveCtrls.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1147,7 +1147,10 @@ procedure TJvDirectoryListBox.SetFileList(Value: TJvFileListBox); begin if FFileList <> nil then + begin + FFileList.RemoveFreeNotification(Self); FFileList.FDirList := nil; + end; FFileList := Value; if FFileList <> nil then begin @@ -1158,6 +1161,8 @@ procedure TJvDirectoryListBox.SetDirLabel(Value: TLabel); begin + if FDirLabel <> nil then + FDirLabel.RemoveFreeNotification(Self); FDirLabel := Value; if Value <> nil then Value.FreeNotification(Self); @@ -1481,7 +1486,10 @@ procedure TJvDirectoryListBox.SetDriveCombo(const Value: TJvDriveCombo); begin if FDriveCombo <> nil then + begin + FDriveCombo.RemoveFreeNotification(Self); FDriveCombo.FDirList := nil; + end; FDriveCombo := Value; if FDriveCombo <> nil then begin Modified: trunk/jvcl/run/JvEmbeddedForms.pas =================================================================== --- trunk/jvcl/run/JvEmbeddedForms.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvEmbeddedForms.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -269,6 +269,8 @@ raise Exception.CreateRes(@RsELinkCircularRef) else begin + if FLink <> nil then + FLink.RemoveFreeNotification(Self); FLink := Value; FLink.FreeNotification(Self); InitLinkedForm; Modified: trunk/jvcl/run/JvFindReplace.pas =================================================================== --- trunk/jvcl/run/JvFindReplace.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvFindReplace.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -685,6 +685,8 @@ procedure TJvFindReplace.SetEditControl(Value: TJvEditControlName); begin + if FEditControl <> nil then + FEditControl.RemoveFreeNotification(Self); FEditControl := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvGradientCaption.pas =================================================================== --- trunk/jvcl/run/JvGradientCaption.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvGradientCaption.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -490,6 +490,8 @@ procedure TJvGradientCaption.SetPopupMenu(Value: TPopupMenu); begin + if FPopupMenu <> nil then + FPopupMenu.RemoveFreeNotification(Self); FPopupMenu := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvLabel.pas =================================================================== --- trunk/jvcl/run/JvLabel.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvLabel.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -1050,6 +1050,8 @@ procedure TJvCustomLabel.SetFocusControl(Value: TWinControl); begin + if FFocusControl <> nil then + FFocusControl.RemoveFreeNotification(Self); FFocusControl := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvListView.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1771,7 +1771,10 @@ if FHeaderImages <> Value then begin if FHeaderImages <> nil then + begin + FHeaderImages.RemoveFreeNotification(Self); FHeaderImages.UnRegisterChanges(FImageChangeLink); + end; FHeaderImages := Value; if Assigned(FHeaderImages) then begin Modified: trunk/jvcl/run/JvMRUManager.pas =================================================================== --- trunk/jvcl/run/JvMRUManager.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvMRUManager.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -509,6 +509,8 @@ procedure TJvMRUManager.SetRecentMenu(Value: TMenuItem); begin ClearRecentMenu; + if FRecentMenu <> nil then + FRecentMenu.RemoveFreeNotification(Self); FRecentMenu := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvMenus.pas =================================================================== --- trunk/jvcl/run/JvMenus.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvMenus.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1043,8 +1043,13 @@ begin OldOwnerDraw := IsOwnerDrawMenu; if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnregisterChanges(FImageChangeLink); + end; + FImages := Value; + if Value <> nil then begin FImages.RegisterChanges(FImageChangeLink); @@ -1070,8 +1075,13 @@ begin OldOwnerDraw := IsOwnerDrawMenu; if FDisabledImages <> nil then + begin + FDisabledImages.RemoveFreeNotification(Self); FDisabledImages.UnregisterChanges(FDisabledImageChangeLink); + end; + FDisabledImages := Value; + if Value <> nil then begin FDisabledImages.RegisterChanges(FDisabledImageChangeLink); @@ -1093,8 +1103,13 @@ begin OldOwnerDraw := IsOwnerDrawMenu; if FHotImages <> nil then + begin + FHotImages.RemoveFreeNotification(Self); FHotImages.UnregisterChanges(FHotImageChangeLink); + end; + FHotImages := Value; + if Value <> nil then begin FHotImages.RegisterChanges(FHotImageChangeLink); @@ -1350,7 +1365,10 @@ begin // Remove menu from current item painter if FItemPainter <> nil then + begin + FItemPainter.RemoveFreeNotification(Self); FItemPainter.Menu := nil; + end; // set value and if not nil, setup the painter correctly FItemPainter := Value; @@ -1593,8 +1611,13 @@ begin OldOwnerDraw := IsOwnerDrawMenu; if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnregisterChanges(FImageChangeLink); + end; + FImages := Value; + if Value <> nil then begin FImages.RegisterChanges(FImageChangeLink); @@ -1620,8 +1643,13 @@ begin OldOwnerDraw := IsOwnerDrawMenu; if FDisabledImages <> nil then + begin + FDisabledImages.RemoveFreeNotification(Self); FDisabledImages.UnregisterChanges(FDisabledImageChangeLink); + end; + FDisabledImages := Value; + if Value <> nil then begin FDisabledImages.RegisterChanges(FDisabledImageChangeLink); @@ -1643,8 +1671,13 @@ begin OldOwnerDraw := IsOwnerDrawMenu; if FHotImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnregisterChanges(FHotImageChangeLink); + end; + FHotImages := Value; + if Value <> nil then begin FHotImages.RegisterChanges(FHotImageChangeLink); @@ -2000,7 +2033,10 @@ begin // Remove menu from current item painter if FItemPainter <> nil then + begin + FItemPainter.RemoveFreeNotification(Self); FItemPainter.Menu := nil; + end; // set value and if not nil, setup the painter correctly FItemPainter := Value; Modified: trunk/jvcl/run/JvMergeManager.pas =================================================================== --- trunk/jvcl/run/JvMergeManager.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvMergeManager.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -178,6 +178,8 @@ begin if FMergeFrame <> Value then begin + if FMergeFrame <> nil then + FMergeFrame.RemoveFreeNotification(Self); FMergeFrame := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvNavigationPane.pas =================================================================== --- trunk/jvcl/run/JvNavigationPane.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvNavigationPane.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1258,7 +1258,10 @@ begin ParentStyleManager := False; if FStyleManager <> nil then + begin + FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); + end; FStyleManager := Value; if FStyleManager <> nil then begin @@ -1703,7 +1706,10 @@ begin ParentStyleManager := False; if FStyleManager <> nil then + begin + FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); + end; FStyleManager := Value; if FStyleManager <> nil then begin @@ -2173,7 +2179,10 @@ if FImages <> Value then begin if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnregisterChanges(FChangeLink); + end; FImages := Value; if FImages <> nil then begin @@ -2199,7 +2208,10 @@ begin ParentStyleManager := False; if FStyleManager <> nil then + begin + FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); + end; FStyleManager := Value; if FStyleManager <> nil then begin @@ -2400,7 +2412,10 @@ begin ParentStyleManager := False; if FStyleManager <> nil then + begin + FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); + end; FStyleManager := Value; if FStyleManager <> nil then begin @@ -2948,7 +2963,10 @@ begin ParentStyleManager := False; if FStyleManager <> nil then + begin + FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); + end; FStyleManager := Value; if FStyleManager <> nil then begin @@ -2982,6 +3000,8 @@ begin if (FIconPanel <> Value) and not (csDestroying in ComponentState) then begin + if FIconPanel <> nil then + FIconPanel.RemoveFreeNotification(Self); FIconPanel := Value; if IconButton <> nil then begin @@ -3304,7 +3324,10 @@ begin ParentStyleManager := False; if FStyleManager <> nil then + begin + FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); + end; FStyleManager := Value; if FStyleManager <> nil then begin @@ -3542,7 +3565,10 @@ begin ParentStyleManager := False; if FStyleManager <> nil then + begin + FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); + end; FStyleManager := Value; if FStyleManager <> nil then begin @@ -3580,7 +3606,10 @@ if FImages <> Value then begin if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnregisterChanges(FChangeLink); + end; FImages := Value; if FImages <> nil then begin @@ -3751,7 +3780,10 @@ begin ParentStyleManager := False; if FStyleManager <> nil then + begin + FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); + end; FStyleManager := Value; if FStyleManager <> nil then begin @@ -4535,7 +4567,10 @@ if FImages <> Value then begin if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnregisterChanges(FChangeLink); + end; FImages := Value; if FImages <> nil then begin @@ -4563,7 +4598,10 @@ begin ParentStyleManager := False; if FStyleManager <> nil then + begin + FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); + end; FStyleManager := Value; if FStyleManager <> nil then begin @@ -4945,7 +4983,10 @@ if FImages <> Value then begin if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnregisterChanges(FChangeLink); + end; FImages := Value; if FImages <> nil then begin Modified: trunk/jvcl/run/JvOutlookBar.pas =================================================================== --- trunk/jvcl/run/JvOutlookBar.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvOutlookBar.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -952,6 +952,8 @@ procedure TJvOutlookBarButton.SetAction(Value: TBasicAction); begin + if (FActionLink <> nil) and (FActionLink.Action <> nil) then + FActionLink.Action.RemoveFreeNotification(GetOutlookBar); if Value = nil then begin FActionLink.Free; Modified: trunk/jvcl/run/JvPageManager.pas =================================================================== --- trunk/jvcl/run/JvPageManager.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvPageManager.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -371,6 +371,8 @@ begin if not (csLoading in ComponentState) then SyncBtnClick(Index, False); + if FButtons[Boolean(Index)] <> nil then + FButtons[Boolean(Index)].RemoveFreeNotification(Self); FButtons[Boolean(Index)] := Value; if Value <> nil then Value.FreeNotification(Self); @@ -453,6 +455,8 @@ begin if FPageOwner <> Value then begin + if FPageOwner <> nil then + FPageOwner.RemoveFreeNotification(Self); FPageOwner := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvPropertyStoreEditor.pas =================================================================== --- trunk/jvcl/run/JvPropertyStoreEditor.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvPropertyStoreEditor.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -858,6 +858,8 @@ procedure TJvPropertyStoreEditorControl.SetPropertyStore(const Value: TComponent); begin + if FPropertyStore <> nil then + FPropertyStore.RemoveFreeNotification(Self); FPropertyStore := Value; if csDestroying in Componentstate then Exit; Modified: trunk/jvcl/run/JvScheduledEvents.pas =================================================================== --- trunk/jvcl/run/JvScheduledEvents.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvScheduledEvents.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -521,6 +521,8 @@ procedure TJvCustomScheduledEvents.SetAppStorage(Value: TJvCustomAppStorage); begin + if FAppStorage <> nil then + FAppStorage.RemoveFreeNotification(Self); FAppStorage := Value; if Assigned(FAppStorage) then FAppStorage.FreeNotification(Self); Modified: trunk/jvcl/run/JvSimPID.pas =================================================================== --- trunk/jvcl/run/JvSimPID.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvSimPID.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -333,6 +333,8 @@ begin if FSource <> Value then begin + if FSource <> nil then + FSource.RemoveFreeNotification(Self); FSource := Value; if FSource <> nil then FSource.FreeNotification(Self); Modified: trunk/jvcl/run/JvSpeedButton.pas =================================================================== --- trunk/jvcl/run/JvSpeedButton.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvSpeedButton.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -1466,6 +1466,8 @@ procedure TJvCustomSpeedButton.SetDropdownMenu(Value: TPopupMenu); begin + if FDropDownMenu <> nil then + FDropDownMenu.RemoveFreeNotification(Self); FDropDownMenu := Value; if Value <> nil then Value.FreeNotification(Self); @@ -1913,7 +1915,10 @@ procedure TJvImageSpeedButton.SetImages(const Value: TCustomImageList); begin if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnRegisterChanges(FImageChangeLink); + end; FImages := Value; if FImages <> nil then begin Modified: trunk/jvcl/run/JvSpeedbar.pas =================================================================== --- trunk/jvcl/run/JvSpeedbar.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvSpeedbar.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -2488,7 +2488,10 @@ procedure TJvSpeedBar.SetImages(Value: TCustomImageList); begin if Images <> nil then + begin + Images.RemoveFreeNotification(Self); Images.UnRegisterChanges(FImageChangeLink); + end; FImages := Value; if FImages <> nil then begin Modified: trunk/jvcl/run/JvSpin.pas =================================================================== --- trunk/jvcl/run/JvSpin.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvSpin.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -1745,6 +1745,8 @@ procedure TJvSpinButton.SetFocusControl(Value: TWinControl); begin + if FFocusControl <> nil then + FFocusControl.RemoveFreeNotification(Self); FFocusControl := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvSplit.pas =================================================================== --- trunk/jvcl/run/JvSplit.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvSplit.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -533,6 +533,8 @@ begin if Value <> FControlFirst then begin + if FControlFirst <> nil then + FControlFirst.RemoveFreeNotification(Self); if (Value = Self) or (Value is TForm) then FControlFirst := nil else @@ -549,6 +551,8 @@ begin if Value <> FControlSecond then begin + if FControlSecond <> nil then + FControlSecond.RemoveFreeNotification(Self); if (Value = Self) or (Value is TForm) then FControlSecond := nil else Modified: trunk/jvcl/run/JvStaticText.pas =================================================================== --- trunk/jvcl/run/JvStaticText.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvStaticText.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -411,6 +411,8 @@ procedure TJvCustomStaticText.SetFocusControl(Value: TWinControl); begin + if FFocusControl <> nil then + FFocusControl.RemoveFreeNotification(Self); FFocusControl := Value; if Value <> nil then Value.FreeNotification(Self); Modified: trunk/jvcl/run/JvSystemPopup.pas =================================================================== --- trunk/jvcl/run/JvSystemPopup.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvSystemPopup.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -465,7 +465,10 @@ procedure TJvSystemPopup.SetPopup(const Value: TPopupMenu); begin if Assigned(FPopup) then + begin + FPopup.RemoveFreeNotification(Self); FPopup.OnChange := nil; + end; FPopup := Value; if Assigned(FPopup) then begin Modified: trunk/jvcl/run/JvTFGlance.pas =================================================================== --- trunk/jvcl/run/JvTFGlance.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvTFGlance.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -2067,7 +2067,10 @@ if Value <> FCellPics then begin if Assigned(FCellPics) then + begin + FCellPics.RemoveFreeNotification(Self); FCellPics.UnregisterChanges(FImageChangeLink); + end; FCellPics := Value; Modified: trunk/jvcl/run/JvTFManager.pas =================================================================== --- trunk/jvcl/run/JvTFManager.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvTFManager.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -2664,7 +2664,10 @@ procedure TJvTFScheduleManager.SetStateImages(Value: TCustomImageList); begin if Assigned(FStateImages) then + begin + FStateImages.RemoveFreeNotification(Self); FStateImages.UnRegisterChanges(FImageChangeLink); + end; FStateImages := Value; @@ -2678,7 +2681,10 @@ procedure TJvTFScheduleManager.SetCustomImages(Value: TCustomImageList); begin if Assigned(FCustomImages) then + begin + FCustomImages.RemoveFreeNotification(Self); FCustomImages.UnRegisterChanges(FImageChangeLink); + end; FCustomImages := Value; Modified: trunk/jvcl/run/JvToolEdit.pas =================================================================== --- trunk/jvcl/run/JvToolEdit.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvToolEdit.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -2935,6 +2935,8 @@ procedure TJvCustomComboEdit.SetImages(const Value: TCustomImageList); begin + if FImages <> nil then + FImages.RemoveFreeNotification(Self); FImages := Value; if FImages <> nil then FImages.FreeNotification(Self) Modified: trunk/jvcl/run/JvVersionControlActions.pas =================================================================== --- trunk/jvcl/run/JvVersionControlActions.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvVersionControlActions.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -419,6 +419,8 @@ begin if Value <> FVersionControlComponent then begin + if FVersionControlComponent <> nil then + FVersionControlComponent.RemoveFreeNotification(Self); FVersionControlComponent := Value; if FVersionControlComponent <> nil then FVersionControlComponent.FreeNotification(Self); Modified: trunk/jvcl/run/JvWizard.pas =================================================================== --- trunk/jvcl/run/JvWizard.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvWizard.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -3046,7 +3046,10 @@ procedure TJvWizard.SetHeaderImages(Value: TCustomImageList); begin if Assigned(FHeaderImages) then + begin + FHeaderImages.RemoveFreeNotification(Self); FHeaderImages.UnRegisterChanges(FImageChangeLink); + end; FHeaderImages := Value; if Assigned(FHeaderImages) then begin Modified: trunk/jvcl/run/JvXPBar.pas =================================================================== --- trunk/jvcl/run/JvXPBar.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvXPBar.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1035,6 +1035,8 @@ procedure TJvXPBarItem.SetAction(Value: TBasicAction); begin + if (FActionLink <> nil) and (FActionLink.Action <> nil) then + FActionLink.Action.RemoveFreeNotification(FWinXPBar); if Value = nil then begin FActionLink.Free; @@ -1933,7 +1935,10 @@ if Value <> FImageList then begin if FImageList <> nil then + begin + FImageList.RemoveFreeNotification(Self); FImageList.UnRegisterChanges(FImageChangeLink); + end; FImageList := Value; if FImageList <> nil then begin @@ -2267,7 +2272,10 @@ if FRollImages <> Value then begin if FRollImages <> nil then + begin + FRollImages.RemoveFreeNotification(Self); FRollImages.UnRegisterChanges(FRollChangeLink); + end; FRollImages := Value; if FRollImages <> nil then begin Modified: trunk/jvcl/run/JvXPButtons.pas =================================================================== --- trunk/jvcl/run/JvXPButtons.pas 2009-04-29 13:57:07 UTC (rev 12295) +++ trunk/jvcl/run/JvXPButtons.pas 2009-04-29 14:53:38 UTC (rev 12296) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -911,7 +911,10 @@ if FImages <> Value then begin if FImages <> nil then + begin + FImages.RemoveFreeNotification(Self); FImages.UnRegisterChanges(FChangeLink); + end; FImages := Value; if FImages <> nil then begin @@ -935,6 +938,8 @@ begin if FDropDownMenu <> Value then begin + if FDropDownMenu <> nil then + FDropDownMenu.RemoveFreeNotification(Self); FDropDownMenu := Value; if FDropDownMenu <> nil then FDropDownMenu.FreeNotification(Self); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2009-04-29 17:02:31
|
Revision: 12297 http://jvcl.svn.sourceforge.net/jvcl/?rev=12297&view=rev Author: obones Date: 2009-04-29 17:02:25 +0000 (Wed, 29 Apr 2009) Log Message: ----------- Removed UTF-8 encoding Modified Paths: -------------- trunk/jvcl/run/JvComCtrls.pas trunk/jvcl/run/JvDBControls.pas trunk/jvcl/run/JvDBFindEdit.pas trunk/jvcl/run/JvDBSpinEdit.pas trunk/jvcl/run/JvLabel.pas trunk/jvcl/run/JvSpeedButton.pas trunk/jvcl/run/JvSpin.pas trunk/jvcl/run/JvXPButtons.pas Modified: trunk/jvcl/run/JvComCtrls.pas =================================================================== --- trunk/jvcl/run/JvComCtrls.pas 2009-04-29 14:53:38 UTC (rev 12296) +++ trunk/jvcl/run/JvComCtrls.pas 2009-04-29 17:02:25 UTC (rev 12297) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Modified: trunk/jvcl/run/JvDBControls.pas =================================================================== --- trunk/jvcl/run/JvDBControls.pas 2009-04-29 14:53:38 UTC (rev 12296) +++ trunk/jvcl/run/JvDBControls.pas 2009-04-29 17:02:25 UTC (rev 12297) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Modified: trunk/jvcl/run/JvDBFindEdit.pas =================================================================== --- trunk/jvcl/run/JvDBFindEdit.pas 2009-04-29 14:53:38 UTC (rev 12296) +++ trunk/jvcl/run/JvDBFindEdit.pas 2009-04-29 17:02:25 UTC (rev 12297) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Modified: trunk/jvcl/run/JvDBSpinEdit.pas =================================================================== --- trunk/jvcl/run/JvDBSpinEdit.pas 2009-04-29 14:53:38 UTC (rev 12296) +++ trunk/jvcl/run/JvDBSpinEdit.pas 2009-04-29 17:02:25 UTC (rev 12297) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Modified: trunk/jvcl/run/JvLabel.pas =================================================================== --- trunk/jvcl/run/JvLabel.pas 2009-04-29 14:53:38 UTC (rev 12296) +++ trunk/jvcl/run/JvLabel.pas 2009-04-29 17:02:25 UTC (rev 12297) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Modified: trunk/jvcl/run/JvSpeedButton.pas =================================================================== --- trunk/jvcl/run/JvSpeedButton.pas 2009-04-29 14:53:38 UTC (rev 12296) +++ trunk/jvcl/run/JvSpeedButton.pas 2009-04-29 17:02:25 UTC (rev 12297) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Modified: trunk/jvcl/run/JvSpin.pas =================================================================== --- trunk/jvcl/run/JvSpin.pas 2009-04-29 14:53:38 UTC (rev 12296) +++ trunk/jvcl/run/JvSpin.pas 2009-04-29 17:02:25 UTC (rev 12297) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Modified: trunk/jvcl/run/JvXPButtons.pas =================================================================== --- trunk/jvcl/run/JvXPButtons.pas 2009-04-29 14:53:38 UTC (rev 12296) +++ trunk/jvcl/run/JvXPButtons.pas 2009-04-29 17:02:25 UTC (rev 12297) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2009-05-18 23:21:14
|
Revision: 12310 http://jvcl.svn.sourceforge.net/jvcl/?rev=12310&view=rev Author: jfudickar Date: 2009-05-18 23:21:04 +0000 (Mon, 18 May 2009) Log Message: ----------- Fixed Implementation of "A TJvMemoparameter is set to '' after creating" Modified Paths: -------------- trunk/jvcl/run/JvDynControlEngine.pas trunk/jvcl/run/JvParameterListParameter.pas Modified: trunk/jvcl/run/JvDynControlEngine.pas =================================================================== --- trunk/jvcl/run/JvDynControlEngine.pas 2009-05-18 22:46:22 UTC (rev 12309) +++ trunk/jvcl/run/JvDynControlEngine.pas 2009-05-18 23:21:04 UTC (rev 12310) @@ -727,8 +727,12 @@ function TJvDynControlEngine.CreateMemoControl(AOwner: TComponent; AParentControl: TWinControl; const AControlName: string): TWinControl; +var + DynCtrlData: IJvDynControlData; begin Result := TWinControl(CreateControl(jctMemo, AOwner, AParentControl, AControlName)); + IntfCast(Result, IJvDynControlData, DynCtrlData); + DynCtrlData.ControlValue := ''; end; function TJvDynControlEngine.CreateRichEditControl(AOwner: TComponent; Modified: trunk/jvcl/run/JvParameterListParameter.pas =================================================================== --- trunk/jvcl/run/JvParameterListParameter.pas 2009-05-18 22:46:22 UTC (rev 12309) +++ trunk/jvcl/run/JvParameterListParameter.pas 2009-05-18 23:21:04 UTC (rev 12310) @@ -2386,7 +2386,6 @@ procedure TJvMemoParameter.CreateWinControl(AParameterParent: TWinControl); begin SetWinControl (DynControlEngine.CreateMemoControl(Self, AParameterParent, GetParameterName)); - AsVariant := ''; end; procedure TJvMemoParameter.SetWinControlProperties; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ah...@us...> - 2009-05-27 15:54:26
|
Revision: 12315 http://jvcl.svn.sourceforge.net/jvcl/?rev=12315&view=rev Author: ahuser Date: 2009-05-27 15:54:15 +0000 (Wed, 27 May 2009) Log Message: ----------- - Added workaround for a TMaskEdit bug that causes an access violation if you press Backspace in the NoDateText filled DatePickerEdit - Added new property NoDateValue (default 0) that is the representation for NoDateText (NULL). This allows to enter 1899-12-30 (=0.0) without showing it as NoDateText. Modified Paths: -------------- trunk/jvcl/run/JvDBDatePickerEdit.pas trunk/jvcl/run/JvDatePickerEdit.pas Modified: trunk/jvcl/run/JvDBDatePickerEdit.pas =================================================================== --- trunk/jvcl/run/JvDBDatePickerEdit.pas 2009-05-25 18:29:53 UTC (rev 12314) +++ trunk/jvcl/run/JvDBDatePickerEdit.pas 2009-05-27 15:54:15 UTC (rev 12315) @@ -161,6 +161,7 @@ property Images; property NoDateShortcut; property NoDateText; + property NoDateValue; property NumGlyphs; property ParentColor; property ParentFont; @@ -252,13 +253,18 @@ begin inherited Loaded; if AllowNoDate and not IsLinked then - InternalDate := 0.0; + InternalDate := NoDateValue; end; procedure TJvCustomDBDatePickerEdit.DataChange(Sender: TObject); begin if IsLinked and FDataLink.Active then - InternalDate := FDataLink.Field.AsDateTime; + begin + if AllowNoDate and FDataLink.Field.IsNull then + InternalDate := NoDateValue + else + InternalDate := FDataLink.Field.AsDateTime; + end; end; destructor TJvCustomDBDatePickerEdit.Destroy; @@ -349,7 +355,7 @@ Result := True; end else - Result := AllowNoDate and (Date = 0.0); + Result := AllowNoDate and (Date = NoDateValue); end; function TJvCustomDBDatePickerEdit.IsLinked: Boolean; Modified: trunk/jvcl/run/JvDatePickerEdit.pas =================================================================== --- trunk/jvcl/run/JvDatePickerEdit.pas 2009-05-25 18:29:53 UTC (rev 12314) +++ trunk/jvcl/run/JvDatePickerEdit.pas 2009-05-27 15:54:15 UTC (rev 12315) @@ -32,7 +32,8 @@ - It is possible to specify a NoDateText which will be displayed when no date is selected. The original datetimepicker would display 1899-12-31 in such cases. This feature could be further controlled by the AllowNoDate and - NoDateShortcut properties. + NoDateShortcut properties. With the NoDateValue you can control what TDateTime + value should be used. It defaults to 0, what means 1899-12-31. Known issues / not (yet) implemented features: @@ -80,7 +81,7 @@ Length: Byte; Index: Byte; end; - TJvDateFigures = array[ 0..2] of TJvDateFigureInfo; + TJvDateFigures = array[0..2] of TJvDateFigureInfo; {A dropdown form with an embedded calendar control.} TJvDropCalendar = class(TJvCustomDropDownForm) @@ -135,6 +136,7 @@ FStoreDateFormat: Boolean; FDateSeparator: Char; FPopupDate: TDateTime; + FNoDateValue: TDateTime; FOnGetValidDateString: TJvGetValidDateStringEvent; // FMinYear: Word; // FMaxYear: Word; @@ -157,6 +159,7 @@ procedure SetDateFormat(const AValue: string); function GetDropped: Boolean; procedure SetNoDateText(const AValue: string); + procedure SetNoDateValue(const AValue: TDateTime); procedure SetDateSeparator(const AValue: Char); function GetEditMask: string; procedure SetEditMask(const AValue: string); @@ -173,6 +176,7 @@ function AcceptPopup(var Value: Variant): Boolean; override; function IsNoDateShortcutStored: Boolean; function IsNoDateTextStored: Boolean; + function IsNoDateValueStored: Boolean; procedure PopupChange; override; procedure Change; override; procedure Loaded; override; @@ -210,6 +214,7 @@ // property MinYear: Word read FMinYear write FMinYear; property NoDateShortcut: TShortcut read FNoDateShortcut write FNoDateShortcut stored IsNoDateShortcutStored; property NoDateText: string read FNoDateText write SetNoDateText stored IsNoDateTextStored; + property NoDateValue: TDateTime read FNoDateValue write SetNoDateValue stored IsNoDateValueStored; property ShowButton default True; property StoreDate: Boolean read FStoreDate write FStoreDate default False; property StoreDateFormat: Boolean read FStoreDateFormat write FStoreDateFormat default False; @@ -290,6 +295,7 @@ property Images; property NoDateShortcut; property NoDateText; + property NoDateValue; property NumGlyphs; property ParentColor; property ParentFont; @@ -446,7 +452,7 @@ SysUtils.DateSeparator := FDateSeparator; ShortDateFormat := FInternalDateFormat; if AllowNoDate and ((Text = NoDateText) or IsEmptyMaskText(AText)) then - ADate := 0.0 + ADate := NoDateValue else begin if ARaise then @@ -588,7 +594,7 @@ end; {make sure querying the date in an OnChange event handler always reflects the current contents of the control and not just the last valid value.} - lDate := 0; + lDate := NoDateValue; AttemptTextToDate(Text, lDate, lActFig.Index = High(TJvDateFigures)); if AlwaysReturnEditDate then FDate := lDate; @@ -717,7 +723,7 @@ function TJvCustomDatePickerEdit.DetermineDateSeparator(AFormat: string): Char; begin AFormat := StrRemoveChars(Trim(AFormat), ['d', 'M', 'y']); - if Length(AFormat) > 0 then + if AFormat <> '' then Result := AFormat[1] else Result := SysUtils.DateSeparator; @@ -749,9 +755,9 @@ raise; end else - Self.Date := 0; + Self.Date := NoDateValue; end; - if AllowNoDate and (lDate = 0.0) then + if AllowNoDate and (lDate = NoDateValue) then begin Result := EditText; EditText := ''; @@ -894,7 +900,7 @@ function TJvCustomDatePickerEdit.IsEmpty: Boolean; begin - Result := (FDate = 0); + Result := FDate = NoDateValue; end; function TJvCustomDatePickerEdit.IsEmptyMaskText(const AText: string): Boolean; @@ -909,9 +915,14 @@ function TJvCustomDatePickerEdit.IsNoDateTextStored: Boolean; begin - Result := (NoDateText <> ''); + Result := NoDateText <> ''; end; +function TJvCustomDatePickerEdit.IsNoDateValueStored: Boolean; +begin + Result := NoDateValue <> 0; +end; + procedure TJvCustomDatePickerEdit.RestoreMaskForKeyPress; begin try @@ -932,27 +943,28 @@ // Indicates whether FDeleting is set here from False to True. DeleteSetHere: Boolean; OrgEditText: string; + WasUnmasked: Boolean; begin DeleteSetHere := False; + WasUnmasked := not IsMasked; RestoreMaskForKeyPress; if AllowNoDate and (ShortCut(Key, Shift) = NoDateShortcut) and EditCanModify then - Date := 0 + Date := NoDateValue else if Shift * KeyboardShiftStates = [] then case Key of -// VK_ESCAPE: -// begin -// CloseUp; -// Reset; -// end; -// VK_DOWN: -// if AShift = [ssAlt] then -// DropDown; VK_BACK, VK_CLEAR, VK_DELETE, VK_EREOF, VK_OEM_CLEAR: begin DeleteSetHere := not FDeleting; FDeleting := True; + + { Workaround for an TMaskEdit bug: If the NoDateText is visible and the + user presses VK_BACK the TCustomMaskEdit.DeleteKeys will raise an + access violation. + Fortunately we have already cleared the edit in RestoreMaskForKeyPress(). } + if (Key = VK_BACK) and (SelStart = 0) and (SelLength = 1) and WasUnmasked then + Key := 0; end; VK_RETURN: begin @@ -1109,11 +1121,11 @@ begin if AValue then begin - if Self.Date = 0 then + if Self.Date = NoDateValue then Self.Date := SysUtils.Date; end else - Self.Date := 0; + Self.Date := NoDateValue; Change; end; end; @@ -1124,7 +1136,7 @@ begin StoreDate := Trunc(AValue) = Trunc(FDate); FDate := AValue; - if AValue <> 0 then + if AValue <> NoDateValue then Checked := True; DoChange; end; @@ -1175,6 +1187,15 @@ UpdateDisplay; end; +procedure TJvCustomDatePickerEdit.SetNoDateValue(const AValue: TDateTime); +begin + if AValue <> FNoDateValue then + begin + FNoDateValue := AValue; + UpdateDisplay; + end; +end; + procedure TJvCustomDatePickerEdit.SetPopupValue(const Value: Variant); var NewDate: TDateTime; @@ -1263,7 +1284,7 @@ function TJvCustomDatePickerEdit.ValidateDate(const ADate: TDateTime): Boolean; begin - if (not AllowNoDate) and (ADate = 0) then + if not AllowNoDate and (ADate = NoDateValue) then RaiseNoDate; if (ADate < EncodeDate(1752, 09, 14)) or ((ADate > EncodeDate(1752, 09, 19)) and (ADate < EncodeDate(1752, 10, 1))) then { For historical/political reasons the days 1752-09-03 - 1752-09-13 do not This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wp...@us...> - 2009-06-08 14:22:08
|
Revision: 12331 http://jvcl.svn.sourceforge.net/jvcl/?rev=12331&view=rev Author: wpostma Date: 2009-06-08 14:22:06 +0000 (Mon, 08 Jun 2009) Log Message: ----------- MANTIS 0004328 "Filter on TJvMemoryData dont work": FIX MERGED: - Add new unit JvExprParser.pas - related to JvMemoryDataset's new filtering capability. - Added Filtering code contribution from C.Schiffler merged into JvMemoryDataset.pas Modified Paths: -------------- trunk/jvcl/run/JvMemoryDataset.pas Added Paths: ----------- trunk/jvcl/run/JvExprParser.pas Added: trunk/jvcl/run/JvExprParser.pas =================================================================== --- trunk/jvcl/run/JvExprParser.pas (rev 0) +++ trunk/jvcl/run/JvExprParser.pas 2009-06-08 14:22:06 UTC (rev 12331) @@ -0,0 +1,984 @@ +{----------------------------------------------------------------------------- +The contents of this file are subject to the Mozilla Public License +Version 1.1 (the "License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at +http://www.mozilla.org/MPL/MPL-1.1.html + +Software distributed under the License is distributed on an "AS IS" basis, +WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for +the specific language governing rights and limitations under the License. + +This file is derived from ExprParser.pas of the MP3BookHelper project +http://mp3bookhelper.sourceforge.net and re-licensed under MPL by permission from +the original author Vlad Skarzhevskyy. + +The Original Code is: ExprParser.pas, released on 2008-10-24 + +The Initial Developers of the Original Code are: Vlad Skarzhevskyy, Christian Schiffler +Copyright (c) 2002 Vlad Skarzhevskyy +Copyright (c) 2008 Christian Schiffler +All Rights Reserved. + +You may retrieve the latest version of this file at the Project JEDI's JVCL home page, +located at http://jvcl.sourceforge.net + +Known Issues: + Equality Check is case insensitive due to usage of TMask class in unit Masks. + +This unit is used as a helper for JvMemoryDataSet.pas. + +} + +unit JvExprParser; + +{DEFINE TESTING_PARSER} + +interface + +uses + Contnrs; + +type + TOnGetVariableValue = function(Sender: TObject; Varname: WideString; var Value: Variant): boolean of object; + TOnExecuteFunction = function(Sender: TObject; FuncName: WideString; Args: Variant; var ResVal: Variant): boolean of + object; + + TExprParser = class + private + FValue: Variant; + FParser: TObject; + FScan: TObject; + FExpression: Widestring; + FOnGetVariable: TOnGetVariableValue; + FOnExecuteFunction: TOnExecuteFunction; + FEnableWildcardMatching: boolean; + procedure SetExpression(const Value: Widestring); + function DoGetVariable(Varname: WideString; var Value: Variant): boolean; + function DoExecuteFunction(FuncName: WideString; Args: Variant; var ResVal: Variant): boolean; + public + ErrorMessage: WideString; + constructor Create(); + destructor Destroy; override; + function eval: boolean; overload; + function eval(Expression: Widestring): boolean; overload; + published + property Expression: Widestring read FExpression write SetExpression; + property OnGetVariable: TOnGetVariableValue read FOnGetVariable write FOnGetVariable; + property OnExecuteFunction: TOnExecuteFunction read FOnExecuteFunction write FOnExecuteFunction; + property Value: Variant read FValue; + property EnableWildcardMatching: boolean read FEnableWildcardMatching write FEnableWildcardMatching; + end; + + {$IFDEF TESTING_PARSER} +var + debugText : WideString; + {$ENDIF} + +implementation + +uses + Variants, + Masks, + SysUtils; + +const + NUMBERS = [ + WideChar('0')..WideChar('9')]; + + LETTERS = [ + WideChar('a')..WideChar('z'), + WideChar('A')..WideChar('Z'), + WideChar('_')]; + + LETTERS_NUMBERS = [ + WideChar('0')..WideChar('9'), + WideChar('a')..WideChar('z'), + WideChar('A')..WideChar('Z'), + WideChar('_')]; + + OPERATORS = [ + WideChar('+'), WideChar('-'), + WideChar('/'), WideChar('*'), + WideChar('='), + WideChar('<'), + WideChar('>'), + WideChar('&'), + WideChar('|'), + WideChar('!')]; + +type + + EToken = (tkNA, tkEOF, tkError, + tkLParen, tkRParen, tkComa, + tkOperator, tkIdentifier, + tkNumber, tkInteger, tkString); + + ELex = class + public + token: EToken; + chr: Char; + str: WideString; + pos: integer; + constructor Create(token: EToken; pos: integer); overload; + constructor Create(token: EToken; str: WideString; pos: integer); overload; + constructor Create(token: EToken; chr: WideChar; pos: integer); overload; + function debug(): WideString; + end; + + EScan = class(TObjectList) + private + function GetItem(Index: Integer): ELex; + public + ErrorMessage: WideString; + constructor Create(); + destructor Destroy; override; + property Items[Index: Integer]: ELex read GetItem; default; + function pars(str: WideString): boolean; + {$IFDEF TESTING_PARSER} + procedure debugPrint(); + {$ENDIF} + end; + + EVariant = variant; + + EParser = class; + + ENode = class + FParser: EParser; + constructor Create(Parser: EParser); virtual; + function eval(): EVariant; virtual; abstract; + end; + + ParserException = class(Exception) + public + constructor Create(const Msg: string; lex: ELex); overload; + constructor Create(const E: Exception); overload; + end; + + ENodeCValue = class(ENode) + public + cvalue: ELex; + constructor Create(Parser: EParser; cvalue: ELex); reintroduce; + function eval(): EVariant; override; + end; + + ENodeVariable = class(ENode) + public + lex: ELex; + constructor Create(Parser: EParser; lex: ELex); reintroduce; + function eval(): EVariant; override; + end; + + ENodeUnary = class(ENode) + public + operator: ELex; + rightNode: ENode; + constructor Create(Parser: EParser; operator: ELex; rightNode: ENode); reintroduce; + destructor Destroy; override; + function eval(): EVariant; override; + end; + + ENodeBin = class(ENode) + public + operator: ELex; + lefNode, rightNode: ENode; + constructor Create(Parser: EParser; operator: ELex; lefNode, rightNode: ENode); reintroduce; + destructor Destroy; override; + function eval(): EVariant; override; + end; + + ENodeFunction = class(ENode) + public + func: ELex; + args: TObjectList; + constructor Create(Parser: EParser; func: ELex); reintroduce; + destructor Destroy; override; + procedure arg(Node: ENode); + function eval(): EVariant; override; + end; + + EParser = class + public + Parent: TExprParser; + scan: EScan; + scan_idx: integer; + root: ENode; + ErrorMessage: WideString; + value: EVariant; + + constructor Create(); + destructor Destroy; override; + + function pars(): boolean; + function execute(): boolean; + + function Expr(): ENode; + function Term(): ENode; + function Factor(): ENode; + + function LexC(): ELex; + function LexLook(look_ahead: integer = 1): ELex; + procedure LexAcept(); + end; + +var + ELexEOF : ELex; + + {$IFDEF TESTING_PARSER} + +procedure DebugMessage(msg: WideString); +begin + debugText := debugText + msg + sLineBreak; +end; +{$ENDIF} + +{ ELex } + +constructor ELex.Create(token: EToken; pos: integer); +begin + self.token := token; + self.pos := pos; +end; + +constructor ELex.Create(token: EToken; str: WideString; pos: integer); +begin + self.token := token; + self.str := str; + self.pos := pos; +end; + +constructor ELex.Create(token: EToken; chr: WideChar; pos: integer); +begin + self.token := token; + self.chr := Char(chr); + self.pos := pos; +end; + +function ELex.debug: WideString; +const + tokenStr : array[EToken] of string = + ('N/A', 'End of expression', 'Error', + '(', ')', ',', + 'Operator', 'Identifier', + 'Number', 'Integer', 'String'); +begin + Result := tokenStr[token]; + case token of + tkOperator: Result := Result + ': ' + chr; + tkIdentifier, + tkNumber, + tkInteger, + tkString: + Result := Result + ': ' + str; + end; + Result := Result + ' at pos: ' + IntToStr(pos); +end; + +{ EScan } + +constructor EScan.Create; +begin + inherited; + OwnsObjects := true; + ErrorMessage := ''; +end; + +destructor EScan.Destroy; +begin + inherited; +end; + +function EScan.GetItem(Index: Integer): ELex; +begin + result := inherited Items[Index] as ELex; +end; + +function EScan.pars(str: WideString): boolean; +var + idx, start_idx, len : integer; + c : WideChar; + s : WideString; + ctoken : EToken; +begin + len := Length(str); + idx := 1; + s := ''; + ctoken := tkNA; + + while (idx <= len) do + begin + c := str[idx]; + start_idx := idx; + Inc(idx); + ctoken := tkNA; + + case c of + '(': ctoken := tkLParen; + ')': ctoken := tkRParen; + ',': ctoken := tkComa; + ' ', #09: ; + else + if (c in OPERATORS) then + begin + ctoken := tkOperator; + end + else + if (c = '"') or (c = '''') then + begin + ctoken := tkString; + while (idx <= len) and (str[idx] <> c) do + begin + s := s + str[idx]; + Inc(idx); + end; + if (idx <= len) and (str[idx] = c) then + Inc(idx) + else + begin + ctoken := tkError; + ErrorMessage := 'No end of string found'; + end + + end + else + if (c in NUMBERS) then + begin + ctoken := tkInteger; + s := s + c; + while (idx <= len) and (str[idx] in NUMBERS) do + begin + s := s + str[idx]; + Inc(idx); + end; + if ((idx <= len) and (str[idx] = '.')) then + begin + ctoken := tkNumber; + Inc(idx); + s := s + '.'; + while (idx <= len) and (str[idx] in NUMBERS) do + begin + s := s + str[idx]; + Inc(idx); + end; + end; + end + else + if (c = '.') then // .55 + begin + ctoken := tkNumber; + s := s + c; + while (idx <= len) and (str[idx] in NUMBERS) do + begin + s := s + str[idx]; + Inc(idx); + end; + end + else + if (c in LETTERS) then + begin + ctoken := tkIdentifier; + s := s + c; + while (idx <= len) and (str[idx] in LETTERS_NUMBERS) do + begin + s := s + str[idx]; + Inc(idx); + end; + end + else + begin + ctoken := tkError; + ErrorMessage := 'Bad character ''' + c + ''''; + end; + end; + + case ctoken of + tkError: break; + tkNA: ; // continue + tkOperator: Add(ELex.Create(tkOperator, c, start_idx)); + tkIdentifier, + tkNumber, + tkInteger, + tkString: + begin + if Lowercase(s) = 'and' then + Add(ELex.Create(tkOperator, WideChar('&'), start_idx)) + else + if Lowercase(s) = 'or' then + Add(ELex.Create(tkOperator, WideChar('|'), start_idx)) + else + Add(ELex.Create(ctoken, s, start_idx)); + s := ''; + end + else + Add(ELex.Create(ctoken, start_idx)); + end; + end; + Result := (ctoken <> tkError); + ELexEOF := ELex.Create(tkEOF, idx); + Add(ELexEOF); +end; + +{$IFDEF TESTING_PARSER} + +procedure EScan.debugPrint; +var + i : integer; +begin + for i := 0 to Count - 1 do + DebugMessage(Items[i].debug); +end; +{$ENDIF} + +{ EParser } + +constructor EParser.Create; +begin + scan_idx := 0; + ErrorMessage := ''; +end; + +destructor EParser.Destroy; +begin + root.Free; + inherited; +end; + +function EParser.pars: boolean; +begin + if (root <> nil) then + FreeAndNil(root); + try + root := Expr(); + if (scan_idx < scan.Count - 1) then + begin + FreeAndNil(root); + raise ParserException.Create('Unexpected ', LexC()); + end; + except + on E: Exception do + begin + ErrorMessage := E.Message; + end + end; + Result := (root <> nil); +end; + +function EParser.execute: boolean; +begin + Result := false; + if (root <> nil) then + begin + try + value := root.eval(); + Result := true; + except + on E: Exception do + begin + ErrorMessage := E.Message; + end + end; + end; +end; + +procedure EParser.LexAcept; +begin + Inc(scan_idx); +end; + +function EParser.LexC: ELex; +begin + Result := LexLook(0); +end; + +function EParser.LexLook(look_ahead: integer): ELex; +begin + if ((scan_idx + look_ahead) < scan.Count) then + Result := scan[scan_idx + look_ahead] + else + Result := ELexEOF; +end; + +function EParser.Expr: ENode; +var + cNode, rightNode : ENode; + lex : ELex; +begin + cNode := nil; + try + cNode := Term(); + lex := LexC(); + + if (lex.token = tkOperator) then + begin + if (lex.chr in ['+', '-']) then + begin + LexAcept(); + rightNode := Expr(); + if (rightNode = nil) then + raise ParserException.Create('Expression expected after', lex); + cNode := ENodeBin.Create(Self, lex, cNode, rightNode); + end; + end; + except + on PE: ParserException do + begin + FreeAndNil(cNode); + raise; + end; + on E: Exception do + begin + FreeAndNil(cNode); + raise ParserException.Create(E.Message); + end; + end; + Result := cNode; +end; + +function EParser.Term: ENode; +var + cNode, rightNode : ENode; + lex : ELex; +begin + cNode := nil; + try + cNode := Factor(); + lex := LexC(); + + if (lex.token = tkOperator) then + begin + if (lex.chr in ['*', '/', '=', '&', '|', '<', '>']) then + begin + LexAcept(); + rightNode := Expr(); + if (rightNode = nil) then + raise ParserException.Create('Expression expected after', lex); + cNode := ENodeBin.Create(Self, lex, cNode, rightNode); + end; + end; + except + on PE: ParserException do + begin + FreeAndNil(cNode); + raise; + end; + on E: Exception do + begin + FreeAndNil(cNode); + raise ParserException.Create(E.Message); + end; + end; + Result := cNode; +end; + +function EParser.Factor: ENode; +var + cNode : ENode; + fNode : ENodeFunction; + lex : ELex; +begin + cNode := nil; + try + lex := LexC(); + case lex.token of + tkLParen: + begin + LexAcept(); + cNode := Expr(); + if ((LexC().token = tkRParen)) then + begin + LexAcept(); + end + else + raise ParserException.Create('Expected closing parenthesis instead of', LexC()); + end; + tkOperator: // unary minus + begin + if (lex.chr in ['+', '-', '!']) then + begin + LexAcept(); + cNode := ENodeUnary.Create(Self, lex, Factor()); + end + else + raise ParserException.Create('Unexpected ', lex); + end; + tkNumber, tkInteger, tkString: + begin + cNode := ENodeCValue.Create(Self, lex); + LexAcept(); + end; + tkIdentifier: + begin + if (LexLook().token = tkLParen) then + begin + // function call + LexAcept(); + fNode := ENodeFunction.Create(Self, lex); + LexAcept(); + cNode := fNode; + if ((LexC().token <> tkRParen)) then + begin + fNode.arg(Expr()); + while (LexC().token = tkComa) do + begin + LexAcept(); + fNode.arg(Expr()); + end; + end; + + if ((LexC().token = tkRParen)) then + begin + LexAcept(); + end + else + raise ParserException.Create('Expected closing parenthesis instead of', LexC()); + end + else + begin + cNode := ENodeVariable.Create(Self, lex); + LexAcept(); + end; + end; + else + raise ParserException.Create('Unexpected ', lex); + end; + except + on PE: ParserException do + begin + FreeAndNil(cNode); + raise; + end; + on E: Exception do + begin + FreeAndNil(cNode); + raise ParserException.Create(E.Message); + end; + end; + Result := cNode; +end; + +{ ENode } + +constructor ENode.Create(Parser: EParser); +begin + FParser := Parser; +end; + +{ ENodeBin } + +constructor ENodeBin.Create(Parser: EParser; operator: ELex; lefNode, rightNode: ENode); +begin + inherited Create(Parser); + self.operator := operator; + self.lefNode := lefNode; + self.rightNode := rightNode; +end; + +destructor ENodeBin.Destroy; +begin + lefNode.Free; + rightNode.Free; + inherited; +end; + +function ENodeBin.eval: EVariant; +var + tmp, tmp2 : variant; + tmp_s, tmp_s2 : WideString; + + function EvalEquality: boolean; + var + wildcard1, wildcard2 : boolean; + begin + // Determine values to have them handy. + tmp := lefNode.eval; + tmp2 := rightNode.eval; + // Special case, at least one of both is null: + if (tmp = Variants.NULL) or (tmp2 = Variants.NULL) then + begin + Result := (tmp = Variants.NULL) and (tmp2 = Variants.NULL); + end + else + begin + // Possiblilities: + // Left hand contains wildcards -> Match right hand against left hand. + // Right hand contains wildcards -> Match left hand against right hand. + // Both hands contain wildcards -> Match for string equality as if no wildcards are supported. + if FParser.Parent.FEnableWildcardMatching then + begin + tmp_s := tmp; + tmp_s2 := tmp2; + wildcard1 := (Pos('*', tmp_s) > 0) or (Pos('?', tmp_s) > 0); + wildcard2 := (Pos('*', tmp_s2) > 0) or (Pos('?', tmp_s2) > 0); + if wildcard1 and (not wildcard2) then + Result := MatchesMask(tmp_s2, tmp_s) + else + if wildcard2 then + Result := MatchesMask(tmp_s, tmp_s2) + else + Result := (tmp = tmp2); + end + else + Result := (tmp = tmp2); + end; + end; + function EvalLT: boolean; + begin + // Determine values to have them handy. + tmp := lefNode.eval; + tmp2 := rightNode.eval; + // Special case, at least one of both is null: + if (tmp = Variants.NULL) or (tmp2 = Variants.NULL) then + begin + // null is considered to be smaller than any value. + Result := (tmp = Variants.NULL); + end + else + begin + Result := (tmp < tmp2); + end; + end; + function EvalGT: boolean; + begin + // Determine values to have them handy. + tmp := lefNode.eval; + tmp2 := rightNode.eval; + // Special case, at least one of both is null: + if (tmp = Variants.NULL) or (tmp2 = Variants.NULL) then + begin + // null is considered to be smaller than any value. + Result := (tmp2 = Variants.NULL); + end + else + begin + Result := (tmp > tmp2); + end; + end; +begin + case operator.chr of + '+': + begin + tmp := lefNode.eval; + // force string concatenation + if (TVarData(tmp).VType = varString) or + (TVarData(tmp).VType = varOleStr) then + begin + tmp_s := tmp; + tmp_s2 := rightNode.eval; + tmp_s := tmp_s + tmp_s2; + Result := tmp_s; + end + else + begin + Result := tmp + rightNode.eval; + end; + end; + '-': Result := lefNode.eval - rightNode.eval; + '*': Result := lefNode.eval * rightNode.eval; + '/': Result := lefNode.eval / rightNode.eval; + '=': Result := EvalEquality(); + '<': Result := EvalLT(); + '>': Result := EvalGT(); + '&': Result := lefNode.eval and rightNode.eval; + '|': Result := lefNode.eval or rightNode.eval; + end; +end; + +{ ENodeUnary } + +constructor ENodeUnary.Create(Parser: EParser; operator: ELex; rightNode: ENode); +begin + inherited Create(Parser); + self.operator := operator; + self.rightNode := rightNode; +end; + +destructor ENodeUnary.Destroy; +begin + rightNode.Free; + inherited; +end; + +function ENodeUnary.eval: EVariant; +begin + Result := rightNode.eval(); + if operator.chr = '-' then + Result := -Result; + if operator.chr = '!' then + Result := not Result; +end; + +{ ENodeCValue } + +constructor ENodeCValue.Create(Parser: EParser; cvalue: ELex); +begin + inherited Create(Parser); + self.cvalue := cvalue; +end; + +function ENodeCValue.eval: EVariant; +begin + case cvalue.token of + tkNumber: + Result := StrToFloat(cvalue.str); + tkInteger: + Result := StrToInt(cvalue.str); + tkString: + Result := cvalue.str; + end; +end; + +{ ENodeFunction } + +constructor ENodeFunction.Create(Parser: EParser; func: ELex); +begin + inherited Create(Parser); + args := TObjectList.Create(); + args.OwnsObjects := true; + self.func := func; +end; + +destructor ENodeFunction.Destroy; +begin + args.Free; + inherited; +end; + +procedure ENodeFunction.arg(Node: ENode); +begin + args.Add(Node); +end; + +function ENodeFunction.eval: EVariant; +var + Value : EVariant; + vargs : Variant; + i : integer; +begin + vargs := VarArrayCreate([0, args.Count - 1], varVariant); + for i := 0 to args.Count - 1 do + begin + vargs[i] := ENode(args[i]).eval; + end; + Value := NULL; + if FParser.Parent.DoExecuteFunction(func.str, vargs, Value) then + Result := Value + else + raise ParserException.Create('Function ' + func.str + ' could not be executed.'); +end; + +{ ENodeVariable } + +constructor ENodeVariable.Create(Parser: EParser; lex: ELex); +begin + inherited Create(Parser); + self.lex := lex; +end; + +function ENodeVariable.eval: EVariant; +var + Value : EVariant; +begin + Value := NULL; + if FParser.Parent.DoGetVariable(lex.str, Value) then + Result := Value + else + raise ParserException.Create('Variable ' + lex.str + ' could not be fetched.'); +end; + +{ ParserException } + +constructor ParserException.Create(const Msg: string; lex: ELex); +begin + inherited Create(Msg + ' ' + lex.debug); +end; + +constructor ParserException.Create(const E: Exception); +begin + inherited Create(E.Message); +end; + +{ TExprParser } + +constructor TExprParser.Create; +begin + ErrorMessage := ''; +end; + +destructor TExprParser.Destroy; +begin + FParser.Free; + FScan.Free; + inherited; +end; + +function TExprParser.eval(): boolean; +var + parser : EParser; + {$IFDEF TESTING_PARSER} + scan : EScan; + {$ENDIF} +begin + ErrorMessage := ''; + {$IFDEF TESTING_PARSER} + debugText := ''; + scan := EScan(FScan); + scan.debugPrint(); + {$ENDIF} + parser := EParser(FParser); + if (parser.execute()) then + begin + FValue := parser.value; + Result := true; + end + else + begin + ErrorMessage := parser.ErrorMessage; + Result := false; + end +end; + +function TExprParser.eval(Expression: Widestring): boolean; +begin + Self.Expression := Expression; + Result := eval(); +end; + +procedure TExprParser.SetExpression(const Value: Widestring); +begin + FExpression := Value; + if Assigned(FParser) then + FParser.Free; + if Assigned(FScan) then + FScan.Free; + FParser := EParser.Create; + EParser(FParser).Parent := Self; + FScan := EScan.Create; + if (not EScan(FScan).pars(FExpression)) then + begin + ErrorMessage := EScan(FScan).ErrorMessage; + end + else + begin + EParser(FParser).scan := EScan(FScan); + EParser(FParser).pars(); + end; +end; + +function TExprParser.DoGetVariable(Varname: WideString; var Value: Variant): boolean; +begin + if Assigned(FOnGetVariable) then + Result := FOnGetVariable(Self, Varname, Value) + else + Result := false; +end; + +function TExprParser.DoExecuteFunction(FuncName: WideString; Args: Variant; var ResVal: Variant): boolean; +begin + if Assigned(FOnExecuteFunction) then + Result := FOnExecuteFunction(Self, FuncName, Args, ResVal) + else + Result := false; +end; + +end. + Modified: trunk/jvcl/run/JvMemoryDataset.pas =================================================================== --- trunk/jvcl/run/JvMemoryDataset.pas 2009-06-08 14:19:39 UTC (rev 12330) +++ trunk/jvcl/run/JvMemoryDataset.pas 2009-06-08 14:22:06 UTC (rev 12331) @@ -50,7 +50,9 @@ (rsOriginal, rsInserted, rsUpdated), in the hidden field. Likewise, have a private List (FDeletedValues) with the primary key values from the Deleted records (rsDeleted). - +//********************** Added by c.schiffler (CS) ************************** + Methods (protected) SetFilterText <== hook up expression parsing. + Field FFilterParser - see unit JvExprParser.pas Implementation : 2004/03/03 Revisions : 1st = 2004/09/19 2nd = 2004/10/19 @@ -80,7 +82,8 @@ {$IFDEF HAS_UNIT_VARIANTS} Variants, {$ENDIF HAS_UNIT_VARIANTS} - JvDBUtils; + JvDBUtils, + JvExprParser; type TPVariant = ^Variant; @@ -139,6 +142,7 @@ FAfterApply: TApplyEvent; FBeforeApplyRecord: TApplyRecordEvent; FAfterApplyRecord: TApplyRecordEvent; + FFilterParser: TExprParser; // CSchiffler. June 2009. See JvExprParser.pas function AddRecord: TJvMemoryRecord; function InsertRecord(Index: Integer): TJvMemoryRecord; function FindRecordID(ID: Integer): TJvMemoryRecord; @@ -213,7 +217,9 @@ function GetRecordCount: Integer; override; function GetRecNo: Integer; override; procedure SetRecNo(Value: Integer); override; - procedure DoAfterOpen; override; + procedure DoAfterOpen; Override; + procedure SetFilterText(const Value: string); override; + function ParserGetVariableValue(Sender: TObject; Varname: WideString; var Value: Variant): boolean; virtual; property Records[Index: Integer]: TJvMemoryRecord read GetMemoryRecord; public constructor Create(AOwner: TComponent); override; @@ -609,6 +615,7 @@ FRowsAffected := 0; FSaveLoadState := slsNone; FOneValueInArray := True; + FDataSetClosed := True; //??? end; destructor TJvMemoryData.Destroy; @@ -618,6 +625,8 @@ begin if Active then Close; + if Assigned(FFilterParser) then + FreeAndNil(FFilterParser); if Assigned(FDeletedValues) then begin if FDeletedValues.Count > 0 then @@ -1101,8 +1110,10 @@ begin CheckBrowseMode; if Filtered <> Value then + begin inherited SetFiltered(Value); - First; + First; + end; end else inherited SetFiltered(Value); @@ -1126,14 +1137,20 @@ SaveState: TDataSetState; begin Result := True; - if Assigned(OnFilterRecord) then + if Assigned(OnFilterRecord) or Assigned(FFilterParser) then begin if (FRecordPos >= 0) and (FRecordPos < RecordCount) then begin SaveState := SetTempState(dsFilter); try RecordToBuffer(Records[FRecordPos], TempBuffer); - OnFilterRecord(Self, Result); + if Assigned(FFilterParser) and FFilterParser.eval() then + begin + FFilterParser.EnableWildcardMatching := true; + Result:=FFilterParser.value; + end; + if Assigned(OnFilterRecord) then + OnFilterRecord(Self, Result); except Application.HandleException(Self); end; @@ -1191,10 +1208,12 @@ if (Bookmark1 = nil) and (Bookmark2 <> nil) then Result := -1 else - if TBookmarkData({$IFDEF RTL200_UP}PByte(@Bookmark1[0]){$ELSE}Bookmark1{$ENDIF RTL200_UP}^) > TBookmarkData({$IFDEF RTL200_UP}PByte(@Bookmark2[0]){$ELSE}Bookmark2{$ENDIF RTL200_UP}^) then + if TBookmarkData({$IFDEF RTL200_UP}PByte(@Bookmark1[0]){$ELSE}Bookmark1{$ENDIF RTL200_UP}^) > + TBookmarkData({$IFDEF RTL200_UP}PByte(@Bookmark2[0]){$ELSE}Bookmark2{$ENDIF RTL200_UP}^) then Result := 1 else - if TBookmarkData({$IFDEF RTL200_UP}PByte(@Bookmark1[0]){$ELSE}Bookmark1{$ENDIF RTL200_UP}^) < TBookmarkData({$IFDEF RTL200_UP}PByte(@Bookmark2[0]){$ELSE}Bookmark2{$ENDIF RTL200_UP}^) then + if TBookmarkData({$IFDEF RTL200_UP}PByte(@Bookmark1[0]){$ELSE}Bookmark1{$ENDIF RTL200_UP}^) < + TBookmarkData({$IFDEF RTL200_UP}PByte(@Bookmark2[0]){$ELSE}Bookmark2{$ENDIF RTL200_UP}^) then Result := -1 else Result := 0; @@ -1527,8 +1546,53 @@ if not IsEmpty then SortOnFields(); inherited DoAfterOpen; +End; + +// Filtering contribution June 2009 - C.Schiffler - MANTIS # 0004328 +// Uses expression parser. +procedure TJvMemoryData.SetFilterText(const Value: string); + procedure UpdateFilter; + begin + if Assigned(FFilterParser) then + FreeAndNil(FFilterParser); + if Filter > '' then + begin + FFilterParser:= TExprParser.Create; + FFilterParser.OnGetVariable := ParserGetVariableValue; + FFilterParser.Expression := Filter; + end; + end; + +begin + if Active then + begin + CheckBrowseMode; + inherited SetFilterText(Value); + UpdateFilter; + if Filtered then + First; + end + else + begin + inherited SetFilterText(Value); + UpdateFilter; + end; end; +function TJvMemoryData.ParserGetVariableValue(Sender: TObject; Varname: WideString; var Value: Variant): boolean; +var + Field : TField; +begin + Field := FieldByName(Varname); + if Assigned(Field) then + begin + Value := Field.Value; + Result := true; + end + else + Result := false; +end; + procedure TJvMemoryData.InternalClose; begin ClearRecords; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2009-06-09 23:40:43
|
Revision: 12336 http://jvcl.svn.sourceforge.net/jvcl/?rev=12336&view=rev Author: jfudickar Date: 2009-06-09 23:40:40 +0000 (Tue, 09 Jun 2009) Log Message: ----------- New Functions in JvJVCLUtils.pas function ReplaceImageListReference(This: TComponent; NewReference: TCustomImageList; var VarReference: TCustomImageList; ChangeLink: TChangeLink): Boolean; function ReplaceComponentReference(This, NewReference: TComponent; var VarReference: TComponent): Boolean; Modified Paths: -------------- trunk/jvcl/run/JvAppAnimatedIcon.pas trunk/jvcl/run/JvAppStorage.pas trunk/jvcl/run/JvAutoComplete.pas trunk/jvcl/run/JvBDEProgress.pas trunk/jvcl/run/JvBDESecurity.pas trunk/jvcl/run/JvBalloonHint.pas trunk/jvcl/run/JvBandForms.pas trunk/jvcl/run/JvBmpAnimator.pas trunk/jvcl/run/JvCaptionButton.pas trunk/jvcl/run/JvCtrls.pas trunk/jvcl/run/JvDBActions.pas trunk/jvcl/run/JvDBRemoteLogin.pas trunk/jvcl/run/JvDesktopAlert.pas trunk/jvcl/run/JvDesktopAlertForm.pas trunk/jvcl/run/JvDockControlForm.pas trunk/jvcl/run/JvDockSupportControl.pas trunk/jvcl/run/JvDragDrop.pas trunk/jvcl/run/JvDriveCtrls.pas trunk/jvcl/run/JvDualList.pas trunk/jvcl/run/JvEmbeddedForms.pas trunk/jvcl/run/JvErrorIndicator.pas trunk/jvcl/run/JvFixedEditPopUp.pas trunk/jvcl/run/JvFormAnimatedIcon.pas trunk/jvcl/run/JvFullColorCtrls.pas trunk/jvcl/run/JvGradientCaption.pas trunk/jvcl/run/JvImageListViewer.pas trunk/jvcl/run/JvImageSquare.pas trunk/jvcl/run/JvInspector.pas trunk/jvcl/run/JvInstallLabel.pas trunk/jvcl/run/JvJVCLUtils.pas trunk/jvcl/run/JvLabel.pas trunk/jvcl/run/JvListComb.pas trunk/jvcl/run/JvListView.pas trunk/jvcl/run/JvLookOut.pas trunk/jvcl/run/JvMRUManager.pas trunk/jvcl/run/JvMTComponents.pas trunk/jvcl/run/JvMenus.pas trunk/jvcl/run/JvMergeManager.pas trunk/jvcl/run/JvNavigationPane.pas trunk/jvcl/run/JvPageManager.pas trunk/jvcl/run/JvPropertyStore.pas trunk/jvcl/run/JvPrvwRender.pas trunk/jvcl/run/JvRollOut.pas trunk/jvcl/run/JvScheduledEvents.pas trunk/jvcl/run/JvSimPID.pas trunk/jvcl/run/JvSpeedButton.pas trunk/jvcl/run/JvSpeedbar.pas trunk/jvcl/run/JvSpin.pas trunk/jvcl/run/JvStaticText.pas trunk/jvcl/run/JvStatusBar.pas trunk/jvcl/run/JvStdEditActions.pas trunk/jvcl/run/JvSystemPopup.pas trunk/jvcl/run/JvTFManager.pas trunk/jvcl/run/JvTabBar.pas trunk/jvcl/run/JvTimeLine.pas trunk/jvcl/run/JvToolBar.pas trunk/jvcl/run/JvToolEdit.pas trunk/jvcl/run/JvValidators.pas trunk/jvcl/run/JvVersionControlActions.pas trunk/jvcl/run/JvWizard.pas trunk/jvcl/run/JvXPBar.pas trunk/jvcl/run/JvXPButtons.pas trunk/jvcl/run/JvgPage.pas trunk/jvcl/run/JvgTab.pas Modified: trunk/jvcl/run/JvAppAnimatedIcon.pas =================================================================== --- trunk/jvcl/run/JvAppAnimatedIcon.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvAppAnimatedIcon.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -72,7 +72,7 @@ implementation uses - Forms; + Forms, JvJVCLUtils; constructor TJvAppAnimatedIcon.Create(AOwner: TComponent); begin @@ -128,13 +128,7 @@ procedure TJvAppAnimatedIcon.SetIcons(const Value: TImageList); begin - if FIcons <> nil then - FIcons.RemoveFreeNotification(Self); - - FIcons := Value; - - if Value <> nil then - FIcons.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FIcons)); end; {$IFDEF UNITVERSIONING} Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvAppStorage.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -965,7 +965,7 @@ StrUtils, {$ENDIF HAS_UNIT_STRUTILS} JclFileUtils, JclSysInfo, JclRTTI, JclMime, - JvPropertyStore, JvConsts, JvResources, JvStrings, JclSynch; + JvPropertyStore, JvConsts, JvResources, JvStrings, JclSynch, JvJVCLUtils; type TJvAppStoragePropertyEngineList = class(TList) @@ -3574,11 +3574,7 @@ {$ELSE} raise EJVCLAppStorageError.CreateRes(@RsECircularReferenceOfStorages); {$ENDIF CLR} - if AppStorage <> nil then - AppStorage.RemoveFreeNotification(OwnerStore); - FAppStorage := Value; - if AppStorage <> nil then - AppStorage.FreeNotification(OwnerStore); + ReplaceComponentReference (OwnerStore, Value, TComponent(FAppstorage)); end; end; Modified: trunk/jvcl/run/JvAutoComplete.pas =================================================================== --- trunk/jvcl/run/JvAutoComplete.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvAutoComplete.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -258,7 +258,7 @@ JvJCLUtils, {$ENDIF ~COMPILER12_UP} {$ENDIF CLR} - JvConsts; + JvConsts, JvJVCLUtils; //=== { TJvControlAutoComplete } ============================================= @@ -486,11 +486,7 @@ procedure TJvBaseEditListAutoComplete.SetEditCtrl(Value: TCustomEdit); begin - if Assigned(FEditCtrl) then - FEditCtrl.RemoveFreeNotification(Self); - FEditCtrl := Value; - if Assigned(FEditCtrl) then - FEditCtrl.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FEditCtrl)); if FEditCtrl <> nil then SetFilter(FEditCtrl.Text) @@ -631,11 +627,7 @@ procedure TJvEditListBoxAutoComplete.SetListBox(Value: TCustomListBox); begin - if Assigned(FListBox) then - FListBox.RemoveFreeNotification(Self); - FListBox := Value; - if Assigned(FListBox) then - FListBox.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FListBox)); if FListBox <> nil then List := FListBox.Items @@ -926,11 +918,7 @@ begin if Value <> FListBox then begin - if FListBox <> nil then - FListBox.RemoveFreeNotification(Self); - FListBox := Value; - if FListBox <> nil then - FListBox.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FListBox)); if Kind = akListBox then begin if FListBox <> nil then Modified: trunk/jvcl/run/JvBDEProgress.pas =================================================================== --- trunk/jvcl/run/JvBDEProgress.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvBDEProgress.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -141,7 +141,7 @@ uses SysUtils, Math, Forms, StdCtrls, - JvProgressUtils; + JvProgressUtils, JvJVCLUtils; const cbQRYPROGRESS = cbRESERVED4; @@ -518,20 +518,12 @@ procedure TJvDBProgress.SetMessageControl(Value: TControl); begin - if FMessageControl <> nil then - FMessageControl.RemoveFreeNotification(Self); - FMessageControl := Value; - if Value <> nil then - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FMessageControl)); end; procedure TJvDBProgress.SetGauge(Value: TControl); begin - if FGauge <> nil then - FGauge.RemoveFreeNotification(Self); - FGauge := Value; - if Value <> nil then - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FGauge)); end; procedure TJvDBProgress.Notification(AComponent: TComponent; AOperation: TOperation); Modified: trunk/jvcl/run/JvBDESecurity.pas =================================================================== --- trunk/jvcl/run/JvBDESecurity.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvBDESecurity.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -107,6 +107,7 @@ implementation +Uses JvJVCLUtils; constructor TJvDBSecurity.Create(AOwner: TComponent); begin @@ -135,14 +136,7 @@ procedure TJvDBSecurity.SetDatabase(Value: TDatabase); begin - if FDatabase <> Value then - begin - if FDatabase <> nil then - FDatabase.RemoveFreeNotification(Self); - FDatabase := Value; - if Value <> nil then - Value.FreeNotification(Self); - end; + ReplaceComponentReference (Self, Value, TComponent(FDatabase)); end; procedure TJvDBSecurity.SetUsersTableName(const Value: TFileName); Modified: trunk/jvcl/run/JvBalloonHint.pas =================================================================== --- trunk/jvcl/run/JvBalloonHint.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvBalloonHint.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -1727,11 +1727,7 @@ procedure TJvBalloonHint.SetImages(const Value: TCustomImageList); begin - if FImages <> nil then - FImages.RemoveFreeNotification(Self); - FImages := Value; - if FImages <> nil then - FImages.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FImages)); end; procedure TJvBalloonHint.SetOptions(const Value: TJvBalloonOptions); Modified: trunk/jvcl/run/JvBandForms.pas =================================================================== --- trunk/jvcl/run/JvBandForms.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvBandForms.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -301,7 +301,7 @@ implementation uses - JvJCLUtils; + JvJCLUtils, JvJVCLUtils; constructor TJvBandForm.Create(AOwner: TComponent); begin @@ -382,13 +382,7 @@ procedure TJvBandForm.SetContextMenu(const Value: TPopupMenu); begin - if FBandContextMenu <> nil then - FBandContextMenu.RemoveFreeNotification(Self); - - FBandContextMenu := Value; - - if Value <> nil then - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FBandContextMenu)); end; procedure TJvBandForm.Notification(AComponent: TComponent; Modified: trunk/jvcl/run/JvBmpAnimator.pas =================================================================== --- trunk/jvcl/run/JvBmpAnimator.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvBmpAnimator.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -138,7 +138,10 @@ implementation +uses + JvJVCLUtils; + constructor TJvCustomBmpAnimator.Create(AOwner: TComponent); begin inherited Create(AOwner); @@ -281,26 +284,17 @@ begin inherited Notification(AComponent, AOperation); if (AOperation = opRemove) and (AComponent = FImageList) then - begin SetImage(nil); - Active := False; - end; end; procedure TJvCustomBmpAnimator.SetImage(Value: TCustomImageList); begin if FImageList <> nil then - begin - FImageList.UnRegisterChanges(FImageChangeLink); SetNumGlyphs(0); - end; - FImageList := Value; + ReplaceImageListReference(Self, Value, FImageList, FImageChangeLink); if FImageList <> nil then - begin - FImageList.RegisterChanges(FImageChangeLink); - SetNumGlyphs(FImageList.Count); - end + SetNumGlyphs(FImageList.Count) else Active := False; Repaint; Modified: trunk/jvcl/run/JvCaptionButton.pas =================================================================== --- trunk/jvcl/run/JvCaptionButton.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvCaptionButton.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -314,9 +314,8 @@ {$IFNDEF COMPILER7_UP} TmSchema, {$ENDIF !COMPILER7_UP} - JvJVCLUtils, {$ENDIF JVCLThemesEnabled} - JvDsgnIntf, JvConsts, JvJCLUtils, JvResources, JvWndProcHook; + JvDsgnIntf, JvConsts, JvJCLUtils, JvResources, JvWndProcHook, JvJVCLUtils; const { Msimg32.dll is included in Windows 98 and later } @@ -2401,17 +2400,7 @@ procedure TJvCaptionButton.SetImages(const Value: TCustomImageList); begin - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnRegisterChanges(FImageChangeLink); - end; - FImages := Value; - if FImages <> nil then - begin - FImages.RegisterChanges(FImageChangeLink); - FImages.FreeNotification(Self); - end; + ReplaceImageListReference(Self, Value, FImages, FImageChangeLink); if Standard = tsbNone then Redraw(rkIndirect); end; Modified: trunk/jvcl/run/JvCtrls.pas =================================================================== --- trunk/jvcl/run/JvCtrls.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvCtrls.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -861,18 +861,8 @@ procedure TJvCustomImageButton.SetImages(const Value: TCustomImageList); begin - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnRegisterChanges(FImageChangeLink); - end; - FImages := Value; - if FImages <> nil then - begin - FImages.RegisterChanges(FImageChangeLink); - FImages.FreeNotification(Self); - end - else + ReplaceImageListReference(Self, Value, FImages, FImageChangeLink); + if FImages = nil then SetImageIndex(-1); InvalidateImage; end; Modified: trunk/jvcl/run/JvDBActions.pas =================================================================== --- trunk/jvcl/run/JvDBActions.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvDBActions.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -552,7 +552,7 @@ {$IFDEF HAS_UNIT_VARIANTS} Variants, {$ENDIF HAS_UNIT_VARIANTS} - Dialogs, StdCtrls, Clipbrd; + Dialogs, StdCtrls, Clipbrd, JvJVCLUtils; //=== { TJvDatabaseActionList } ============================================== @@ -560,13 +560,8 @@ var I: Integer; begin - if Value <> FDataComponent then + if ReplaceComponentReference (Self, Value, FDataComponent) then begin - if FDataComponent <> nil then - FDataComponent.RemoveFreeNotification(Self); - FDataComponent := Value; - if FDataComponent <> nil then - FDataComponent.FreeNotification(Self); for I := 0 to ActionCount - 1 do if Actions[I] is TJvDatabaseBaseAction then TJvDatabaseBaseAction(Actions[I]).DataComponent := Value; @@ -1205,11 +1200,7 @@ procedure TJvDatabaseInsertAction.SetSingleRecordWindowAction(const Value: TJvDatabaseSingleRecordWindowAction); begin - if FSingleRecordWindowAction <> nil then - FSingleRecordWindowAction.RemoveFreeNotification(Self); - FSingleRecordWindowAction := Value; - if Assigned(FSingleRecordWindowAction) then - FSingleRecordWindowAction.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FSingleRecordWindowAction)); end; procedure TJvDatabaseInsertAction.SingleRecordOnFormShowEvent(ADatacomponent : @@ -1303,11 +1294,7 @@ procedure TJvDatabaseCopyAction.SetSingleRecordWindowAction(const Value: TJvDatabaseSingleRecordWindowAction); begin - if FSingleRecordWindowAction <> nil then - FSingleRecordWindowAction.RemoveFreeNotification(Self); - FSingleRecordWindowAction := Value; - if Assigned(FSingleRecordWindowAction) then - FSingleRecordWindowAction.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FSingleRecordWindowAction)); end; procedure TJvDatabaseCopyAction.SingleRecordOnFormShowEvent(ADatacomponent : @@ -1352,11 +1339,7 @@ procedure TJvDatabaseEditAction.SetSingleRecordWindowAction(const Value: TJvDatabaseSingleRecordWindowAction); begin - if FSingleRecordWindowAction <> nil then - FSingleRecordWindowAction.RemoveFreeNotification(Self); - FSingleRecordWindowAction := Value; - if Assigned(FSingleRecordWindowAction) then - FSingleRecordWindowAction.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FSingleRecordWindowAction)); end; procedure TJvDatabaseEditAction.SingleRecordOnFormShowEvent(ADatacomponent : Modified: trunk/jvcl/run/JvDBRemoteLogin.pas =================================================================== --- trunk/jvcl/run/JvDBRemoteLogin.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvDBRemoteLogin.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -159,15 +159,10 @@ if FRemoteServer <> Value then begin UnprepareRemoteServer; - if FRemoveServer <> nil then - FRemoveServer.RemoveFreeNotification(Self); - FRemoteServer := Value; - if Value <> nil then - begin - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FRemoteServer)); + if FRemoteServer <> nil then if not (csLoading in ComponentState) then PrepareRemoteServer; - end; end; end; Modified: trunk/jvcl/run/JvDesktopAlert.pas =================================================================== --- trunk/jvcl/run/JvDesktopAlert.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvDesktopAlert.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -975,14 +975,7 @@ procedure TJvDesktopAlert.SetImages(const Value: TCustomImageList); begin - if FImages <> Value then - begin - if FImages <> nil then - FImages.RemoveFreeNotification(Self); - FImages := Value; - if FImages <> nil then - FImages.FreeNotification(Self); - end; + ReplaceComponentReference (Self, Value, TComponent(FImages)); end; procedure TJvDesktopAlert.SetMessageText(const Value: string); @@ -1736,14 +1729,9 @@ begin if FStacker <> Value then begin + ReplaceComponentReference (Self, Value, TComponent(FStacker)); if FStacker <> nil then - FStacker.RemoveFreeNotification(Self); - FStacker := Value; - if FStacker <> nil then - begin Location.Position := FStacker.Position; - FStacker.FreeNotification(Self); - end; end; end; Modified: trunk/jvcl/run/JvDesktopAlertForm.pas =================================================================== --- trunk/jvcl/run/JvDesktopAlertForm.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvDesktopAlertForm.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -536,21 +536,8 @@ procedure TJvDesktopAlertButton.SetImages(const Value: TCustomImageList); begin - if FImages <> Value then - begin - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnRegisterChanges(FChangeLink); - end; - FImages := Value; - if FImages <> nil then - begin - FImages.FreeNotification(Self); - FImages.RegisterChanges(FChangeLink); - end; + if ReplaceImageListReference(Self, Value, FImages, FChangeLink) then Invalidate; - end; end; procedure TJvDesktopAlertButton.SetToolType(const Value: TJvDesktopAlertButtonType); Modified: trunk/jvcl/run/JvDockControlForm.pas =================================================================== --- trunk/jvcl/run/JvDockControlForm.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvDockControlForm.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -894,7 +894,7 @@ {$ELSE} IniFiles, Registry, {$ENDIF USEJVCL} - JvDockSupportProc, JvDockGlobals, JvDockInfo, JvDockVSNetStyle, JvVCL5Utils; + JvDockSupportProc, JvDockGlobals, JvDockInfo, JvDockVSNetStyle, JvVCL5Utils, JvJVCLUtils; {$R JvDockableForm.dfm} {$R JvDockConjoinHost.dfm} @@ -2442,8 +2442,6 @@ try if FDockStyle <> nil then begin - FDockStyle.RemoveFreeNotification(Self); - { Remove Self from the internal list of the dock style component } FDockStyle.RemoveDockBaseControl(Self); @@ -2451,7 +2449,7 @@ RemoveDockStyle(FDockStyle); end; - FDockStyle := ADockStyle; + ReplaceComponentReference (Self, ADockStyle, TComponent(FDockStyle)); if FDockStyle <> nil then begin @@ -2464,7 +2462,6 @@ { Give the ancestors a change to respond } AddDockStyle(FDockStyle); - FDockStyle.FreeNotification(Self); end; finally ParentForm.EnableAlign; @@ -3491,17 +3488,11 @@ begin if FLastDockSite <> nil then begin - FLastDockSite.RemoveFreeNotification(Self); - if TWinControlAccessProtected(FLastDockSite).UseDockManager and Supports(TWinControlAccessProtected(FLastDockSite).DockManager, IJvDockManager, JvDockManager) then JvDockManager.RemoveControl(Self.ParentForm); end; - - FLastDockSite := ALastDockSite; - - if FLastDockSite <> nil then - FLastDockSite.FreeNotification(Self); + ReplaceComponentReference (Self, ALastDockSite, TComponent(FLastDockSite)); end; end; @@ -3520,11 +3511,7 @@ procedure TJvDockClient.SetNCPopupMenu(Value: TPopupMenu); begin - if FNCPopupMenu <> nil then - FNCPopupMenu.RemoveFreeNotification(Self); - FNCPopupMenu := Value; - if Value <> nil then - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FNCPopupMenu)); end; procedure TJvDockClient.SetParentVisible(const Value: Boolean); Modified: trunk/jvcl/run/JvDockSupportControl.pas =================================================================== --- trunk/jvcl/run/JvDockSupportControl.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvDockSupportControl.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -560,7 +560,7 @@ {$IFNDEF COMPILER12_UP} JvJCLUtils, {$ENDIF ~COMPILER12_UP} - JvDockGlobals, JvDockControlForm, JvDockSupportProc; + JvDockGlobals, JvDockControlForm, JvDockSupportProc, JvJVCLUtils; type TlbNCButtonProc = procedure(Msg: TWMNCHitMessage; Button: TMouseButton; @@ -1534,18 +1534,9 @@ procedure TJvDockCustomTabControl.SetImages(Value: TCustomImageList); begin + ReplaceImageListReference(Self, Value, FImages, FImageChangeLink); if Images <> nil then - begin - Images.RemoveFreeNotification(Self); - Images.UnRegisterChanges(FImageChangeLink); - end; - FImages := Value; - if Images <> nil then - begin - Images.RegisterChanges(FImageChangeLink); - Images.FreeNotification(Self); - Perform(TCM_SETIMAGELIST, 0, Images.Handle); - end + Perform(TCM_SETIMAGELIST, 0, Images.Handle) else Perform(TCM_SETIMAGELIST, 0, 0); end; Modified: trunk/jvcl/run/JvDragDrop.pas =================================================================== --- trunk/jvcl/run/JvDragDrop.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvDragDrop.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -157,7 +157,7 @@ ShlObj, SysUtils, Forms, JvVCL5Utils, JvJCLUtils, - JvWndProcHook; + JvWndProcHook, JvJVCLUtils; var GlobalCF_FILEDESCRIPTOR: UINT = $FFFFFFF; @@ -334,14 +334,8 @@ { This will implicitly unhook the current DropTarget } AcceptDrag := False; - if Assigned(FDropTarget) then - FDropTarget.RemoveFreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FDropTarget)); - FDropTarget := Value; - - if Assigned(FDropTarget) then - FDropTarget.FreeNotification(Self); - if WasActive then { And hook again.. } AcceptDrag := True; @@ -567,14 +561,7 @@ if Value <> FControl then begin UnregisterControl; - if Assigned(FControl) then - FControl.RemoveFreeNotification(Self); - - FControl := Value; - - if Assigned(FControl) then - FControl.FreeNotification(Self); - + ReplaceComponentReference (Self, Value, TComponent(FControl)); RegisterControl; end; end; Modified: trunk/jvcl/run/JvDriveCtrls.pas =================================================================== --- trunk/jvcl/run/JvDriveCtrls.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvDriveCtrls.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -1147,25 +1147,15 @@ procedure TJvDirectoryListBox.SetFileList(Value: TJvFileListBox); begin if FFileList <> nil then - begin - FFileList.RemoveFreeNotification(Self); FFileList.FDirList := nil; - end; - FFileList := Value; + ReplaceComponentReference (Self, Value, TComponent(FFileList)); if FFileList <> nil then - begin - FFileList.FreeNotification(Self); FFileList.Directory := Directory; - end; end; procedure TJvDirectoryListBox.SetDirLabel(Value: TLabel); begin - if FDirLabel <> nil then - FDirLabel.RemoveFreeNotification(Self); - FDirLabel := Value; - if Value <> nil then - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FDirLabel)); SetDirLabelCaption; end; @@ -1486,16 +1476,12 @@ procedure TJvDirectoryListBox.SetDriveCombo(const Value: TJvDriveCombo); begin if FDriveCombo <> nil then - begin - FDriveCombo.RemoveFreeNotification(Self); FDriveCombo.FDirList := nil; - end; - FDriveCombo := Value; + ReplaceComponentReference (Self, Value, TComponent(FDriveCombo)); if FDriveCombo <> nil then begin FDriveCombo.FDirList := Self; FDriveCombo.Drive := Drive; - FDriveCombo.FreeNotification(Self); end; end; Modified: trunk/jvcl/run/JvDualList.pas =================================================================== --- trunk/jvcl/run/JvDualList.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvDualList.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -107,7 +107,7 @@ uses Consts, SysUtils, - JvDualListForm, JvResources; + JvDualListForm, JvResources, JvJVCLUtils; constructor TJvDualListDialog.Create(AOwner: TComponent); begin @@ -140,14 +140,7 @@ procedure TJvDualListDialog.SetCenterOnControl(const Value: TControl); begin - if Value <> FCenterOnControl then - begin - if FCenterOnControl <> nil then - FCenterOnControl.RemoveFreeNotification(Self); - FCenterOnControl := Value; - if FCenterOnControl <> nil then - FCenterOnControl.FreeNotification(Self); - end; + ReplaceComponentReference (Self, Value, TComponent(FCenterOnControl)); end; procedure TJvDualListDialog.SetList1(Value: TStrings); Modified: trunk/jvcl/run/JvEmbeddedForms.pas =================================================================== --- trunk/jvcl/run/JvEmbeddedForms.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvEmbeddedForms.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -146,7 +146,7 @@ uses SysUtils, Graphics, Controls, - JvResources, JvConsts; + JvResources, JvConsts, JvJVCLUtils; //=== { TJvEmbeddedFormLink } ================================================ @@ -269,10 +269,7 @@ raise Exception.CreateRes(@RsELinkCircularRef) else begin - if FLink <> nil then - FLink.RemoveFreeNotification(Self); - FLink := Value; - FLink.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FLink)); InitLinkedForm; end; end; Modified: trunk/jvcl/run/JvErrorIndicator.pas =================================================================== --- trunk/jvcl/run/JvErrorIndicator.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvErrorIndicator.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -218,7 +218,7 @@ uses CommCtrl, SysUtils, - JvTypes, JvResources; + JvTypes, JvResources, JvJVCLUtils; {$R JvErrorIndicator.res} @@ -492,17 +492,7 @@ if FImageList <> Value then begin StopThread; - if Assigned(FImageList) then - begin - FImageList.UnRegisterChanges(FChangeLink); - FImageList.RemoveFreeNotification(Self); - end; - FImageList := Value; - if Assigned(FImageList) then - begin - FImageList.RegisterChanges(FChangeLink); - FImageList.FreeNotification(Self); - end; + ReplaceImageListReference(Self, Value, FImageList, FChangeLink); UpdateControls; end; end; @@ -744,14 +734,9 @@ begin if FControl <> Value then begin + ReplaceComponentReference (Self, Value, TComponent(FControl)); if FControl <> nil then - FControl.RemoveFreeNotification(Self); - FControl := Value; - if FControl <> nil then - begin - FControl.FreeNotification(Self); - Parent := FControl.Parent; - end + Parent := FControl.Parent else Parent := nil; end; Modified: trunk/jvcl/run/JvFixedEditPopUp.pas =================================================================== --- trunk/jvcl/run/JvFixedEditPopUp.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvFixedEditPopUp.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -142,7 +142,7 @@ {$IFDEF CLR} JclBase, {$ENDIF CLR} - JvVCL5Utils, JvJclUtils, JvResources; + JvVCL5Utils, JvJclUtils, JvResources, JvJVCLUtils; type THiddenPopupObject = class(TComponent) @@ -556,14 +556,7 @@ procedure THiddenPopupObject.SetEdit(const Value: TWinControl); begin - if FEdit <> Value then - begin - if FEdit <> nil then - FEdit.RemoveFreeNotification(Self); - FEdit := Value; - if FEdit <> nil then - FEdit.FreeNotification(Self); - end; + ReplaceComponentReference (Self, Value, TComponent(FEdit)); end; procedure THiddenPopupObject.Notification(AComponent: TComponent; Modified: trunk/jvcl/run/JvFormAnimatedIcon.pas =================================================================== --- trunk/jvcl/run/JvFormAnimatedIcon.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvFormAnimatedIcon.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -73,7 +73,10 @@ implementation +uses + JvJVCLUtils; + constructor TJvFormAnimatedIcon.Create(AOwner: TComponent); begin inherited Create(AOwner); @@ -137,13 +140,7 @@ procedure TJvFormAnimatedIcon.SetIcons(const Value: TImageList); begin - if FIcons <> nil then - FIcons.RemoveFreeNotification(Self); - - FIcons := Value; - - if Value <> nil then - FIcons.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FIcons)); end; {$IFDEF UNITVERSIONING} Modified: trunk/jvcl/run/JvFullColorCtrls.pas =================================================================== --- trunk/jvcl/run/JvFullColorCtrls.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvFullColorCtrls.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -1314,11 +1314,10 @@ begin FColorTrackBar.OnColorChange := nil; FColorTrackBar.OnAxisConfigChange := nil; - FColorTrackBar.RemoveFreeNotification(Self); FColorTrackBar.FreeLink; end; - FColorTrackBar := Value; + ReplaceComponentReference (Self, Value, TComponent(FColorTrackBar)); if Assigned(FColorTrackBar) then begin @@ -1326,7 +1325,6 @@ FColorTrackBar.OnAxisConfigChange := TrackBarAxisConfigChange; FColorTrackBar.FullColor := FullColor; FColorTrackBar.AxisConfig := AxisConfig; - FColorTrackBar.FreeNotification(Self); FColorTrackBar.SetLink(Self); end; end; @@ -2095,11 +2093,10 @@ begin FBlueColorTrackBar.OnColorChange := nil; FBlueColorTrackBar.OnAxisConfigChange := nil; - FBlueColorTrackBar.RemoveFreeNotification(Self); FBlueColorTrackBar.FreeLink; end; - FBlueColorTrackBar := Value; + ReplaceComponentReference (Self, Value, TComponent(FBlueColorTrackBar)); if Assigned(FBlueColorTrackBar) then begin @@ -2107,7 +2104,6 @@ FBlueColorTrackBar.OnAxisConfigChange := TrackBarAxisConfigChange; FBlueColorTrackBar.FullColor := BlueColor; FBlueColorTrackBar.AxisConfig := AxisConfig; - FBlueColorTrackBar.FreeNotification(Self); FBlueColorTrackBar.SetLink(Self); end; end; @@ -2121,11 +2117,10 @@ begin FGreenColorTrackBar.OnColorChange := nil; FGreenColorTrackBar.OnAxisConfigChange := nil; - FGreenColorTrackBar.RemoveFreeNotification(Self); FGreenColorTrackBar.FreeLink; end; - FGreenColorTrackBar := Value; + ReplaceComponentReference (Self, Value, TComponent(FGreenColorTrackBar)); if Assigned(FGreenColorTrackBar) then begin @@ -2133,7 +2128,6 @@ FGreenColorTrackBar.OnAxisConfigChange := TrackBarAxisConfigChange; FGreenColorTrackBar.FullColor := GreenColor; FGreenColorTrackBar.AxisConfig := AxisConfig; - FGreenColorTrackBar.FreeNotification(Self); FGreenColorTrackBar.SetLink(Self); end; end; @@ -2147,11 +2141,10 @@ begin FRedColorTrackBar.OnColorChange := nil; FRedColorTrackBar.OnAxisConfigChange := nil; - FRedColorTrackBar.RemoveFreeNotification(Self); FRedColorTrackBar.FreeLink; end; - FRedColorTrackBar := Value; + ReplaceComponentReference (Self, Value, TComponent(FRedColorTrackBar)); if Assigned(FRedColorTrackBar) then begin @@ -2159,7 +2152,6 @@ FRedColorTrackBar.OnAxisConfigChange := TrackBarAxisConfigChange; FRedColorTrackBar.FullColor := RedColor; FRedColorTrackBar.AxisConfig := AxisConfig; - FRedColorTrackBar.FreeNotification(Self); FRedColorTrackBar.SetLink(Self); end; end; @@ -2173,11 +2165,10 @@ begin FCommonColorTrackBar.OnColorChange := nil; FCommonColorTrackBar.OnAxisConfigChange := nil; - FCommonColorTrackBar.RemoveFreeNotification(Self); FCommonColorTrackBar.FreeLink; end; - FCommonColorTrackBar := Value; + ReplaceComponentReference (Self, Value, TComponent(FCommonColorTrackBar)); if Assigned(FCommonColorTrackBar) then begin @@ -2185,7 +2176,6 @@ FCommonColorTrackBar.OnAxisConfigChange := TrackBarAxisConfigChange; FCommonColorTrackBar.FullColor := FullColor; FCommonColorTrackBar.AxisConfig := AxisConfig; - FCommonColorTrackBar.FreeNotification(Self); FCommonColorTrackBar.SetLink(Self); end; end; Modified: trunk/jvcl/run/JvGradientCaption.pas =================================================================== --- trunk/jvcl/run/JvGradientCaption.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvGradientCaption.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -490,11 +490,7 @@ procedure TJvGradientCaption.SetPopupMenu(Value: TPopupMenu); begin - if FPopupMenu <> nil then - FPopupMenu.RemoveFreeNotification(Self); - FPopupMenu := Value; - if Value <> nil then - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FPopupMenu)); end; procedure TJvGradientCaption.SetCaptions(Value: TJvCaptionList); Modified: trunk/jvcl/run/JvImageListViewer.pas =================================================================== --- trunk/jvcl/run/JvImageListViewer.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvImageListViewer.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -153,7 +153,7 @@ uses CommCtrl, Math, - JvJCLUtils; + JvJCLUtils, JvJVCLUtils; //=== { TJvImageListViewerOptions } ========================================== @@ -333,15 +333,12 @@ begin if FImages <> Value then begin - if FImages <> nil then - FImages.UnRegisterChanges(FChangeLink); + ReplaceImageListReference(Self, Value, FImages, FChangeLink); Count := 0; - FImages := Value; if FImages <> nil then begin Options.Width := Max(Options.Width, FImages.Width); Options.Height := Max(Options.Height, FImages.Height); - FImages.RegisterChanges(FChangeLink); end; DoImageChange(Value); end; Modified: trunk/jvcl/run/JvImageSquare.pas =================================================================== --- trunk/jvcl/run/JvImageSquare.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvImageSquare.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -113,7 +113,7 @@ uses ExtCtrls, CommCtrl, - JvThemes, JvResources; + JvThemes, JvResources, JvJVCLUtils; //=== { TJvImageSquare } ===================================================== @@ -238,11 +238,7 @@ procedure TJvImageSquare.SetImageList(Value: TCustomImageList); begin - if Images <> nil then - Images.UnRegisterChanges(FImageChangeLink); - FImageList := Value; - if Images <> nil then - FImageList.RegisterChanges(FImageChangeLink); + ReplaceImageListReference(Self, Value, FImageList, FImageChangeLink); Repaint; end; Modified: trunk/jvcl/run/JvInspector.pas =================================================================== --- trunk/jvcl/run/JvInspector.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvInspector.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -3638,18 +3638,14 @@ raise EJvInspector.CreateRes(@RsEJvInspPaintOnlyUsedOnce); if Painter <> nil then - begin - Painter.RemoveFreeNotification(Self); Painter.SetInspector(nil); - end; - FPainter := Value; + ReplaceComponentReference (Self, Value, TComponent(FPainter)); if Painter <> nil then begin Style := isItemPainter; Painter.SetInspector(Self); - Painter.FreeNotification(Self); if HandleAllocated then UpdateScrollBars; Modified: trunk/jvcl/run/JvInstallLabel.pas =================================================================== --- trunk/jvcl/run/JvInstallLabel.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvInstallLabel.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -203,11 +203,7 @@ procedure TJvInstallLabel.SetImageList(Value: TCustomImageList); begin - if Images <> nil then - Images.UnRegisterChanges(FImageChangeLink); - FImageList := Value; - if Images <> nil then - Images.RegisterChanges(FImageChangeLink); + ReplaceImageListReference(Self, Value, FImageList, FImageChangeLink); end; function TJvInstallLabel.GetLines: TStrings; Modified: trunk/jvcl/run/JvJVCLUtils.pas =================================================================== --- trunk/jvcl/run/JvJVCLUtils.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvJVCLUtils.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -910,8 +910,13 @@ function GenerateUniqueComponentName(AOwner, AComponent: TComponent; const AComponentName: string = ''): string; +function ReplaceImageListReference(This: TComponent; NewReference: TCustomImageList; var VarReference: + TCustomImageList; ChangeLink: TChangeLink): Boolean; +function ReplaceComponentReference(This, NewReference: TComponent; var VarReference: TComponent): Boolean; + + {$IFDEF UNITVERSIONING} const UnitVersioning: TUnitVersionInfo = ( @@ -8286,7 +8291,39 @@ end; end; +function ReplaceComponentReference(This, NewReference: TComponent; var VarReference: TComponent): Boolean; +begin + Result := (VarReference <> NewReference) and Assigned(This); + if Result then + begin + if Assigned(VarReference) then + VarReference.RemoveFreeNotification(This); + VarReference := NewReference; + if Assigned(VarReference) then + VarReference.FreeNotification(This); + end; +end; +function ReplaceImageListReference(This: TComponent; NewReference: TCustomImageList; var VarReference: + TCustomImageList; ChangeLink: TChangeLink): Boolean; +begin + Result := (VarReference <> NewReference) and Assigned(This); + if Result then + begin + if Assigned(VarReference) then + begin + VarReference.RemoveFreeNotification(This); + VarReference.UnRegisterChanges(ChangeLink); + end; + VarReference := NewReference; + if Assigned(VarReference) then + begin + VarReference.RegisterChanges(ChangeLink); + VarReference.FreeNotification(This); + end; + end; +end; + initialization {$IFDEF UNITVERSIONING} RegisterUnitVersion(HInstance, UnitVersioning); Modified: trunk/jvcl/run/JvLabel.pas =================================================================== --- trunk/jvcl/run/JvLabel.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvLabel.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -1050,11 +1050,7 @@ procedure TJvCustomLabel.SetFocusControl(Value: TWinControl); begin - if FFocusControl <> nil then - FFocusControl.RemoveFreeNotification(Self); - FFocusControl := Value; - if Value <> nil then - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FFocusControl)); if FShowFocus then Invalidate; end; @@ -1280,17 +1276,7 @@ if FImages <> Value then begin NonProviderChange; - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnRegisterChanges(FChangeLink); - end; - FImages := Value; - if FImages <> nil then - begin - FImages.FreeNotification(Self); - FImages.RegisterChanges(FChangeLink); - end; + ReplaceImageListReference(Self, Value, FImages, FChangeLink); if AutoSize then begin FNeedsResize := True; Modified: trunk/jvcl/run/JvListComb.pas =================================================================== --- trunk/jvcl/run/JvListComb.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvListComb.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -400,7 +400,7 @@ implementation uses - Math; + Math, JvJVCLUtils; type TWinControlAccessProtected = class(TWinControl); @@ -866,23 +866,7 @@ begin if FImageList <> Value then begin - if FImageList <> nil then - FImageList.UnRegisterChanges(FChangeLink); - FImageList := Value; - - if FImageList <> nil then - FImageList.RegisterChanges(FChangeLink); - -{ if Assigned(FImageList) then - begin - FWidth := FImageList.Width; - FHeight := FImageList.Height; - end - else - begin - FWidth := 0; - FHeight := 0; - end; } + ReplaceImageListReference(Self, Value, FImageList, FChangeLink); ResetItemHeight; RecreateWnd; end; @@ -1288,25 +1272,8 @@ procedure TJvImageListBox.SetImageList(Value: TCustomImageList); begin - if FImageList <> Value then + if ReplaceImageListReference(Self, Value, FImageList, FChangeLink) then begin - if FImageList <> nil then - FImageList.UnRegisterChanges(FChangeLink); - FImageList := Value; - - if FImageList <> nil then - FImageList.RegisterChanges(FChangeLink); - -{ if Assigned(FImageList) then - begin - FWidth := FImageList.Width; - FHeight := FImageList.Height; - end - else - begin - FWidth := 0; - FHeight := 0; - end;} ResetItemHeight; RecreateWnd; end; Modified: trunk/jvcl/run/JvListView.pas =================================================================== --- trunk/jvcl/run/JvListView.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvListView.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -1768,21 +1768,8 @@ procedure TJvListView.SetHeaderImages(const Value: TCustomImageList); begin - if FHeaderImages <> Value then - begin - if FHeaderImages <> nil then - begin - FHeaderImages.RemoveFreeNotification(Self); - FHeaderImages.UnRegisterChanges(FImageChangeLink); - end; - FHeaderImages := Value; - if Assigned(FHeaderImages) then - begin - FHeaderImages.RegisterChanges(FImageChangeLink); - FHeaderImages.FreeNotification(Self); - end; + if ReplaceImageListReference(Self, Value, FHeaderImages, FImageChangeLink) then UpdateHeaderImages(ListView_GetHeader(Handle)); - end; end; procedure TJvListView.SetExtendedColumns( Modified: trunk/jvcl/run/JvLookOut.pas =================================================================== --- trunk/jvcl/run/JvLookOut.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvLookOut.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -97,8 +97,8 @@ FButtonBorder: TJvButtonBorder; FPopUpMenu: TPopupMenu; FGroupIndex: Integer; - FSmallImages: TImageList; - FLargeImages: TImageList; + FSmallImages: TCustomImageList; + FLargeImages: TCustomImageList; FOnEdited: TJvLookOutEditedEvent; FLargeImageChangeLink: TChangeLink; FSmallImageChangeLink: TChangeLink; @@ -112,8 +112,8 @@ procedure SetSpacing(Value: Integer); procedure SetParentImageSize(Value: Boolean); procedure SetButtonBorder(Value: TJvButtonBorder); - procedure SetSmallImages(Value: TImageList); - procedure SetLargeImages(Value: TImageList); + procedure SetSmallImages(const Value: TCustomImageList); + procedure SetLargeImages(const Value: TCustomImageList); procedure SetImageIndex(Value: TImageIndex); procedure SetImageSize(Value: TJvImageSize); procedure DrawSmallImages; @@ -157,9 +157,9 @@ property ImageSize: TJvImageSize read FImageSize write SetImageSize default isLarge; property ParentImageSize: Boolean read FParentImageSize write SetParentImageSize default True; property PopupMenu: TPopupMenu read FPopUpMenu write FPopUpMenu; - property LargeImages: TImageList read FLargeImages write SetLargeImages; + property LargeImages: TCustomImageList read FLargeImages write SetLargeImages; property Spacing: Integer read FSpacing write SetSpacing default 4; { border offset from bitmap } - property SmallImages: TImageList read FSmallImages write SetSmallImages; + property SmallImages: TCustomImageList read FSmallImages write SetSmallImages; property Data: Pointer read FData write FData; property GroupIndex: Integer read FGroupIndex write SetGroupIndex default 0; property OnEdited: TJvLookOutEditedEvent read FOnEdited write FOnEdited; @@ -486,7 +486,7 @@ {$IFDEF COMPILER10_UP} Types, {$ENDIF COMPILER10_UP} - ActnList; + ActnList, JvJVCLUtils; const cSpeed = 20; @@ -1143,25 +1143,15 @@ end; end; -procedure TJvCustomLookOutButton.SetSmallImages(Value: TImageList); +procedure TJvCustomLookOutButton.SetSmallImages(const Value: TCustomImageList); begin - if FSmallImages <> nil then - FSmallImages.UnRegisterChanges(FSmallImageChangeLink); - FSmallImages := Value; - - if FSmallImages <> nil then - FSmallImages.RegisterChanges(FSmallImageChangeLink); + ReplaceImageListReference(Self, Value, FSmallImages, FSmallImageChangeLink); Invalidate; end; -procedure TJvCustomLookOutButton.SetLargeImages(Value: TImageList); +procedure TJvCustomLookOutButton.SetLargeImages(const Value: TCustomImageList); begin - if Assigned(FLargeImages) then - FLargeImages.UnRegisterChanges(FLargeImageChangeLink); - FLargeImages := Value; - - if Assigned(FLargeImages) then - FLargeImages.RegisterChanges(FLargeImageChangeLink); + ReplaceImageListReference(Self, Value, FLargeImages, FLargeImageChangeLink); Invalidate; end; Modified: trunk/jvcl/run/JvMRUManager.pas =================================================================== --- trunk/jvcl/run/JvMRUManager.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvMRUManager.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -509,11 +509,7 @@ procedure TJvMRUManager.SetRecentMenu(Value: TMenuItem); begin ClearRecentMenu; - if FRecentMenu <> nil then - FRecentMenu.RemoveFreeNotification(Self); - FRecentMenu := Value; - if Value <> nil then - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FRecentMenu)); FreeAndNil(FCanvas); UpdateRecentMenu; end; Modified: trunk/jvcl/run/JvMTComponents.pas =================================================================== --- trunk/jvcl/run/JvMTComponents.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvMTComponents.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -261,7 +261,7 @@ {$IFDEF USEJVCL} uses - JvResources; + JvResources, JvJVCLUtils; {$ENDIF USEJVCL} {$IFNDEF USEJVCL} @@ -356,13 +356,7 @@ procedure TJvMTManagedComponent.SetManager(Value: TJvMTManager); begin - if Assigned(FManager) then - FManager.RemoveFreeNotification(Self); - - FManager := Value; - - if Assigned(FManager) then - FManager.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FManager)); end; //=== { TJvMTThread } ======================================================== Modified: trunk/jvcl/run/JvMenus.pas =================================================================== --- trunk/jvcl/run/JvMenus.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvMenus.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -1042,19 +1042,8 @@ OldOwnerDraw: Boolean; begin OldOwnerDraw := IsOwnerDrawMenu; - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnregisterChanges(FImageChangeLink); - end; + ReplaceImageListReference(Self, Value, FImages, FImageChangeLink); - FImages := Value; - - if Value <> nil then - begin - FImages.RegisterChanges(FImageChangeLink); - FImages.FreeNotification(Self); - end; if IsOwnerDrawMenu <> OldOwnerDraw then RefreshMenu(not OldOwnerDraw); @@ -1074,19 +1063,9 @@ OldOwnerDraw: Boolean; begin OldOwnerDraw := IsOwnerDrawMenu; - if FDisabledImages <> nil then - begin - FDisabledImages.RemoveFreeNotification(Self); - FDisabledImages.UnregisterChanges(FDisabledImageChangeLink); - end; - FDisabledImages := Value; - - if Value <> nil then - begin - FDisabledImages.RegisterChanges(FDisabledImageChangeLink); - FDisabledImages.FreeNotification(Self); - end; + ReplaceImageListReference(Self, Value, FDisabledImages, FDisabledImageChangeLink); + if IsOwnerDrawMenu <> OldOwnerDraw then RefreshMenu(not OldOwnerDraw); end; @@ -1102,19 +1081,7 @@ OldOwnerDraw: Boolean; begin OldOwnerDraw := IsOwnerDrawMenu; - if FHotImages <> nil then - begin - FHotImages.RemoveFreeNotification(Self); - FHotImages.UnregisterChanges(FHotImageChangeLink); - end; - - FHotImages := Value; - - if Value <> nil then - begin - FHotImages.RegisterChanges(FHotImageChangeLink); - FHotImages.FreeNotification(Self); - end; + ReplaceImageListReference(Self, Value, FHotImages, FHotImageChangeLink); if IsOwnerDrawMenu <> OldOwnerDraw then RefreshMenu(not OldOwnerDraw); end; @@ -1610,19 +1577,7 @@ OldOwnerDraw: Boolean; begin OldOwnerDraw := IsOwnerDrawMenu; - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnregisterChanges(FImageChangeLink); - end; - - FImages := Value; - - if Value <> nil then - begin - FImages.RegisterChanges(FImageChangeLink); - FImages.FreeNotification(Self); - end; + ReplaceImageListReference(Self, Value, FImages, FImageChangeLink); if IsOwnerDrawMenu <> OldOwnerDraw then RefreshMenu(not OldOwnerDraw); @@ -1642,19 +1597,7 @@ OldOwnerDraw: Boolean; begin OldOwnerDraw := IsOwnerDrawMenu; - if FDisabledImages <> nil then - begin - FDisabledImages.RemoveFreeNotification(Self); - FDisabledImages.UnregisterChanges(FDisabledImageChangeLink); - end; - - FDisabledImages := Value; - - if Value <> nil then - begin - FDisabledImages.RegisterChanges(FDisabledImageChangeLink); - FDisabledImages.FreeNotification(Self); - end; + ReplaceImageListReference(Self, Value, FDisabledImages, FDisabledImageChangeLink); if IsOwnerDrawMenu <> OldOwnerDraw then RefreshMenu(not OldOwnerDraw); end; @@ -1670,19 +1613,7 @@ OldOwnerDraw: Boolean; begin OldOwnerDraw := IsOwnerDrawMenu; - if FHotImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnregisterChanges(FHotImageChangeLink); - end; - - FHotImages := Value; - - if Value <> nil then - begin - FHotImages.RegisterChanges(FHotImageChangeLink); - FHotImages.FreeNotification(Self); - end; + ReplaceImageListReference(Self, Value, FHotImages, FHotImageChangeLink); if IsOwnerDrawMenu <> OldOwnerDraw then RefreshMenu(not OldOwnerDraw); end; @@ -2033,17 +1964,13 @@ begin // Remove menu from current item painter if FItemPainter <> nil then - begin - FItemPainter.RemoveFreeNotification(Self); FItemPainter.Menu := nil; - end; + ReplaceComponentReference (Self, Value, TComponent(FItemPainter)); // set value and if not nil, setup the painter correctly - FItemPainter := Value; if FItemPainter <> nil then begin Style := msItemPainter; - FItemPainter.FreeNotification(Self); FItemPainter.Menu := Self; end; Refresh; Modified: trunk/jvcl/run/JvMergeManager.pas =================================================================== --- trunk/jvcl/run/JvMergeManager.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvMergeManager.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -120,6 +120,7 @@ implementation + //=== { TJvMergeManager } ==================================================== constructor TJvMergeManager.Create(AOwner: TComponent); @@ -176,15 +177,8 @@ procedure TJvMergeManager.SetMergeFrame(Value: TWinControl); begin - if FMergeFrame <> Value then - begin - if FMergeFrame <> nil then - FMergeFrame.RemoveFreeNotification(Self); - FMergeFrame := Value; - if Value <> nil then - Value.FreeNotification(Self); + if ReplaceComponentReference (Self, Value, TComponent(FMergeFrame)) then FFormHistory.ResetHistory; - end; end; function TJvMergeManager.GetActiveForm: TCustomForm; Modified: trunk/jvcl/run/JvNavigationPane.pas =================================================================== --- trunk/jvcl/run/JvNavigationPane.pas 2009-06-08 21:00:08 UTC (rev 12335) +++ trunk/jvcl/run/JvNavigationPane.pas 2009-06-09 23:40:40 UTC (rev 12336) @@ -1251,31 +1251,22 @@ end; procedure TJvIconPanel.SetStyleManager(const Value: TJvNavPaneStyleManager); -//var -// I: Integer; begin if FStyleManager <> Value then begin ParentStyleManager := False; + if FStyleManager <> nil then - begin - FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); - end; - FStyleManager := Value; + ReplaceComponentReference (Self, Value, TComponent(FStyleManager)); if FStyleManager <> nil then begin FStyleManager.RegisterChanges(FStyleLink); - FStyleManager.FreeNotification(Self); Colors := FStyleManager.Colors; end; end; // FDropButton.StyleManager := Value; InternalStyleManagerChanged(Self, Value); - // TODO: should this be removed? -// for I := 0 to ControlCount - 1 do -// if Controls[I] is TJvNavIconButton then -// TJvNavIconButton(Controls[I]).StyleManager := Value; end; procedure TJvIconPanel.SetDropDownMenu(const Value: TPopupMenu); @@ -1706,15 +1697,11 @@ begin ParentStyleManager := False; if FStyleManager <> nil then - begin - FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); - end; - FStyleManager := Value; + ReplaceComponentReference (Self, Value, TComponent(FStyleManager)); if FStyleManager <> nil then begin FStyleManager.RegisterChanges(FStyleLink); - FStyleManager.FreeNotification(Self); Colors := FStyleManager.Colors; NavPanelFont := FStyleManager.Fonts.FNavPanelFont; NavPanelHotTrackFont := FStyleManager.Fonts.FNavPanelHotTrackFont; @@ -2176,21 +2163,8 @@ procedure TJvNavIconButton.SetImages(const Value: TCustomImageList); begin - if FImages <> Value then - begin - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnregisterChanges(FChangeLink); - end; - FImages := Value; - if FImages <> nil then - begin - FImages.FreeNotification(Self); - FImages.RegisterChanges(FChangeLink); - end; + if ReplaceImageListReference(Self, Value, FImages, FChangeLink) then Invalidate; - end; end; procedure TJvNavIconButton.SetButtonType(const Value: TJvNavIconButtonType); @@ -2208,15 +2182,11 @@ begin ParentStyleManager := False; if FStyleManager <> nil then - begin - FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); - end; - FStyleManager := Value; + ReplaceComponentReference (Self, Value, TComponent(FStyleManager)); if FStyleManager <> nil then begin FStyleManager.RegisterChanges(FStyleLink); - FStyleManager.FreeNotification(Self); Colors := FStyleManager.Colors; end; end; @@ -2412,15 +2382,12 @@ begin ParentStyleManager := False; if FStyleManager <> nil then - begin - FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); - end; FStyleManager := Value; + ReplaceComponentReference (Self, Value, TComponent(FStyleManager)); if FStyleManager <> nil then begin FStyleManager.RegisterChanges(FStyleLink); - FStyleManager.FreeNotification(Self); Colors := FStyleManager.Colors; end; end; @@ -2963,15 +2930,12 @@ begin ParentStyleManager := False; if FStyleManager <> nil then - begin - FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); - end; FStyleManager := Value; + ReplaceComponentReference (Self, Value, TComponent(FStyleManager)); if FStyleManager <> nil then begin FStyleManager.RegisterChanges(FStyleLink); - FStyleManager.FreeNotification(Self); Colors := FStyleManager.Colors; end; end; @@ -3000,19 +2964,12 @@ begin if (FIconPanel <> Value) and not (csDestroying in ComponentState) then begin - if FIconPanel <> nil then - FIconPanel.RemoveFreeNotification(Self); - FIconPanel := Value; + ReplaceComponentReference (Self, Value, TComponent(FIconPanel)); if IconButton <> nil then - begin if FIconPanel <> nil then - begin - IconButton.Parent := FIconPanel; - FIconPanel.FreeNotification(Self); - end + IconButton.Parent := FIconPanel else IconButton.Parent := nil; - end; end; end; @@ -3324,15 +3281,12 @@ begin ParentStyleManager := False; if FStyleManager <> nil then - begin - FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); - end; + ReplaceComponentReference (Self, Value, tComponent(FStyleManager)); FStyleManager := Value; if FStyleManager <> nil then begin FStyleManager.RegisterChanges(FStyleLink); - FStyleManager.FreeNotification(Self); ColorFrom := FStyleManager.Colors.SplitterColorFrom; ColorTo := FStyleManager.Colors.SplitterColorTo; end; @@ -3565,15 +3519,11 @@ begin ParentStyleManager := False; if FStyleManager <> nil then - begin - FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); - end; - FStyleManager := Value; + ReplaceComponentReference (Self, Value, tComponent(FStyleManager)); if FStyleManager <> nil then begin FStyleManager.RegisterChanges(FStyleLink); - FStyleManager.FreeNotification(Self); FColorFrom := FStyleManager.Colors.HeaderColorFrom; FColorTo := FStyleManager.Colors.HeaderColorTo; Font := FStyleManager.Fonts.HeaderFont; @@ -3603,21 +3553,8 @@ procedure TJvNavPanelHeader.SetImages(const Value: TCustomImageList); begin - if FImages <> Value then - begin - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnregisterChanges(FChangeLink); - end; - FImages := Value; - if FImages <> nil then - begin - FImages.RegisterChanges(FChangeLink); - FImages.FreeNotification(Self); - end; + if ReplaceImageListReference(Self, Value, FImages, FChangeLink) then Invalidate; - end; end; procedure TJvNavPanelHeader.TextChanged; @@ -3780,15 +3717,11 @@ begin ParentStyleManager := False; if FStyleManager <> nil then - begin - FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); - end; - FStyleManager := Value; + ReplaceComponentReference (Self, Value, tComponent(FStyleManager)); if FStyleManager <> nil then begin FStyleManager.RegisterChanges(FStyleLink); - FStyleManager.FreeNotification(Self); ColorFrom := FStyleManager.Colors.DividerColorFrom; ColorTo := FStyleManager.Colors.DividerColorTo; Font := FStyleManager.Fonts.DividerFont; @@ -4564,19 +4497,8 @@ var I: Integer; begin - if FImages <> Value then + if ReplaceImageListReference(Self, Value, FImages, FChangeLink) then begin - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnregisterChanges(FChangeLink); - end; - FImages := Value; - if FImages <> nil then - begin - FImages.RegisterChanges(FChangeLink); - FImages.FreeNotification(Self); - end; for I := 0 to Buttons.Count - 1 do Buttons[I].Button.Images := FImages; Invalidate; @@ -4598,15 +4520,11 @@ begin ParentStyleManager := False; if FStyleManager <> nil then - begin - FStyleManager.RemoveFreeNotification(Self); FStyleManager.UnregisterChanges(FStyleLink); - end; - FStyleManager := Value; + ReplaceComponentReference (Self, Value, tComponent(FStyleManager)); if FStyleManager <> nil then begin FStyleManager.RegisterChanges(FStyleLink); - FStyleManager.FreeNotification(Self); Colors := FStyleManager.Colors; Invalidate; end; @@ -4980,21 +4898,8 @@ procedure TJvNavPanelToolButton.SetImages(const Value: TCustomImageList); begin - if FImages <> Value then - begin - if FImages <> nil then - begin - FImages.RemoveFreeNotification(Self); - FImages.UnregisterChanges(FChangeLink); - end; - FImages := Value; - if FImages <> nil then - begin - FImages.RegisterChanges(FChangeLink); - FImages.FreeNotification(Self); - ... [truncated message content] |
From: <ah...@us...> - 2009-06-11 19:50:46
|
Revision: 12338 http://jvcl.svn.sourceforge.net/jvcl/?rev=12338&view=rev Author: ahuser Date: 2009-06-11 19:50:41 +0000 (Thu, 11 Jun 2009) Log Message: ----------- - Improved TJvCsvDataSet performance, especially when it comes to float fields - Another attempt to silence the Delphi 5 compiler hint. Modified Paths: -------------- trunk/jvcl/run/JvCsvData.pas trunk/jvcl/run/JvExprParser.pas trunk/jvcl/run/JvJCLUtils.pas Modified: trunk/jvcl/run/JvCsvData.pas =================================================================== --- trunk/jvcl/run/JvCsvData.pas 2009-06-11 10:42:10 UTC (rev 12337) +++ trunk/jvcl/run/JvCsvData.pas 2009-06-11 19:50:41 UTC (rev 12338) @@ -426,9 +426,10 @@ procedure SetSeparator(const Value: Char); procedure InternalQuickSort(SortList: PPointerList; L, R: Integer; - SortColumns: TArrayOfPCsvColumn; ACount: Integer; const SortAscending: array of Boolean); + const SortColumns: TArrayOfPCsvColumn; ACount: Integer; const SortAscending: array of Boolean); - procedure QuickSort(AList: TList; SortColumns: TArrayOfPCsvColumn; ACount: Integer; const SortAscending: array of Boolean); + procedure QuickSort(AList: TList; const SortColumns: TArrayOfPCsvColumn; ACount: Integer; + const SortAscending: array of Boolean); procedure AutoCreateDir(const FileName: string); function GetEnquoteBackslash: Boolean; procedure SetEnquoteBackslash(const Value: Boolean); @@ -531,8 +532,8 @@ // Internal methods used by sorting: function InternalFieldCompare(Column: PCsvColumn; Left, Right: PCsvRow): Integer; - function InternalCompare(SortColumns: TArrayOfPCsvColumn; SortColumnCount: Integer; - Left, Right: PCsvRow; SortAscending: Array of Boolean): Integer; + function InternalCompare(const SortColumns: TArrayOfPCsvColumn; SortColumnCount: Integer; + Left, Right: PCsvRow; const SortAscending: array of Boolean): Integer; // key uniqueness needs this: function InternalFindByKey(Row: PCsvRow): Integer; @@ -3961,8 +3962,8 @@ // Record comparison between two PCsvRows: // Returns 0 if Left=Right, 1 if Left>Right, -1 if Left<Right -function TJvCustomCsvDataSet.InternalCompare(SortColumns: TArrayOfPCsvColumn; - SortColumnCount: Integer; Left, Right: PCsvRow; SortAscending: Array of Boolean): Integer; +function TJvCustomCsvDataSet.InternalCompare(const SortColumns: TArrayOfPCsvColumn; + SortColumnCount: Integer; Left, Right: PCsvRow; const SortAscending: array of Boolean): Integer; var I: Integer; begin @@ -3991,7 +3992,7 @@ end; procedure TJvCustomCsvDataSet.InternalQuickSort(SortList: PPointerList; - L, R: Integer; SortColumns: TArrayOfPCsvColumn; ACount: Integer; const SortAscending: array of Boolean); + L, R: Integer; const SortColumns: TArrayOfPCsvColumn; ACount: Integer; const SortAscending: array of Boolean); var I, J: Integer; P, T: Pointer; @@ -4002,9 +4003,9 @@ J := R; P := SortList^[(L + R) shr 1]; repeat - while InternalCompare(SortColumns, ACount, SortList^[I], P, SortAscending ) < 0 do + while InternalCompare(SortColumns, ACount, SortList^[I], P, SortAscending) < 0 do Inc(I); - while InternalCompare(SortColumns, ACount, SortList^[J], P, SortAscending ) > 0 do + while InternalCompare(SortColumns, ACount, SortList^[J], P, SortAscending) > 0 do Dec(J); if I <= J then begin @@ -4024,7 +4025,7 @@ until I >= R; end; -procedure TJvCustomCsvDataSet.QuickSort(AList: TList; SortColumns: TArrayOfPCsvColumn; +procedure TJvCustomCsvDataSet.QuickSort(AList: TList; const SortColumns: TArrayOfPCsvColumn; ACount: Integer; const SortAscending: array of Boolean); begin if (AList <> nil) and (AList.Count > 1) then @@ -4879,13 +4880,13 @@ var TempBuf, RowItemText: PAnsiChar; Copy1, Copy2: Integer; - Dif, I, Old: Integer; + Diff, I, Old: Integer; begin Assert(Assigned(PItem)); Assert(PItem^.Magic = JvCsvRowMagic); Assert(PItem^.TextMaxLen>0); Assert(PItem^.Separator<>Chr(0)); - Dif := 0; + Diff := 0; if (ColumnIndex < 0) or (ColumnIndex > JvCsv_MAXCOLUMNS) then Exit; RowItemText := @PItem^._Text[0]; @@ -4923,9 +4924,9 @@ if Copy2 < 0 then Exit; if Length(NewValue) = Copy2 - Copy1 then - Dif := 0 + Diff := 0 else - Dif := Length(NewValue) - (Copy2 - Copy1); + Diff := Length(NewValue) - (Copy2 - Copy1); StrLCat(TempBuf, RowItemText + Copy2, PItem^.TextMaxLen); end; @@ -4934,13 +4935,13 @@ // Now that we've copied a new item of a different length into the place of the old one // we have to update the positions of the columns after ColumnIndex: - if Dif <> 0 then + if Diff <> 0 then for I := ColumnIndex + 1 to JvCsv_MAXCOLUMNS do begin Old := CsvRowGetColumnMarker(PItem, I); if Old = JvCsv_COLUMN_ENDMARKER then Exit; - CsvRowSetColumnMarker(PItem, I, Old + Dif); + CsvRowSetColumnMarker(PItem, I, Old + Diff); end; finally Modified: trunk/jvcl/run/JvExprParser.pas =================================================================== --- trunk/jvcl/run/JvExprParser.pas 2009-06-11 10:42:10 UTC (rev 12337) +++ trunk/jvcl/run/JvExprParser.pas 2009-06-11 19:50:41 UTC (rev 12338) @@ -98,12 +98,6 @@ {$WARN WIDECHAR_REDUCED OFF} {$ENDIF COMPILER12_UP} -{$IFDEF COMPILER5} - // Delphi 5 compiler shows hints about not exported or used symbol - // TNode.Eval. This is a compiler bug that is caused by the "abstract" keyword. - {$HINTS OFF} -{$ENDIF COMPILER5} - const cNumbers = ['0'..'9']; cLetters = ['a'..'z', 'A'..'Z', '_']; @@ -163,7 +157,11 @@ FParser: TParser; public constructor Create(Parser: TParser); virtual; - function Eval(): Variant; virtual; abstract; + + // Delphi 5 compiler shows hints about a not exported or used symbol + // TNode.Eval. This is a compiler bug that is caused by the "abstract" keyword. + + function Eval(): Variant; virtual; {$IFNDEF COMPILER5} abstract; {$ENDIF} end; EParserError = class(EExprParserError) @@ -657,6 +655,13 @@ FParser := Parser; end; +{$IFDEF COMPILER5} +function TNode.Eval(): Variant; +begin + Result := Null; +end; +{$ENDIF COMPILER5} + { TNodeBin } constructor TNodeBin.Create(AParser: TParser; AOperator: TLex; ALeftNode, ARightNode: TNode); Modified: trunk/jvcl/run/JvJCLUtils.pas =================================================================== --- trunk/jvcl/run/JvJCLUtils.pas 2009-06-11 10:42:10 UTC (rev 12337) +++ trunk/jvcl/run/JvJCLUtils.pas 2009-06-11 19:50:41 UTC (rev 12338) @@ -7998,7 +7998,8 @@ { Locale Handling logic October 2008 supercedes former StrToFloatUS functionality. } {$IFDEF RTL150_UP} - GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FormatSettings); + FormatSettings.ThousandSeparator := GetLocaleChar(LOCALE_SYSTEM_DEFAULT, LOCALE_STHOUSAND, '.'); + FormatSettings.DecimalSeparator := GetLocaleChar(LOCALE_SYSTEM_DEFAULT, LOCALE_SDECIMAL, '.'); {$ELSE} FormatSettings.DecimalSeparator := DecimalSeparator; {$ENDIF RTL150_UP} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2009-06-28 16:06:21
|
Revision: 12349 http://jvcl.svn.sourceforge.net/jvcl/?rev=12349&view=rev Author: jfudickar Date: 2009-06-28 16:05:18 +0000 (Sun, 28 Jun 2009) Log Message: ----------- Mantis 0004787: Database Actions won't work properly if TActionlist is placed into a TDatamodule. Modified Paths: -------------- trunk/jvcl/run/JvActionsEngine.pas trunk/jvcl/run/JvDBActions.pas Modified: trunk/jvcl/run/JvActionsEngine.pas =================================================================== --- trunk/jvcl/run/JvActionsEngine.pas 2009-06-25 10:59:10 UTC (rev 12348) +++ trunk/jvcl/run/JvActionsEngine.pas 2009-06-28 16:05:18 UTC (rev 12349) @@ -123,7 +123,7 @@ {$IFDEF HAS_UNIT_VARIANTS} Variants, {$ENDIF HAS_UNIT_VARIANTS} - JvResources; + JvResources, JvJVCLUtils; //=== { TJvActionEngineList } ======================================== @@ -239,7 +239,7 @@ else intValue := nil; Changed := FActionComponent <> intValue; - FActionComponent := intValue; + ReplaceComponentReference (Self, intValue, FActionComponent); if changed then ChangeActionComponent(FActionComponent); end; Modified: trunk/jvcl/run/JvDBActions.pas =================================================================== --- trunk/jvcl/run/JvDBActions.pas 2009-06-25 10:59:10 UTC (rev 12348) +++ trunk/jvcl/run/JvDBActions.pas 2009-06-28 16:05:18 UTC (rev 12349) @@ -770,7 +770,9 @@ begin Result := False; if Assigned(FBeforeExecute) then - FBeforeExecute(Self, DatabaseControlEngine, DataComponent, ContinueExecute); + FBeforeExecute(Self, DatabaseControlEngine, DataComponent, ContinueExecute) + else + ContinueExecute := True; if ContinueExecute then begin Result := inherited Execute; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2009-06-28 17:13:40
|
Revision: 12351 http://jvcl.svn.sourceforge.net/jvcl/?rev=12351&view=rev Author: jfudickar Date: 2009-06-28 17:13:38 +0000 (Sun, 28 Jun 2009) Log Message: ----------- New D2006+D2009 Field Datatypes included Modified Paths: -------------- trunk/jvcl/run/JvControlActionsEngineDBGrid.pas trunk/jvcl/run/JvDBGrid.pas trunk/jvcl/run/JvDBTreeView.pas trunk/jvcl/run/JvDynControlEngineDB.pas trunk/jvcl/run/JvDynControlEngineDBToolscxVGrid.pas trunk/jvcl/run/JvInspDB.pas trunk/jvcl/run/JvInterpreter_Db.pas trunk/jvcl/run/JvMemoryDataset.pas Modified: trunk/jvcl/run/JvControlActionsEngineDBGrid.pas =================================================================== --- trunk/jvcl/run/JvControlActionsEngineDBGrid.pas 2009-06-28 16:35:43 UTC (rev 12350) +++ trunk/jvcl/run/JvControlActionsEngineDBGrid.pas 2009-06-28 17:13:38 UTC (rev 12351) @@ -153,7 +153,9 @@ if Assigned(Column.Field) then if Column.Field.DataType in [ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, - ftBytes, ftVarBytes, ftAutoInc, ftMemo, ftFmtMemo] then + ftBytes, ftVarBytes, ftAutoInc, ftMemo, ftFmtMemo + {$IFDEF COMPILER10_UP}, ftOraTimestamp, ftWideMemo, ftFixedWideChar{$ENDIF COMPILER10_UP} + {$IFDEF COMPILER12_UP}, ftLongWord, ftShortint, ftByte, ftExtended{$ENDIF COMPILER12_UP}] then if Column.Field.Visible and Column.Visible and not Column.Field.IsNull then if TAccessCustomDBGrid(DBGrid).Canvas.TextWidth(Column.Field.AsString + ' ') > Column.Width then Column.Width := TAccessCustomDBGrid(DBGrid).Canvas.TextWidth(Column.Field.AsString + ' '); Modified: trunk/jvcl/run/JvDBGrid.pas =================================================================== --- trunk/jvcl/run/JvDBGrid.pas 2009-06-28 16:35:43 UTC (rev 12350) +++ trunk/jvcl/run/JvDBGrid.pas 2009-06-28 17:13:38 UTC (rev 12351) @@ -1123,7 +1123,8 @@ Result := (Field.DataType = ftBoolean); if not Result and Assigned(FOnCheckIfBooleanField) and (Field.DataType in [ftSmallint, ftInteger, ftLargeint, ftWord, ftString, ftWideString, - ftBCD {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF}]) then + ftBCD {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF} + {$IFDEF COMPILER12_UP},ftLongWord, ftShortint{$ENDIF COMPILER12_UP}]) then begin FStringForTrue := '1'; FStringForFalse := '0'; @@ -1148,6 +1149,7 @@ Result := Ord(gpOle); ftCursor, ftReference, ftDataSet: Result := Ord(gpData); + {$IFDEF COMPILER10_UP}ftWideMemo,{$ENDIF COMPILER10_UP} ftMemo, ftFmtMemo: if not ShowMemos then Result := Ord(gpMemo); @@ -1159,12 +1161,18 @@ Result := Ord(gpChecked) else Result := Ord(gpUnChecked); + {$IFDEF COMPILER10_UP} + ftFixedWideChar, + {$ENDIF COMPILER10_UP} ftString, ftWideString: if EditWithBoolBox(Field) and not Field.IsNull then if AnsiSameText(Field.AsString, FStringForFalse) then Result := Ord(gpUnChecked) else Result := Ord(gpChecked); + {$IFDEF COMPILER12_UP} + ftLongWord, ftShortint, + {$ENDIF COMPILER12_UP} ftSmallint, ftInteger, ftLargeint, ftWord, ftBCD {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF}: if EditWithBoolBox(Field) and not Field.IsNull then if Field.AsInteger = 0 then @@ -1925,7 +1933,7 @@ // The default editor cannot modify a binary or memo field if (F.DataType in [ftUnknown, ftBytes, ftVarBytes, ftAutoInc, ftBlob, - ftMemo, ftFmtMemo, ftGraphic, ftTypedBinary, ftDBaseOle, ftParadoxOle, + ftMemo, ftFmtMemo{$IFDEF COMPILER10_UP}, ftWideMemo{$ENDIF COMPILER10_UP}, ftGraphic, ftTypedBinary, ftDBaseOle, ftParadoxOle, ftCursor, ftADT, ftReference, ftDataSet, ftOraBlob, ftOraClob]) then begin Result := False; @@ -2797,7 +2805,7 @@ else if FieldKind = fkData then begin - if DataType = ftFloat then + if DataType in [db.ftFloat{$IFDEF COMPILER12_UP},db.ftExtended{$ENDIF COMPILER12_UP}] then if CharInSet(Key, ['.', ',']) then Key := DecimalSeparator{$IFDEF CLR}[1]{$ENDIF}; @@ -3710,6 +3718,7 @@ case FBooleanFieldToEdit.DataType of ftBoolean: FBooleanFieldToEdit.Value := (FieldValueChange = JvGridBool_CHECK); + {$IFDEF COMPILER10_UP}ftFixedWideChar,{$ENDIF COMPILER10_UP} ftString, ftWideString, ftBCD {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF}: begin if FieldValueChange = JvGridBool_CHECK then @@ -3729,6 +3738,7 @@ case FBooleanFieldToEdit.DataType of ftBoolean: FBooleanFieldToEdit.Value := not FBooleanFieldToEdit.AsBoolean; + {$IFDEF COMPILER10_UP}ftFixedWideChar,{$ENDIF COMPILER10_UP} ftString, ftWideString, ftBCD {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF}: begin if AnsiSameText(FBooleanFieldToEdit.AsString, FStringForTrue) then Modified: trunk/jvcl/run/JvDBTreeView.pas =================================================================== --- trunk/jvcl/run/JvDBTreeView.pas 2009-06-28 16:35:43 UTC (rev 12350) +++ trunk/jvcl/run/JvDBTreeView.pas 2009-06-28 17:13:38 UTC (rev 12351) @@ -306,11 +306,20 @@ DefaultValidMasterFields = [ftSmallInt, ftInteger, ftAutoInc, ftWord, ftFloat, ftString, ftWideString, ftBCD {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF}]; DefaultValidDetailFields = DefaultValidMasterFields; - DefaultValidItemFields = [ftString, ftWideString, ftMemo, ftSmallInt, ftInteger, ftAutoInc, + DefaultValidItemFields = [ftString, ftWideString, ftMemo, ftFmtMemo, ftSmallInt, ftInteger, ftAutoInc, ftWord, ftBoolean, ftFloat, ftCurrency, ftDate, ftTime, ftDateTime, ftBCD - {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF}]; + {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF} + {$IFDEF COMPILER10_UP} + , ftFixedWideChar, ftWideMemo, ftOraTimeStamp + {$ENDIF COMPILER10_UP} + {$IFDEF COMPILER12_UP} + ,ftLongWord, ftShortint, ftByte, ftExtended + {$ENDIF COMPILER12_UP}]; DefaultValidIconFields = [ftSmallInt, ftAutoInc, ftInteger, ftWord, ftBCD - {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF}]; + {$IFDEF COMPILER6_UP}, ftFMTBCD{$ENDIF} + {$IFDEF COMPILER12_UP} + ,ftLongWord, ftShortint + {$ENDIF COMPILER12_UP}]; function Var2Type(V: Variant; const VarType: Integer): Variant; begin Modified: trunk/jvcl/run/JvDynControlEngineDB.pas =================================================================== --- trunk/jvcl/run/JvDynControlEngineDB.pas 2009-06-28 16:35:43 UTC (rev 12350) +++ trunk/jvcl/run/JvDynControlEngineDB.pas 2009-06-28 17:13:38 UTC (rev 12351) @@ -288,7 +288,7 @@ if not Assigned(AField) then raise EJVCLException.CreateRes(@RsEUnassignedField); case AField.DataType of - ftOraClob, ftMemo: + ftOraClob, ftMemo, ftFmtMemo{$IFDEF COMPILER10_UP}, ftWideMemo{$ENDIF COMPILER10_UP}: Result := jctDBMemo; ftGraphic: Result := jctDBImage; @@ -298,7 +298,9 @@ Result := jctDBDateEdit; ftTime: Result := jctDBTimeEdit; - ftDateTime: + ftDateTime + {$IFDEF COMPILER6_UP}, ftTimestamp{$ENDIF COMPILER6_UP} + {$IFDEF COMPILER10_UP}, ftOraTimestamp{$ENDIF COMPILER10_UP}: Result := jctDBDateTimeEdit; ftBoolean: Result := jctDBCheckBox; Modified: trunk/jvcl/run/JvDynControlEngineDBToolscxVGrid.pas =================================================================== --- trunk/jvcl/run/JvDynControlEngineDBToolscxVGrid.pas 2009-06-28 16:35:43 UTC (rev 12350) +++ trunk/jvcl/run/JvDynControlEngineDBToolscxVGrid.pas 2009-06-28 17:13:38 UTC (rev 12351) @@ -229,13 +229,13 @@ end; if not Fieldfound then CurrentRow.Visible := FALSE; - if DBDatabinding.Field.Datatype in [ftOraClob, ftMemo] then + if DBDatabinding.Field.Datatype in [ftOraClob, ftMemo, ftFMTMemo{$IFDEF COMPILER10_UP}, ftWideMemo{$ENDIF COMPILER10_UP}] then begin CurrentRow.Properties.EditPropertiesClass := TcxMemoProperties; TcxMemoProperties(CurrentRow.Properties.EditProperties).Scrollbars := ssBoth; end else - if DBDatabinding.Field.Datatype in [ftSmallint, ftInteger, ftWord, ftLargeint, ftAutoInc] then + if DBDatabinding.Field.Datatype in [ftSmallint, ftInteger, ftWord, ftLargeint, ftAutoInc{$IFDEF COMPILER12_UP},ftLongWord, ftShortint{$ENDIF COMPILER12_UP}] then begin CurrentRow.Properties.EditPropertiesClass := TcxSpinEditProperties; TcxSpinEditProperties(CurrentRow.Properties.EditProperties).ValueType := vtInt; @@ -243,12 +243,12 @@ // TcxSpinEditPropertiesAccess(CurrentRow.Properties.EditProperties).Buttons[1].Visible := False; end else - if DBDatabinding.Field.Datatype in [ftFloat, ftCurrency, ftBCD, ftFMTBcd] then + if DBDatabinding.Field.Datatype in [ftFloat, ftCurrency, ftBCD, ftFMTBcd{$IFDEF COMPILER12_UP}ftExtended,{$ENDIF COMPILER12_UP}] then begin CurrentRow.Properties.EditPropertiesClass := TcxCalcEditProperties; end else - if DBDatabinding.Field.Datatype in [ftDate, ftTime, ftDateTime] then + if DBDatabinding.Field.Datatype in [ftDate, ftTime, ftDateTime {$IFDEF COMPILER10_UP},ftOraTimestamp{$ENDIF COMPILER10_UP}] then begin CurrentRow.Properties.EditPropertiesClass := TcxDateEditProperties; TcxDateEditProperties(CurrentRow.Properties.EditProperties).InputKind := ikStandard; Modified: trunk/jvcl/run/JvInspDB.pas =================================================================== --- trunk/jvcl/run/JvInspDB.pas 2009-06-28 16:35:43 UTC (rev 12350) +++ trunk/jvcl/run/JvInspDB.pas 2009-06-28 17:13:38 UTC (rev 12351) @@ -674,19 +674,37 @@ begin Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftString, System.TypeInfo(string))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftSmallint, System.TypeInfo(Smallint))); + {$IFDEF COMPILER12_UP} + Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftShortint, System.TypeInfo(ShortInt))); + {$ENDIF COMPILER12_UP} Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftInteger, System.TypeInfo(Integer))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftWord, System.TypeInfo(Word))); + {$IFDEF COMPILER12_UP} + Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftLongWord, System.TypeInfo(LongWord))); + {$ENDIF COMPILER12_UP} Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftBoolean, System.TypeInfo(Boolean))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftFloat, System.TypeInfo(Double))); + {$IFDEF COMPILER12_UP} + Add(TJvInspectorTFieldTypeRegItem.Create('', '', DB.ftExtended, System.TypeInfo(Extended))); + {$ENDIF COMPILER12_UP} Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftCurrency, System.TypeInfo(Currency))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftBCD, System.TypeInfo(Currency))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftDate, System.TypeInfo(TDateTime))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftTime, System.TypeInfo(TDateTime))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftDateTime, System.TypeInfo(TDateTime))); + {$IFDEF COMPILER10_UP} + Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftOraTimeStamp, System.TypeInfo(TDateTime))); + {$ENDIF COMPILER10_UP} Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftAutoInc, System.TypeInfo(Integer))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftMemo, System.TypeInfo(string))); + {$IFDEF COMPILER10_UP} + Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftWideMemo, System.TypeInfo(string))); + {$ENDIF COMPILER10_UP} Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftFmtMemo, System.TypeInfo(string))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftFixedChar, System.TypeInfo(string))); + {$IFDEF COMPILER10_UP} + Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftFixedWideChar, System.TypeInfo(string))); + {$ENDIF COMPILER10_UP} Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftWideString, System.TypeInfo(WideString))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftLargeint, System.TypeInfo(Int64))); Add(TJvInspectorTFieldTypeRegItem.Create('', '', ftVariant, System.TypeInfo(Variant))); Modified: trunk/jvcl/run/JvInterpreter_Db.pas =================================================================== --- trunk/jvcl/run/JvInterpreter_Db.pas 2009-06-28 16:35:43 UTC (rev 12350) +++ trunk/jvcl/run/JvInterpreter_Db.pas 2009-06-28 17:13:38 UTC (rev 12351) @@ -2574,6 +2574,25 @@ AddConst(cDb, 'ftDBaseOle', Ord(ftDBaseOle)); AddConst(cDb, 'ftTypedBinary', Ord(ftTypedBinary)); AddConst(cDb, 'ftCursor', Ord(ftCursor)); + {$IFDEF COMPILER6_UP} + AddConst(cDb, 'ftFMTBCD', Ord(ftFMTBCD)); + AddConst(cDb, 'ftTimestamp', Ord(ftTimestamp)); + {$ENDIF COMPILER6_UP} + {$IFDEF COMPILER10_UP} + AddConst(cDb, 'ftFixedWideChar', Ord(ftFixedWideChar)); + AddConst(cDb, 'ftWideMemo', Ord(ftWideMemo)); + AddConst(cDb, 'ftOraTimeStamp', Ord(ftOraTimeStamp)); + AddConst(cDb, 'ftOraInterval', Ord(ftOraInterval)); + {$ENDIF COMPILER10_UP} + {$IFDEF COMPILER12_UP} + AddConst(cDb, 'ftLongWord', Ord(ftLongWord)); + AddConst(cDb, 'ftShortint', Ord(ftShortint)); + AddConst(cDb, 'ftByte', Ord(ftByte)); + AddConst(cDb, 'ftExtended', Ord(ftExtended)); + AddConst(cDb, 'ftConnection', Ord(ftConnection)); + AddConst(cDb, 'ftParams', Ord(ftParams)); + AddConst(cDb, 'ftStream', Ord(ftStream)); + {$ENDIF COMPILER12_UP} { TFieldDef } AddClass(cDb, TFieldDef, 'TFieldDef'); AddGet(TFieldDef, 'Create', TFieldDef_Create, 6, [varEmpty, varEmpty, varEmpty, varEmpty, varEmpty, varEmpty], Modified: trunk/jvcl/run/JvMemoryDataset.pas =================================================================== --- trunk/jvcl/run/JvMemoryDataset.pas 2009-06-28 16:35:43 UTC (rev 12350) +++ trunk/jvcl/run/JvMemoryDataset.pas 2009-06-28 17:13:38 UTC (rev 12351) @@ -370,13 +370,20 @@ const ftBlobTypes = [ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, - ftDBaseOle, ftTypedBinary, ftOraBlob, ftOraClob]; + ftDBaseOle, ftTypedBinary, ftOraBlob, ftOraClob + {$IFDEF COMPILER10_UP}, ftWideMemo{$ENDIF COMPILER10_UP}]; ftSupported = [ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftDate, ftTime, ftDateTime, ftAutoInc, ftBCD, {$IFDEF COMPILER6_UP} - ftFMTBCD, + ftFMTBCD, ftTimestamp, {$ENDIF COMPILER6_UP} + {$IFDEF COMPILER10_UP} + ftOraTimestamp, ftFixedWideChar, + {$ENDIF COMPILER10_UP} + {$IFDEF COMPILER12_UP} + ftLongWord, ftShortint, ftByte, ftExtended, + {$ENDIF COMPILER12_UP} ftBytes, ftVarBytes, ftADT, ftFixedChar, ftWideString, ftLargeint, ftVariant, ftGuid] + ftBlobTypes; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2009-07-03 21:03:29
|
Revision: 12375 http://jvcl.svn.sourceforge.net/jvcl/?rev=12375&view=rev Author: jfudickar Date: 2009-07-03 21:03:26 +0000 (Fri, 03 Jul 2009) Log Message: ----------- Added / Fixed the usage of ReplaceComponentReference Modified Paths: -------------- trunk/jvcl/run/JvAppDBStorage.pas trunk/jvcl/run/JvAppStorage.pas trunk/jvcl/run/JvAppStorageSelectList.pas trunk/jvcl/run/JvBaseDBDialog.pas trunk/jvcl/run/JvButton.pas trunk/jvcl/run/JvCSVBaseControls.pas trunk/jvcl/run/JvComboListBox.pas trunk/jvcl/run/JvControlActions.pas trunk/jvcl/run/JvControlActionsEngine.pas trunk/jvcl/run/JvControlActionsEngineCxTreeList.pas trunk/jvcl/run/JvControlPanelButton.pas trunk/jvcl/run/JvDSADialogs.pas trunk/jvcl/run/JvDesktopAlert.pas trunk/jvcl/run/JvErrorIndicator.pas trunk/jvcl/run/JvFormPlacement.pas trunk/jvcl/run/JvFormPlacementSelectList.pas trunk/jvcl/run/JvFullColorCtrls.pas trunk/jvcl/run/JvHLEditor.pas trunk/jvcl/run/JvHLEditorPropertyForm.dfm trunk/jvcl/run/JvHLEditorPropertyForm.pas trunk/jvcl/run/JvLookOut.pas trunk/jvcl/run/JvOutlookBar.pas trunk/jvcl/run/JvPageListTreeView.pas trunk/jvcl/run/JvParameterList.pas trunk/jvcl/run/JvParameterListParameter.pas trunk/jvcl/run/JvProgramVersionCheck.pas trunk/jvcl/run/JvPropertyStoreEditor.pas trunk/jvcl/run/JvRegistryTreeview.pas trunk/jvcl/run/JvRollOut.pas trunk/jvcl/run/JvScheduledEvents.pas trunk/jvcl/run/JvSimLogic.pas trunk/jvcl/run/JvSyncSplitter.pas trunk/jvcl/run/JvTFGlance.pas trunk/jvcl/run/JvTMTimeLine.pas trunk/jvcl/run/JvThread.pas trunk/jvcl/run/JvTipOfDay.pas trunk/jvcl/run/JvTrayIcon.pas trunk/jvcl/run/JvUnicodeHLEditor.pas trunk/jvcl/run/JvVersionControlActionsEngine.pas trunk/jvcl/run/JvXPCore.pas trunk/jvcl/run/JvgAskListBox.pas trunk/jvcl/run/JvgCheckBox.pas trunk/jvcl/run/JvgCrossTable.pas trunk/jvcl/run/JvgImage.pas trunk/jvcl/run/JvgLabel.pas trunk/jvcl/run/JvgListBox.pas trunk/jvcl/run/JvgPage.pas trunk/jvcl/run/JvgReportParamsEditor.pas trunk/jvcl/run/JvgShadow.pas trunk/jvcl/run/JvgTab.pas Modified: trunk/jvcl/run/JvAppDBStorage.pas =================================================================== --- trunk/jvcl/run/JvAppDBStorage.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvAppDBStorage.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -62,8 +62,8 @@ FOnRead: TJvDBStorageReadEvent; FOnWrite: TJvDBStorageWriteEvent; FBookmark: {$IFDEF RTL200_UP}TBookmark{$ELSE}TBookmarkStr{$ENDIF RTL200_UP}; + FDataSource: TDataSource; procedure SetDataSource(const Value: TDataSource); - function GetDataSource: TDataSource; function GetKeyField: string; function GetSectionField: string; function GetValueField: string; @@ -103,7 +103,7 @@ constructor Create(AOwner: TComponent); override; destructor Destroy; override; protected - property DataSource: TDataSource read GetDataSource write SetDataSource; + property DataSource: TDataSource read FDataSource write SetDataSource; property KeyField: string read GetKeyField write SetKeyField; property SectionField: string read GetSectionField write SetSectionField; property ValueField: string read GetValueField write SetValueField; @@ -143,7 +143,7 @@ Windows, {$ENDIF SUPPORTS_INLINE} JclMime, - JvJCLUtils, JvResources, JclStrings; + JvJCLUtils, JvResources, JclStrings, JvJVCLUtils; constructor TJvCustomAppDBStorage.Create(AOwner: TComponent); begin @@ -291,11 +291,6 @@ Result := (FSectionLink.Field <> nil) and (FKeyLink.Field <> nil) and (FValueLink.Field <> nil); end; -function TJvCustomAppDBStorage.GetDataSource: TDataSource; -begin - Result := FSectionLink.DataSource; -end; - function TJvCustomAppDBStorage.GetKeyField: string; begin Result := FKeyLink.FieldName; @@ -388,14 +383,11 @@ begin if Assigned(FSectionLink) and not (FSectionLink.DataSourceFixed and (csLoading in ComponentState)) then begin - FSectionLink.DataSource.RemoveFreeNotification(Self); - FSectionLink.DataSource := Value; FKeyLink.DataSource := Value; FValueLink.DataSource := Value; end; - if Value <> nil then - Value.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(fDatasource)); end; procedure TJvCustomAppDBStorage.SetKeyField(const Value: string); Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvAppStorage.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -190,6 +190,7 @@ FSynchronizeFlushReload: Boolean; function GetActiveTranslateStringEngine: TJvTranslateString; function GetUpdating: Boolean; + procedure SetTranslateStringEngine(const Value: TJvTranslateString); protected FFlushOnDestroy: Boolean; @@ -676,8 +677,7 @@ GetActiveTranslateStringEngine; property StorageOptions: TJvCustomAppStorageOptions read FStorageOptions write SetStorageOptions; //1 This engine gives you the possibility to translate Strings with %-Replacements - property TranslateStringEngine: TJvTranslateString read FTranslateStringEngine - write FTranslateStringEngine; + property TranslateStringEngine: TJvTranslateString read FTranslateStringEngine write SetTranslateStringEngine; property OnTranslatePropertyName: TJvAppStoragePropTranslateEvent read FOnTranslatePropertyName write FOnTranslatePropertyName; property OnEncryptPropertyValue: TJvAppStorageCryptEvent read FOnEncryptPropertyValue @@ -1344,12 +1344,11 @@ procedure TJvCustomAppStorage.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); - if (AComponent is TJvCustomAppStorage) and (Operation = opRemove) and - Assigned(SubStorages) then - SubStorages.Delete(AComponent as TJvCustomAppStorage); - if (Operation = opRemove) and - (AComponent = FTranslateStringEngine) then - FTranslateStringEngine := nil; + if (Operation = opRemove) then + if (AComponent is TJvCustomAppStorage) and Assigned(SubStorages) then + SubStorages.Delete(AComponent as TJvCustomAppStorage) + else if (AComponent = FTranslateStringEngine) then + FTranslateStringEngine := nil; end; procedure TJvCustomAppStorage.SetFlushOnDestroy(Value: Boolean); @@ -3215,6 +3214,10 @@ WriteInteger(ConcatPaths([Path, cCount]), ItemCount); end; +procedure TJvCustomAppStorage.SetTranslateStringEngine(const Value: TJvTranslateString); +begin + ReplaceComponentReference (Self, Value, TComponent(FTranslateStringEngine)); +end; {$IFDEF COMPILER6_UP} function TJvCustomAppStorage.ReadWideString(const Path: string; Modified: trunk/jvcl/run/JvAppStorageSelectList.pas =================================================================== --- trunk/jvcl/run/JvAppStorageSelectList.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvAppStorageSelectList.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -108,7 +108,7 @@ {$IFDEF CLR} Variants, {$ENDIF CLR} - JvConsts, JvResources; + JvConsts, JvResources, JvJVCLUtils; constructor TJvAppStorageSelectList.Create(AOwner: TComponent); begin @@ -128,8 +128,9 @@ procedure TJvAppStorageSelectList.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); - if (Operation = opRemove) and (AComponent = FAppStorage) then - FAppStorage := nil; + if (Operation = opRemove) then + if (AComponent = FAppStorage) then + FAppStorage := nil; end; function TJvAppStorageSelectList.GetSelectList: TStrings; @@ -149,7 +150,7 @@ procedure TJvAppStorageSelectList.SetAppStorage(Value: TJvCustomAppStorage); begin - FAppStorage := Value; + ReplaceComponentReference (Self, Value, TComponent(FAppStorage)); end; procedure TJvAppStorageSelectList.SetSelectPath(Value: string); Modified: trunk/jvcl/run/JvBaseDBDialog.pas =================================================================== --- trunk/jvcl/run/JvBaseDBDialog.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvBaseDBDialog.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -45,7 +45,6 @@ FDynControlEngine: TJvDynControlEngine; FSession: TComponent; function GetDynControlEngine: TJvDynControlEngine; - procedure SetDynControlEngine(const Value: TJvDynControlEngine); protected function CreateForm: TForm; virtual; procedure CreateFormControls(aForm: TForm); virtual; @@ -62,8 +61,7 @@ property DBDialog: TForm read FDBDialog ; property Session: TComponent read FSession write SetSession; published - property DynControlEngine: TJvDynControlEngine read GetDynControlEngine write - SetDynControlEngine; + property DynControlEngine: TJvDynControlEngine read GetDynControlEngine write FDynControlEngine; end; @@ -83,7 +81,7 @@ {$IFDEF HAS_UNIT_TYPES} Types, {$ENDIF HAS_UNIT_TYPES} - ExtCtrls, ComCtrls, StdCtrls; + ExtCtrls, ComCtrls, StdCtrls, JvJVCLUtils; function TJvBaseDBDialog.CreateForm: TForm; begin @@ -125,12 +123,13 @@ TOperation); begin inherited Notification(AComponent, Operation); - if (Operation = opRemove) and (AComponent = FAppStorage) then - AppStorage := nil; - if (Operation = opRemove) and (AComponent = FSession) then - Session := nil; - if (Operation = opRemove) and (AComponent = FDBDialog) then - FDBDialog := nil; + if (Operation = opRemove) then + if (AComponent = FAppStorage) then + FAppStorage := nil + else if (AComponent = FSession) then + FSession := nil + else if (AComponent = FDBDialog) then + FDBDialog := nil; end; function TJvBaseDBDialog.SessionIsConnected: Boolean; @@ -140,8 +139,7 @@ procedure TJvBaseDBDialog.SetAppStorage(Value: TJvCustomAppStorage); begin - if Value <> FAppStorage then - FAppStorage := Value; + ReplaceComponentReference (self, Value, TComponent(FAppStorage)); end; procedure TJvBaseDBDialog.SetAppStoragePath(Value: string); @@ -150,14 +148,9 @@ FAppStoragePath := Value; end; -procedure TJvBaseDBDialog.SetDynControlEngine(const Value: TJvDynControlEngine); -begin - FDynControlEngine := Value; -end; - procedure TJvBaseDBDialog.SetSession(const Value: TComponent); begin - FSession := Value; + ReplaceComponentReference (self, Value, FSession); end; {$IFDEF UNITVERSIONING} Modified: trunk/jvcl/run/JvButton.pas =================================================================== --- trunk/jvcl/run/JvButton.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvButton.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -580,12 +580,9 @@ procedure TJvCustomGraphicButton.SetDropDownMenu(const Value: TPopupMenu); begin - if FDropDownMenu <> Value then - begin - FDropDownMenu := Value; + if ReplaceComponentReference (Self, Value, TComponent(FDropDownMenu)) then if DropArrow then Invalidate; - end; end; Modified: trunk/jvcl/run/JvCSVBaseControls.pas =================================================================== --- trunk/jvcl/run/JvCSVBaseControls.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvCSVBaseControls.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -170,7 +170,7 @@ uses SysUtils, Forms, Dialogs, - JvThemes, JvResources; + JvThemes, JvResources, JvJVCLUtils; {$R JvCSVBase.res} @@ -650,7 +650,7 @@ procedure TJvCSVEdit.SetCSVDataBase(const Value: TJvCSVBase); begin - FCSVDataBase := Value; + ReplaceComponentReference (Self, Value, TComponent(FCSVDataBase)); end; procedure TJvCSVEdit.SetCSVField(const Value: string); @@ -791,7 +791,7 @@ procedure TJvCSVNavigator.SetCSVDataBase(const Value: TJvCSVBase); begin - FCSVDataBase := Value; + ReplaceComponentReference (Self, Value, TComponent(FCSVDataBase)); end; //=== { TJvCSVComboBox } ===================================================== @@ -809,7 +809,7 @@ procedure TJvCSVComboBox.SetCSVDataBase(const Value: TJvCSVBase); begin - FCSVDataBase := Value; + ReplaceComponentReference (Self, Value, TComponent(FCSVDataBase)); end; procedure TJvCSVComboBox.SetCSVField(const Value: string); @@ -837,7 +837,7 @@ procedure TJvCSVCheckBox.SetCSVDataBase(const Value: TJvCSVBase); begin - FCSVDataBase := Value; + ReplaceComponentReference (Self, Value, TComponent(FCSVDataBase)); end; procedure TJvCSVCheckBox.SetCSVField(const Value: string); Modified: trunk/jvcl/run/JvComboListBox.pas =================================================================== --- trunk/jvcl/run/JvComboListBox.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvComboListBox.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -78,6 +78,7 @@ function DestRect(Picture: TPicture; ARect: TRect): TRect; function GetOffset(OrigRect, ImageRect: TRect): TRect; procedure SetButtonWidth(const Value: Integer); + procedure SetDropdownMenu(const Value: TPopupMenu); procedure SetHotTrackCombo(const Value: Boolean); protected procedure InvalidateItem(Index: Integer); @@ -103,7 +104,7 @@ published property ButtonWidth: Integer read FButtonWidth write SetButtonWidth default 20; property HotTrackCombo: Boolean read FHotTrackCombo write SetHotTrackCombo default False; - property DropdownMenu: TPopupMenu read FDropdownMenu write FDropdownMenu; + property DropdownMenu: TPopupMenu read FDropdownMenu write SetDropdownMenu; property DrawStyle: TJvComboListBoxDrawStyle read FDrawStyle write SetDrawStyle default dsOriginal; property OnDrawText: TJvComboListDrawTextEvent read FOnDrawText write FOnDrawText; property OnDrawImage: TJvComboListDrawImageEvent read FOnDrawImage write FOnDrawImage; @@ -183,7 +184,7 @@ implementation uses - Math; + Math, JvJVCLUtils; constructor TJvComboListBox.Create(AOwner: TComponent); begin @@ -628,6 +629,11 @@ Invalidate; end; +procedure TJvComboListBox.SetDropdownMenu(const Value: TPopupMenu); +begin + ReplaceComponentReference (Self, Value, TComponent(FDropdownMenu)); +end; + {$IFDEF UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); @@ -638,3 +644,4 @@ end. + Modified: trunk/jvcl/run/JvControlActions.pas =================================================================== --- trunk/jvcl/run/JvControlActions.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvControlActions.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -72,7 +72,6 @@ procedure UpdateTarget(Target: TObject); override; function HandlesTarget(Target: TObject): Boolean; override; procedure ExecuteTarget(Target: TObject); override; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; property ActionControl: TControl read GetActionControl write SetActionControl; property ControlOperation: TJvControlActionOperation read FControlOperation write SetControlOperation; @@ -218,11 +217,6 @@ Result := False; end; -procedure TJvControlBaseAction.Notification(AComponent: TComponent; Operation: TOperation); -begin - inherited Notification(AComponent, Operation); -end; - procedure TJvControlBaseAction.SetActionComponent(const Value: TComponent); begin inherited SetActionComponent(Value); Modified: trunk/jvcl/run/JvControlActionsEngine.pas =================================================================== --- trunk/jvcl/run/JvControlActionsEngine.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvControlActionsEngine.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -52,7 +52,6 @@ protected function GetEngineList: TJvActionEngineList; virtual; abstract; function GetSupportedOperations: TJvControlActionOperations; virtual; abstract; - procedure Notification(AComponent: TComponent; Operation: TOperation); override; property EngineList: TJvActionEngineList read GetEngineList; public constructor Create(AOwner: TComponent); override; @@ -142,12 +141,6 @@ Result := False; end; -procedure TJvControlActionEngine.Notification(AComponent: TComponent; - Operation: TOperation); -begin - inherited Notification(AComponent, Operation); -end; - function TJvControlActionEngine.SupportsAction(AAction: TJvActionEngineBaseAction): Boolean; begin Modified: trunk/jvcl/run/JvControlActionsEngineCxTreeList.pas =================================================================== --- trunk/jvcl/run/JvControlActionsEngineCxTreeList.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvControlActionsEngineCxTreeList.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -45,7 +45,7 @@ private protected function GetSupportedOperations: TJvControlActionOperations; override; - function GetTreeList(AActionComponent: TComponent): TcxCustomTreeListControl; + function GetTreeList(AActionComponent: TComponent): TcxCustomTreeList; public function ExecuteOperation(const aOperation: TJvControlActionOperation; const aActionControl: TControl): Boolean; override; @@ -97,11 +97,11 @@ end; function TJvControlActioncxGridEngine.GetTreeList(AActionComponent: - TComponent): TcxCustomTreeListControl; + TComponent): TcxCustomTreeList; begin if Assigned(AActionComponent) then - if AActionComponent is TcxCustomTreeListControl then - Result := TcxCustomTreeListControl(AActionComponent) + if AActionComponent is TcxCustomTreeList then + Result := TcxCustomTreeList(AActionComponent) else Result := nil else Modified: trunk/jvcl/run/JvControlPanelButton.pas =================================================================== --- trunk/jvcl/run/JvControlPanelButton.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvControlPanelButton.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -177,11 +177,8 @@ procedure TJvControlPanelButton.SetImages(const Value: TCustomImageList); begin - if FImages <> Value then - begin - FImages := Value; + if ReplaceComponentReference (Self, Value, TComponent(FImages)) then Refresh; - end; end; procedure TJvControlPanelButton.DoLinkClick(Sender: TObject); Modified: trunk/jvcl/run/JvDSADialogs.pas =================================================================== --- trunk/jvcl/run/JvDSADialogs.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvDSADialogs.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -478,7 +478,7 @@ JclRegistry, {$ENDIF MSWINDOWS} JclBase, JclSysUtils, - JvConsts, JvResources; + JvConsts, JvResources, JvJVCLUtils; const cDSAStateValueName = 'DSA_State'; // do not localize @@ -2431,15 +2431,14 @@ procedure TJvDSADialog.Notification(AComponent: TComponent; Operation: TOperation); begin + inherited Notification(AComponent, Operation); if (Operation = opRemove) and (AComponent = CheckControl) then CheckControl := nil; - inherited Notification(AComponent, Operation); end; procedure TJvDSADialog.SetCheckControl(Value: TWinControl); begin - if Value <> CheckControl then - begin + if ReplaceComponentReference (Self, Value, TComponent(FCheckControl)) then if Value <> nil then begin if GetPropInfo(Value, 'Checked') = nil then @@ -2447,8 +2446,6 @@ if GetPropInfo(Value, 'Caption') = nil then raise EJvDSADialog.CreateRes(@RsECtrlHasNoCaptionProp); end; - FCheckControl := Value; - end; end; procedure TJvDSADialog.SetDialogID(Value: Integer); Modified: trunk/jvcl/run/JvDesktopAlert.pas =================================================================== --- trunk/jvcl/run/JvDesktopAlert.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvDesktopAlert.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -1727,12 +1727,9 @@ procedure TJvCustomDesktopAlert.SetAlertStack(const Value: TJvDesktopAlertStack); begin - if FStacker <> Value then - begin - ReplaceComponentReference (Self, Value, TComponent(FStacker)); + if ReplaceComponentReference (Self, Value, TComponent(FStacker)) then if FStacker <> nil then Location.Position := FStacker.Position; - end; end; procedure TJvCustomDesktopAlert.SetAlertStyle(const Value: TJvAlertStyle); Modified: trunk/jvcl/run/JvErrorIndicator.pas =================================================================== --- trunk/jvcl/run/JvErrorIndicator.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvErrorIndicator.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -719,9 +719,8 @@ procedure TJvErrorControl.SetImageList(const Value: TCustomImageList); begin - if FImageList <> Value then + if ReplaceComponentReference (Self, Value, TComponent(FImageList)) then begin - FImageList := Value; if FImageList <> nil then BoundsRect := CalcBoundsRect else @@ -746,8 +745,11 @@ Operation: TOperation); begin inherited Notification(AComponent, Operation); - if (Operation = opRemove) and (AComponent = Control) then - Control := nil; + if (Operation = opRemove) then + if (AComponent = Control) then + Control := nil + else if (AComponent = FImageList) then + FImageList := nil end; //=== { TJvBlinkThread } ===================================================== Modified: trunk/jvcl/run/JvFormPlacement.pas =================================================================== --- trunk/jvcl/run/JvFormPlacement.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvFormPlacement.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -118,6 +118,7 @@ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormDestroy(Sender: TObject); function GetForm: TForm; + procedure SetAppStorage(const Value: TJvCustomAppStorage); protected procedure ResolveAppStoragePath; procedure Loaded; override; @@ -147,7 +148,7 @@ procedure EraseSections; published property Active: Boolean read FActive write FActive default True; - property AppStorage: TJvCustomAppStorage read FAppStorage write FAppStorage; + property AppStorage: TJvCustomAppStorage read FAppStorage write SetAppStorage; property AppStoragePath: string read FAppStoragePath write SetAppStoragePath; property MinMaxInfo: TJvWinMinMaxInfo read FWinMinMaxInfo write SetWinMinMaxInfo; property Options: TPlacementOptions read FOptions write FOptions default [fpState, fpSize, fpLocation]; @@ -1389,6 +1390,11 @@ GetFullFrameName(Owner), [rfIgnoreCase]) end; +procedure TJvFormPlacement.SetAppStorage(const Value: TJvCustomAppStorage); +begin + ReplaceComponentReference (Self, Value, TComponent(FAppStorage)); +end; + { TJvFormStorageStringList } procedure TJvFormStorageStringList.Assign(Source: TPersistent); Modified: trunk/jvcl/run/JvFormPlacementSelectList.pas =================================================================== --- trunk/jvcl/run/JvFormPlacementSelectList.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvFormPlacementSelectList.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -36,7 +36,6 @@ private FFormStorage: TJvFormStorage; protected - function GetFormStorage: TJvFormStorage; virtual; procedure SetFormStorage(Value: TJvFormStorage); virtual; function GetAppStorage: TJvCustomAppStorage; override; procedure SetAppStorage(Value: TJvCustomAppStorage); override; @@ -46,7 +45,7 @@ function RestoreFormStorage(const ACaption: string = ''): Boolean; function SaveFormStorage(const ACaption: string = ''): Boolean; published - property FormStorage: TJvFormStorage read GetFormStorage write SetFormStorage; + property FormStorage: TJvFormStorage read FFormStorage write SetFormStorage; end; {$IFDEF UNITVERSIONING} @@ -62,16 +61,11 @@ implementation uses - JvConsts; + JvConsts, JvJVCLUtils; -function TJvFormStorageSelectList.GetFormStorage: TJvFormStorage; -begin - Result := FFormStorage; -end; - procedure TJvFormStorageSelectList.SetFormStorage(Value: TJvFormStorage); begin - FFormStorage := Value; + ReplaceComponentReference (Self, Value, TComponent(FFormStorage)); end; function TJvFormStorageSelectList.GetAppStorage: TJvCustomAppStorage; Modified: trunk/jvcl/run/JvFullColorCtrls.pas =================================================================== --- trunk/jvcl/run/JvFullColorCtrls.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvFullColorCtrls.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -1331,9 +1331,9 @@ procedure TJvFullColorPanel.Notification(AComponent: TComponent; Operation: TOperation); begin + inherited Notification(AComponent, Operation); if (Operation = opRemove) and (AComponent = ColorTrackBar) then ColorTrackBar := nil; - inherited Notification(AComponent, Operation); end; procedure TJvFullColorPanel.SetFullColor(const Value: TJvFullColor); Modified: trunk/jvcl/run/JvHLEditor.pas =================================================================== --- trunk/jvcl/run/JvHLEditor.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvHLEditor.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -178,7 +178,7 @@ uses Math, - JvConsts, JvJCLUtils; + JvConsts, JvJCLUtils, JvJVCLUtils; function LastNonSpaceChar(const S: string): Char; var @@ -298,9 +298,9 @@ procedure TJvHLEditor.Notification(AComponent: TComponent; Operation: TOperation); begin + inherited Notification(AComponent, Operation); if (Operation = opRemove) and (AComponent = FSyntaxHighlighter) then SyntaxHighlighter := nil; - inherited Notification(AComponent, Operation); end; procedure TJvHLEditor.Loaded; @@ -1874,7 +1874,7 @@ if FHighlighter = hlSyntaxHighlighter then FHighlighter := hlNone; - FSyntaxHighlighter := Value; + ReplaceComponentReference (Self, Value, TComponent(FSyntaxHighlighter)); RescanLong(0); Invalidate; end; Modified: trunk/jvcl/run/JvHLEditorPropertyForm.dfm =================================================================== --- trunk/jvcl/run/JvHLEditorPropertyForm.dfm 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvHLEditorPropertyForm.dfm 2009-07-03 21:03:26 UTC (rev 12375) @@ -26,6 +26,10 @@ TabOrder = 0 object tsEditor: TTabSheet Caption = 'Editor' + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 object lblEditorSpeedSettings: TLabel Left = 30 Top = 11 @@ -48,7 +52,7 @@ Width = 267 Height = 21 Style = csDropDownList - ItemHeight = 13 + ItemHeight = 0 TabOrder = 0 Items.Strings = ( 'Default keymapping') Modified: trunk/jvcl/run/JvHLEditorPropertyForm.pas =================================================================== --- trunk/jvcl/run/JvHLEditorPropertyForm.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvHLEditorPropertyForm.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -155,6 +155,7 @@ procedure SetColorSamples(Value: TStrings); function IsPagesStored: Boolean; procedure SetJvHLEditor(const Value: TJvCustomEditorBase); + procedure SetStorage(const Value: TJvFormStorage); protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; public @@ -169,7 +170,7 @@ procedure SaveCurrentHighlighterColors; published property JvHLEditor: TJvCustomEditorBase read FJvHLEditor write SetJvHLEditor; - property Storage: TJvFormStorage read FStorage write FStorage; + property Storage: TJvFormStorage read FStorage write SetStorage; property ColorSamples: TStrings read GetColorSamples write SetColorSamples; property HighlighterCombo: Boolean read FHighlighterCombo write FHighlighterCombo default True; property ActivePage: TJvHLEdActivePage read FActivePage write FActivePage default 0; @@ -586,18 +587,19 @@ var HLed: IJvHLEditor; begin - if Value <> FJvHLEditor then - begin + if ReplaceComponentReference (Self, Value, TComponent(FJvHLEditor)) then if Value <> nil then begin if Value.GetInterface(IJvHLEditor, HLed) then FJvHLEditor := Value; - end - else - FJvHLEditor := nil; - end; + end; end; +procedure TJvHLEdPropDlg.SetStorage(const Value: TJvFormStorage); +begin + ReplaceComponentReference (Self, Value, TComponent(FStorage)); +end; + //=== { TJvHLEditorParamsForm } ============================================== constructor TJvHLEditorParamsForm.Create(AOwner: TComponent); Modified: trunk/jvcl/run/JvLookOut.pas =================================================================== --- trunk/jvcl/run/JvLookOut.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvLookOut.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -95,7 +95,7 @@ FFillColor: TColor; FHighlightFont: TFont; FButtonBorder: TJvButtonBorder; - FPopUpMenu: TPopupMenu; + FPopupMenu: TPopupMenu; FGroupIndex: Integer; FSmallImages: TCustomImageList; FLargeImages: TCustomImageList; @@ -124,6 +124,7 @@ procedure CMLeaveButton(var Msg: TMessage); message CM_LEAVEBUTTON; procedure CMTextChanged(var Msg:TMessage); message CM_TEXTCHANGED; function ParentVisible: Boolean; + procedure SetPopupMenu(const Value: TPopupMenu); protected procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override; @@ -156,7 +157,7 @@ property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1; property ImageSize: TJvImageSize read FImageSize write SetImageSize default isLarge; property ParentImageSize: Boolean read FParentImageSize write SetParentImageSize default True; - property PopupMenu: TPopupMenu read FPopUpMenu write FPopUpMenu; + property PopupMenu: TPopupMenu read FPopupMenu write SetPopupMenu; property LargeImages: TCustomImageList read FLargeImages write SetLargeImages; property Spacing: Integer read FSpacing write SetSpacing default 4; { border offset from bitmap } property SmallImages: TCustomImageList read FSmallImages write SetSmallImages; @@ -1593,6 +1594,11 @@ Result := TJvLookOutButtonActionLink; end; +procedure TJvCustomLookOutButton.SetPopupMenu(const Value: TPopupMenu); +begin + ReplaceComponentReference (Self, Value, TComponent(FPopupMenu)); +end; + procedure TJvCustomLookOutButton.VisibleChanged; begin inherited VisibleChanged; Modified: trunk/jvcl/run/JvOutlookBar.pas =================================================================== --- trunk/jvcl/run/JvOutlookBar.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvOutlookBar.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -478,7 +478,7 @@ uses Math, - JvConsts; + JvConsts, JvJVCLUtils; {$R JvOutlookBar.res} @@ -2300,15 +2300,8 @@ procedure TJvCustomOutlookBar.SetLargeImages(const Value: TCustomImageList); begin - if FLargeImages <> Value then - begin - if Assigned(FLargeImages) then - FLargeImages.UnRegisterChanges(FLargeChangeLink); - FLargeImages := Value; - if Assigned(FLargeImages) then - FLargeImages.RegisterChanges(FLargeChangeLink); + if ReplaceImageListReference(Self, Value, FLargeImages, FLargeChangeLink) then Invalidate; - end; end; procedure TJvCustomOutlookBar.SetPageButtonHeight(const Value: Integer); @@ -2327,15 +2320,8 @@ procedure TJvCustomOutlookBar.SetSmallImages(const Value: TCustomImageList); begin - if FSmallImages <> Value then - begin - if Assigned(FSmallImages) then - FSmallImages.UnRegisterChanges(FSmallChangeLink); - FSmallImages := Value; - if Assigned(FSmallImages) then - FSmallImages.RegisterChanges(FSmallChangeLink); + if ReplaceImageListReference(Self, Value, FSmallImages, FSmallChangeLink) then Invalidate; - end; end; procedure TJvCustomOutlookBar.SetThemed(const Value: Boolean); @@ -2820,15 +2806,8 @@ procedure TJvCustomOutlookBar.SetPageImages(const Value: TCustomImageList); begin - if FPageImages <> Value then - begin - if Assigned(FPageImages) then - FPageImages.UnRegisterChanges(FPageChangeLink); - FPageImages := Value; - if Assigned(FPageImages) then - FPageImages.RegisterChanges(FPageChangeLink); + if ReplaceImageListReference(Self, Value, FPageImages, FPageChangeLink) then Invalidate; - end; end; procedure TJvCustomOutlookBar.InitiateAction; Modified: trunk/jvcl/run/JvPageListTreeView.pas =================================================================== --- trunk/jvcl/run/JvPageListTreeView.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvPageListTreeView.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -407,7 +407,7 @@ uses JvResources, - Forms; + Forms, JvJVCLUtils; (* (ahuser) make Delphi 5 compiler happy procedure ResetAllNonParentNodes(Items: TTreeNodes; ImageIndex, SelectedIndex: Integer); Modified: trunk/jvcl/run/JvParameterList.pas =================================================================== --- trunk/jvcl/run/JvParameterList.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvParameterList.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -151,6 +151,7 @@ FOnExitParameter: TJvParameterListEvent; FOnValidateData: TJvParameterOnValidateData; FRequired: Boolean; + procedure SetParameterList(const Value: TJvParameterList); protected procedure SetAsString(const Value: string); virtual; function GetAsString: string; virtual; @@ -203,7 +204,7 @@ function IsValid(const AData: Variant): Boolean; virtual; procedure SetData; virtual; property AdditionalData: Pointer read FAdditionalData write FAdditionalData; - property ParameterList: TJvParameterList read FParameterList write FParameterList; + property ParameterList: TJvParameterList read FParameterList write SetParameterList; property DynControlEngine: TJvDynControlEngine read GetDynControlEngine; property WinControl: TWinControl read FWinControl; published @@ -327,8 +328,6 @@ procedure ResizeDialogAfterArrange(Sender: TObject; nLeft, nTop, nWidth, nHeight: Integer); - procedure SetDynControlEngine(Value: TJvDynControlEngine); - procedure Notification(AComponent: TComponent; Operation: TOperation); override; function GetParentByName(MainParent: TWinControl; const ASearchName: string): TWinControl; @@ -397,8 +396,7 @@ property CurrentWidth: Integer read GetCurrentWidth; {returns the current height of the created main-parameter-panel} property CurrentHeight: Integer read GetCurrentHeight; - property DynControlEngine: TJvDynControlEngine read FDynControlEngine write - SetDynControlEngine; + property DynControlEngine: TJvDynControlEngine read FDynControlEngine write FDynControlEngine; { Property to get access to the parameters } property Parameters[Index: Integer]: TJvBaseParameter read GetParameters write SetParameters; // Enable/DisableReason for the OkButton @@ -471,7 +469,6 @@ FParameterList: TJvParameterList; protected function GetDynControlEngine: TJvDynControlEngine; override; - function GetParameterList: TJvParameterList; virtual; procedure SetParameterList(Value: TJvParameterList); virtual; function GetAppStorage: TJvCustomAppStorage; override; procedure SetAppStorage(Value: TJvCustomAppStorage); override; @@ -480,17 +477,19 @@ procedure RestoreParameterList(const ACaption: string = ''); procedure SaveParameterList(const ACaption: string = ''); published - property ParameterList: TJvParameterList read GetParameterList write SetParameterList; + property ParameterList: TJvParameterList read FParameterList write SetParameterList; end; TJvParameterListPropertyStore = class(TJvCustomPropertyStore) private FParameterList: TJvParameterList; + procedure SetParameterList(const Value: TJvParameterList); protected procedure LoadData; override; procedure StoreData; override; public - property ParameterList: TJvParameterList read FParameterList write FParameterList; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + property ParameterList: TJvParameterList read FParameterList write SetParameterList; end; {$IFDEF UNITVERSIONING} @@ -508,7 +507,7 @@ uses JclStrings, - JvParameterListParameter, JvResources; + JvParameterListParameter, JvResources, JvJVCLUtils; const cFalse = 'FALSE'; @@ -836,7 +835,7 @@ FStoreValueToAppStorage := True; FStoreValueCrypted := False; FTabOrder := -1; - FParameterList := AParameterList; + SetParameterList (AParameterList); FWinControl := nil; FJvDynControl := nil; FJvDynControlCaption := nil; @@ -942,13 +941,16 @@ procedure TJvBaseParameter.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); - if (AComponent = FWinControl) and (Operation = opRemove) then - begin - FWinControl := nil; - FJvDynControl := nil; - FJvDynControlCaption := nil; - FJvDynControlData := nil; - end; + if (Operation = opRemove) then + if (AComponent = FWinControl) then + begin + FWinControl := nil; + FJvDynControl := nil; + FJvDynControlCaption := nil; + FJvDynControlData := nil; + end + else if (AComponent = FParameterList) then + fParameterList := nil; end; function TJvBaseParameter.GetWinControlData: Variant; @@ -994,7 +996,7 @@ begin FJvDynControl := nil; FJvDynControlCaption := nil; - FWinControl := Value; + ReplaceComponentReference (Self, Value, TComponent(FWinControl)); if not Assigned(Value) then Exit; Supports(FWinControl, IJvDynControl, FJvDynControl); @@ -1175,6 +1177,11 @@ vMsg := Format(RsErrParameterMustBeEntered, [Caption]); end; +procedure TJvBaseParameter.SetParameterList(const Value: TJvParameterList); +begin + ReplaceComponentReference (Self, Value, TComponent(FParameterList)); +end; + //=== { TJvParameterList } =================================================== constructor TJvParameterList.Create(AOwner: TComponent); @@ -1323,11 +1330,6 @@ end; end; -procedure TJvParameterList.SetDynControlEngine(Value: TJvDynControlEngine); -begin - FDynControlEngine := Value; -end; - procedure TJvParameterList.LoadData; begin if (AppStoragePath <> '') and Assigned(AppStorage) then @@ -2157,7 +2159,7 @@ var I: Integer; begin - if Assigned(AppStorage) then + if Assigned(AppStorage) And Assigned(ParameterList) then for I := 0 to ParameterList.Count - 1 do if not (ParameterList.Parameters[I] is TJvNoDataParameter) then if ParameterList.Parameters[I].StoreValueToAppStorage then @@ -2179,6 +2181,18 @@ end; end; +procedure TJvParameterListPropertyStore.Notification(AComponent: TComponent; Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation = opRemove) and (AComponent = FParameterList) then + FParameterList := nil; +end; + +procedure TJvParameterListPropertyStore.SetParameterList(const Value: TJvParameterList); +begin + ReplaceComponentReference (Self, Value, TComponent(FParameterList)); +end; + procedure TJvParameterListPropertyStore.StoreData; var I: Integer; @@ -2209,14 +2223,9 @@ Result := FParameterList.DynControlEngine; end; -function TJvParameterListSelectList.GetParameterList: TJvParameterList; -begin - Result := FParameterList; -end; - procedure TJvParameterListSelectList.SetParameterList(Value: TJvParameterList); begin - FParameterList := Value; + ReplaceComponentReference (Self, Value, TComponent(FParameterList)); end; function TJvParameterListSelectList.GetAppStorage: TJvCustomAppStorage; Modified: trunk/jvcl/run/JvParameterListParameter.pas =================================================================== --- trunk/jvcl/run/JvParameterListParameter.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvParameterListParameter.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -164,6 +164,7 @@ private FArrangeSettings: TJvArrangeSettings; FParentControl: TWinControl; + procedure SetParentControl(const Value: TWinControl); protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure SetArrangeSettings(Value: TJvArrangeSettings); @@ -174,7 +175,7 @@ procedure ArrangeControls; virtual; procedure DisableArrange; virtual; procedure EnableArrange; virtual; - property ParentControl: TWinControl read GetParentControl write FParentControl; + property ParentControl: TWinControl read GetParentControl write SetParentControl; published property ArrangeSettings: TJvArrangeSettings read FArrangeSettings write SetArrangeSettings; property Color; @@ -1270,6 +1271,11 @@ Result := WinControl; end; +procedure TJvArrangeParameter.SetParentControl(const Value: TWinControl); +begin + ReplaceComponentReference (Self, Value, TComponent(FParentControl)); +end; + //=== { TJvPanelParameter } ================================================== constructor TJvPanelParameter.Create(AParameterList: TJvParameterList); Modified: trunk/jvcl/run/JvProgramVersionCheck.pas =================================================================== --- trunk/jvcl/run/JvProgramVersionCheck.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvProgramVersionCheck.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -475,6 +475,10 @@ TjvProgramVersionHistoryFileFormat): TJvCustomAppMemoryFileStorage; function GetDownloadError: string; function GetSelectedLocation: TJvCustomProgramVersionLocation; + procedure SetLocationDatabase(const Value: TJvProgramVersionDatabaseLocation); + procedure SetLocationFTP(const Value: TJvProgramVersionFTPLocation); + procedure SetLocationHTTP(const Value: TJvProgramVersionHTTPLocation); + procedure SetLocationNetwork(const Value: TJvProgramVersionNetworkLocation); procedure SetVersionHistoryFileOptions(const Value: TJvProgramVersionHistoryAppStorageOptions); protected @@ -537,14 +541,13 @@ property LocalVersionInfoFileName: string read FLocalVersionInfoFileName write FLocalVersionInfoFileName; { Database Location } - property LocationDatabase: TJvProgramVersionDatabaseLocation - read FLocationDatabase write FLocationDatabase; + property LocationDatabase: TJvProgramVersionDatabaseLocation read FLocationDatabase write SetLocationDatabase; { FTP Location } - property LocationFTP: TJvProgramVersionFTPLocation read FLocationFTP write FLocationFTP; + property LocationFTP: TJvProgramVersionFTPLocation read FLocationFTP write SetLocationFTP; { HTTP Location } - property LocationHTTP: TJvProgramVersionHTTPLocation read FLocationHTTP write FLocationHTTP; + property LocationHTTP: TJvProgramVersionHTTPLocation read FLocationHTTP write SetLocationHTTP; { Network Location } - property LocationNetwork: TJvProgramVersionNetworkLocation read FLocationNetwork write FLocationNetwork; + property LocationNetwork: TJvProgramVersionNetworkLocation read FLocationNetwork write SetLocationNetwork; { Defines location which is used for the version check, only assigned locations are supported } property LocationType: TJvProgramVersionLocationType read FLocationType write FLocationType; @@ -571,7 +574,7 @@ uses SysUtils, Dialogs, Controls, ComCtrls, StdCtrls, Forms, JclBase, JclFileUtils, JclShell, - JvDSADialogs, JvParameterListParameter, JvResources, Windows, Messages; + JvDSADialogs, JvParameterListParameter, JvResources, Windows, Messages, JvJVCLUtils; const SParamNameVersionButtonInfo = 'VersionButtonInfo'; @@ -1697,7 +1700,27 @@ end; end; +procedure TJvProgramVersionCheck.SetLocationDatabase(const Value: TJvProgramVersionDatabaseLocation); +begin + ReplaceComponentReference (Self, Value, TComponent(FLocationDatabase)); +end; +procedure TJvProgramVersionCheck.SetLocationFTP(const Value: TJvProgramVersionFTPLocation); +begin + ReplaceComponentReference (Self, Value, TComponent(FLocationFTP)); +end; + +procedure TJvProgramVersionCheck.SetLocationHTTP(const Value: TJvProgramVersionHTTPLocation); +begin + ReplaceComponentReference (Self, Value, TComponent(FLocationHTTP)); +end; + +procedure TJvProgramVersionCheck.SetLocationNetwork(const Value: TJvProgramVersionNetworkLocation); +begin + ReplaceComponentReference (Self, Value, TComponent(FLocationNetwork)); +end; + + procedure TJvProgramVersionCheck.VersionInfoButtonClick(const ParameterList: TJvParameterList; const Parameter: TJvBaseParameter); var Modified: trunk/jvcl/run/JvPropertyStoreEditor.pas =================================================================== --- trunk/jvcl/run/JvPropertyStoreEditor.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvPropertyStoreEditor.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -189,7 +189,7 @@ RTLConsts, {$ENDIF HAS_UNIT_RTLCONSTS} JvResources, - TypInfo, JvDynControlEngine; + TypInfo, JvDynControlEngine, JvJVCLUtils; {$R *.dfm} @@ -858,15 +858,11 @@ procedure TJvPropertyStoreEditorControl.SetPropertyStore(const Value: TComponent); begin - if FPropertyStore <> nil then - FPropertyStore.RemoveFreeNotification(Self); - FPropertyStore := Value; if csDestroying in Componentstate then Exit; if Assigned(Value) and not Supports(Value, IJvPropertyEditorHandler) then Raise Exception.Create ('TJvPropertyStoreEditorControl.SetPropertyStore : PropertyStore must support IJvPropertyEditorHandler'); - if Assigned(FPropertyStore) then - FPropertyStore.FreeNotification(Self); + ReplaceComponentReference (Self, Value, TComponent(FPropertyStore)); FillTreeView(Value); end; Modified: trunk/jvcl/run/JvRegistryTreeview.pas =================================================================== --- trunk/jvcl/run/JvRegistryTreeview.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvRegistryTreeview.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -66,6 +66,7 @@ procedure CloseRegistry; function FindChildNode(ParentNode: TTreeNode; const Name: string): TTreeNode; + procedure SetListView(const Value: TCustomListView); protected procedure RefreshSubTrees(ANode: TTreeNode; Key, OldKey: string; Level: Integer); virtual; function CanCollapse(Node: TTreeNode): Boolean; override; @@ -105,7 +106,7 @@ property HideSelection; property RegistryKeys: TJvRegKeys read FRegistryKeys write SetRegistryKeys default [hkCurrentUser, hkLocalMachine]; - property ListView: TCustomListView read FListView write FListView; + property ListView: TCustomListView read FListView write SetListView; property RootCaption: string read FRootCaption write SetRootCaption; property DefaultCaption: string read FDefaultCaption write SetDefaultCaption; property DefaultNoValueCaption: string read FDefaultNoValue write SetDefaultNoValue; @@ -156,7 +157,7 @@ implementation uses - JvResources; + JvResources, JvJVCLUtils; {$R JvRegistryTreeView.res} @@ -661,14 +662,15 @@ Operation: TOperation); begin inherited Notification(AComponent, Operation); - if (AComponent = FListView) and (Operation = opRemove) then - begin - if TListViewAccessProtected(FListView).SmallImages = FInternalImages then - TListViewAccessProtected(FListView).SmallImages := nil; - FListView := nil; - end; - if (AComponent = Images) and (Operation = opRemove) then - SetDefaultImages; + if (Operation = opRemove) then + if (AComponent = FListView) then + begin + if TListViewAccessProtected(FListView).SmallImages = FInternalImages then + TListViewAccessProtected(FListView).SmallImages := nil; + FListView := nil; + end + else if (AComponent = Images) then + SetDefaultImages; end; procedure TJvRegistryTreeView.RefreshNode(Node: TTreeNode); @@ -800,6 +802,11 @@ CloseRegistry; end; +procedure TJvRegistryTreeView.SetListView(const Value: TCustomListView); +begin + ReplaceComponentReference (Self, Value, TComponent(FListView)); +end; + {$IFDEF UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); Modified: trunk/jvcl/run/JvRollOut.pas =================================================================== --- trunk/jvcl/run/JvRollOut.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvRollOut.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -1232,14 +1232,7 @@ procedure TJvRollOutAction.SetRollOut(const Value: TJvCustomRollOut); begin - if FRollOut <> Value then - begin - if FRollOut <> nil then - FRollOut.RemoveFreeNotification(Self); - FRollOut := Value; - if FRollOut <> nil then - FRollOut.FreeNotification(Self); - end; + ReplaceComponentReference (Self, Value, TComponent(FRollOut)); end; procedure TJvRollOutAction.UpdateTarget(Target: TObject); Modified: trunk/jvcl/run/JvScheduledEvents.pas =================================================================== --- trunk/jvcl/run/JvScheduledEvents.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvScheduledEvents.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -110,7 +110,6 @@ procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure DoEndEvent(const Event: TJvEventCollectionItem); procedure DoStartEvent(const Event: TJvEventCollectionItem); - function GetAppStorage: TJvCustomAppStorage; procedure SetAppStorage(Value: TJvCustomAppStorage); function GetEvents: TJvEventCollection; procedure InitEvents; @@ -127,7 +126,7 @@ property AutoSave: Boolean read FAutoSave write FAutoSave; property OnStartEvent: TNotifyEvent read FOnStartEvent write FOnStartEvent; property OnEndEvent: TNotifyEvent read FOnEndEvent write FOnEndEvent; - property AppStorage: TJvCustomAppStorage read GetAppStorage write SetAppStorage; + property AppStorage: TJvCustomAppStorage read FAppStorage write SetAppStorage; property AppStoragePath: string read FAppStoragePath write FAppStoragePath; public constructor Create(AOwner: TComponent); override; @@ -514,11 +513,6 @@ inherited Destroy; end; -function TJvCustomScheduledEvents.GetAppStorage: TJvCustomAppStorage; -begin - Result := FAppStorage; -end; - procedure TJvCustomScheduledEvents.SetAppStorage(Value: TJvCustomAppStorage); begin ReplaceComponentReference (Self, Value, TComponent(FAppStorage)); Modified: trunk/jvcl/run/JvSimLogic.pas =================================================================== --- trunk/jvcl/run/JvSimLogic.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvSimLogic.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -342,7 +342,10 @@ implementation +uses + JvJVCLUtils; + {$R JvSimImages.res} // general bin procedure @@ -703,9 +706,10 @@ procedure TJvSIMConnector.Notification(AComponent: TComponent; Operation: TOperation); begin - if (Operation = opRemove) and (AComponent = FromLogic) then - FromLogic := nil; - if (Operation = opRemove) and (AComponent = ToLogic) then + if (Operation = opRemove) then + if (AComponent = FromLogic) then + FromLogic := nil + else if (AComponent = ToLogic) then ToLogic := nil; end; @@ -819,7 +823,7 @@ procedure TJvSIMConnector.SetFromLogic(const Value: TJvLogic); begin - FFromLogic := Value; + ReplaceComponentReference (Self, Value, TComponent(FFromLogic)); end; procedure TJvSIMConnector.SetToGate(const Value: Integer); @@ -829,7 +833,7 @@ procedure TJvSIMConnector.SetToLogic(const Value: TJvLogic); begin - FToLogic := Value; + ReplaceComponentReference (Self, Value, TComponent(FToLogic)); end; procedure TJvSIMConnector.SetFromPoint(const Value: TJvPointX); Modified: trunk/jvcl/run/JvSyncSplitter.pas =================================================================== --- trunk/jvcl/run/JvSyncSplitter.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvSyncSplitter.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -66,7 +66,7 @@ implementation uses - JvTypes, JvResources; + JvTypes, JvResources, JvJVCLUtils; function TJvSyncSplitter.GetResizeStyle: TResizeStyle; begin @@ -75,16 +75,16 @@ procedure TJvSyncSplitter.Notification(AComponent: TComponent; Operation: TOperation); begin + inherited Notification(AComponent, Operation); if (Operation = opRemove) and (AComponent = Partner) then Partner := nil; - inherited Notification(AComponent, Operation); end; procedure TJvSyncSplitter.SetPartner(const Value: TJvSyncSplitter); begin if Value <> Self then begin - FPartner := Value; + ReplaceComponentReference (Self, Value, TComponent(FPartner)); VerifyPartner; end else Modified: trunk/jvcl/run/JvTFGlance.pas =================================================================== --- trunk/jvcl/run/JvTFGlance.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvTFGlance.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -767,7 +767,7 @@ implementation uses - JvConsts, JvResources, JclStrings; + JvConsts, JvResources, JclStrings, JvJVCLUtils; //=== { TJvTFGlanceCell } ==================================================== @@ -2045,24 +2045,8 @@ procedure TJvTFCustomGlance.SetCellPics(Value: TCustomImageList); begin - if Value <> FCellPics then - begin - if Assigned(FCellPics) then - begin - FCellPics.RemoveFreeNotification(Self); - FCellPics.UnregisterChanges(FImageChangeLink); - end; - - FCellPics := Value; - - if Assigned(FCellPics) then - begin - FCellPics.RegisterChanges(FImageChangeLink); - FCellPics.FreeNotification(Self); - end; - + if ReplaceImageListReference (Self, Value, FCellPics, FImageChangeLink) then Invalidate; - end; end; procedure TJvTFCustomGlance.SetCells(Value: TJvTFGlanceCells); @@ -2159,7 +2143,7 @@ FViewer.Notify(Self, sncDisconnectControl); if Assigned(Value) then Value.Notify(Self, sncConnectControl); - FViewer := Value; + ReplaceComponentReference (Self, Value, TComponent(FViewer)); if Assigned(FViewer) then begin FViewer.MoveTo(Cells.Cells[0, 0]); Modified: trunk/jvcl/run/JvTMTimeLine.pas =================================================================== --- trunk/jvcl/run/JvTMTimeLine.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvTMTimeLine.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -926,7 +926,7 @@ begin if Assigned(FImages) then FImages.UnRegisterChanges(FChangeLink); - FImages := Value; + ReplaceComponentReference (Self, Value, TComponent(FImages)); if Assigned(FImages) then FImages.RegisterChanges(FChangeLink); Invalidate; Modified: trunk/jvcl/run/JvThread.pas =================================================================== --- trunk/jvcl/run/JvThread.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvThread.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -222,6 +222,7 @@ function GetCurrentThread: TJvBaseThread; procedure SetConnectedDataComponent(Value: TComponent); procedure SetConnectedDataObject(Value: TObject); + procedure SetThreadDialog(const Value: TJvCustomThreadDialog); procedure ShowThreadDialogForm; protected procedure InternalAfterCreateDialogForm(DialogForm: TJvCustomThreadDialogForm); virtual; @@ -294,7 +295,7 @@ property RunOnCreate: Boolean read FRunOnCreate write FRunOnCreate; property FreeOnTerminate: Boolean read FFreeOnTerminate write FFreeOnTerminate; property Priority: TThreadPriority read FPriority write FPriority default tpNormal; - property ThreadDialog: TJvCustomThreadDialog read FThreadDialog write FThreadDialog; + property ThreadDialog: TJvCustomThreadDialog read FThreadDialog write SetThreadDialog; property AfterCreateDialogForm: TJvCustomThreadDialogFormEvent read FAfterCreateDialogForm write FAfterCreateDialogForm; property BeforeResume: TNotifyEvent read FBeforeResume write FBeforeResume; @@ -326,7 +327,7 @@ implementation uses - JvResources; + JvResources, JvJVCLUtils; var SyncMtx: THandle = 0; @@ -547,9 +548,11 @@ procedure TJvCustomThreadDialogForm.SetConnectedDataComponent(Value: TComponent); begin - FConnectedDataObject := Value; - if Assigned(Value) then - FreeNotification(Value); + if Assigned(FConnectedDataObject) and (FConnectedDataObject is TComponent) then + TComponent(FConnectedDataObject).RemoveFreeNotification(self); + ConnectedDataObject := Value; + if Assigned(FConnectedDataObject) and (FConnectedDataObject is TComponent) then + TComponent(FConnectedDataObject).FreeNotification(self); end; procedure TJvCustomThreadDialogForm.SetConnectedDataObject(Value: TObject); @@ -1145,9 +1148,11 @@ procedure TJvThread.SetConnectedDataComponent(Value: TComponent); begin - FConnectedDataObject := Value; - if Assigned(Value) then - FreeNotification(Value); + if Assigned(FConnectedDataObject) and (FConnectedDataObject is TComponent) then + TComponent(FConnectedDataObject).RemoveFreeNotification(self); + ConnectedDataObject := Value; + if Assigned(FConnectedDataObject) and (FConnectedDataObject is TComponent) then + TComponent(FConnectedDataObject).FreeNotification(self); end; procedure TJvThread.SetConnectedDataObject(Value: TObject); @@ -1157,6 +1162,11 @@ FThreadDialogForm.ConnectedDataObject := Value; end; +procedure TJvThread.SetThreadDialog(const Value: TJvCustomThreadDialog); +begin + ReplaceComponentReference (Self, Value, TComponent(FThreadDialog)); +end; + procedure TJvThread.ShowThreadDialogForm; begin if Assigned (ThreadDialog) and Assigned(FThreadDialogForm) then Modified: trunk/jvcl/run/JvTipOfDay.pas =================================================================== --- trunk/jvcl/run/JvTipOfDay.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvTipOfDay.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -170,7 +170,7 @@ uses SysUtils, Windows, ExtCtrls, Dialogs, JvWndProcHook, - JvButton, JvResources, JvComponent; + JvButton, JvResources, JvComponent, JvJVCLUtils; {$R JvTipOfDay.res} @@ -227,7 +227,7 @@ procedure TJvTipOfDay.SetAppStorage(Value: TJvCustomAppStorage); begin - FAppStorage := Value; + ReplaceComponentReference (Self, Value, TComponent(FAppStorage)); end; procedure TJvTipOfDay.AutoExecute; Modified: trunk/jvcl/run/JvTrayIcon.pas =================================================================== --- trunk/jvcl/run/JvTrayIcon.pas 2009-07-03 15:23:53 UTC (rev 12374) +++ trunk/jvcl/run/JvTrayIcon.pas 2009-07-03 21:03:26 UTC (rev 12375) @@ -102,7 +102,9 @@ function GetApplicationVisible: Boolean; procedure SetApplicationVisible(const Value: Boolean); function GetIconVisible: Boolean; + procedure SetDropDownMenu(const Value: TPopupMenu); procedure SetIconVisible(const Value: Boolean); + procedure SetPopupMenu(const Value: TPopupMenu); protected FActive: Boolean; FIcon: TIcon; @@ -216,8 +218,8 @@ property IconIndex: Integer read FIconIndex write SetIconIndex; property Icons: TCustomImageList read FIcons write SetIcons; property Hint: string read FHint write SetHint; - property DropDownMenu: TPopupMenu read FDropDownMenu write FDropDownMenu; - property PopupMenu: TPopupMenu read FPopupMenu write FPopupMenu; + property DropDownMenu: TPopupMenu read FDropDownMenu write SetDropDownMenu; + property PopupMenu: TPopupMenu read FPopupMenu write SetPopupMenu; property Delay: Cardinal read FDelay write SetDelay default 100; property Snap: Boolean read FSnap write FSnap default False; property SwingForthAndBack: Boolean read FSwingForthAndBack write FSwingForthAndBack default False; @@ -1175,6 +1177,11 @@ end; end; +procedure TJvTrayIcon.SetDropDownMenu(const Value: TPopupMenu); +begin + ReplaceComponentReference (Self, Value, TComponent(FDropDownMenu)); +end; + procedure TJvTrayIcon.SetHint(Value: string); begin //Remove sLineBreak on w98/me as they are not supported @@ -1206,11 +1213,8 @@ procedure TJvTrayIcon.SetIcons(const Value: TCustomImageList); begin - if FIcons <> Value then - begin - FIcons := Value; + if ReplaceComponentReference (Self, Value, TComponent(FIcons)) then IconPropertyChanged; //HEG: New - end; end; procedure TJvTrayIcon.SetIconVisible(const Value: Boolean); @@ -1221,6 +1225,11 @@ HideTrayIcon; end; +procedure TJvTrayIcon.SetPopupMenu(const Value: TPopupMenu); +begin + ReplaceComponentReference (Self, Value, TComponent(FPopupMenu)); +end; + procedure TJvTra... [truncated message content] |
From: <ob...@us...> - 2009-07-08 12:10:20
|
Revision: 12382 http://jvcl.svn.sourceforge.net/jvcl/?rev=12382&view=rev Author: obones Date: 2009-07-08 12:10:15 +0000 (Wed, 08 Jul 2009) Log Message: ----------- Mantis 4635: Reading/Writing wide strings from/to the registry might corrupt data Modified Paths: -------------- trunk/jvcl/run/JvAppRegistryStorage.pas trunk/jvcl/run/JvAppStorage.pas Modified: trunk/jvcl/run/JvAppRegistryStorage.pas =================================================================== --- trunk/jvcl/run/JvAppRegistryStorage.pas 2009-07-08 12:03:16 UTC (rev 12381) +++ trunk/jvcl/run/JvAppRegistryStorage.pas 2009-07-08 12:10:15 UTC (rev 12382) @@ -120,6 +120,8 @@ procedure DoWriteString(const Path: string; const Value: string); override; function DoReadBinary(const Path: string; Buf: TJvBytes; BufSize: Integer): Integer; override; procedure DoWriteBinary(const Path: string; const Buf: TJvBytes; BufSize: Integer); override; + function DoReadWideString(const Path: string; const Default: Widestring): Widestring; override; + procedure DoWriteWideString(const Path: string; const Value: Widestring); override; class function GetStorageOptionsClass: TJvAppStorageOptionsClass; override; public constructor Create(AOwner: TComponent); override; @@ -514,6 +516,33 @@ RegWriteString(FRegHKEY, SubKey, ValueName, Value); end; +function TJvAppRegistryStorage.DoReadWideString(const Path: string; const Default: Widestring): Widestring; +var + SubKey: string; + ValueName: string; +begin + SplitKeyPath(Path, SubKey, ValueName); + try + Result := RegReadWideStringDef(FRegHKEY, SubKey, ValueName, Default); + except + on E: EJclRegistryError do + if StorageOptions.DefaultIfReadConvertError then + Result := Default + else + raise; + end; +end; + +procedure TJvAppRegistryStorage.DoWriteWideString(const Path: string; const Value: Widestring); +var + SubKey: string; + ValueName: string; +begin + SplitKeyPath(Path, SubKey, ValueName); + CreateKey(SubKey); + RegWriteWideString(FRegHKEY, SubKey, ValueName, Value); +end; + function TJvAppRegistryStorage.DoReadBinary(const Path: string; Buf: TJvBytes; BufSize: Integer): Integer; var SubKey: string; Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2009-07-08 12:03:16 UTC (rev 12381) +++ trunk/jvcl/run/JvAppStorage.pas 2009-07-08 12:10:15 UTC (rev 12382) @@ -350,6 +350,14 @@ function DoReadString(const Path: string; const Default: string): string; virtual; abstract; { Stores an string value. } procedure DoWriteString(const Path: string; const Value: string); virtual; abstract; + + { Retrieves the specified widestring value. If the value is not found, the Default will be + returned. If the value is not a string (or can't be converted to a string an EConvertError + exception will be raised. } + function DoReadWideString(const Path: string; const Default: Widestring): Widestring; virtual; + { Stores an widestring value. } + procedure DoWriteWideString(const Path: string; const Value: Widestring); virtual; + { Retrieves the specified value into a buffer. The result holds the number of bytes actually retrieved. } function DoReadBinary(const Path: string; Buf: TJvBytes; BufSize: Integer): Integer; virtual; abstract; @@ -1744,11 +1752,27 @@ Result := DoReadFloat(Path, Default); end; +function TJvCustomAppStorage.DoReadWideString(const Path: string; + const Default: Widestring): Widestring; +begin + {$IFDEF COMPILER12_UP} + Result := UTF8ToWideString(RawByteString(ReadString(Path, string(UTF8Encode(Default))))); + {$ELSE} + Result := UTF8Decode(ReadString(Path, UTF8Encode(Default))); + {$ENDIF COMPILER12_UP} +end; + procedure TJvCustomAppStorage.DoWriteDateTime(const Path: string; Value: TDateTime); begin DoWriteFloat(Path, Value); end; +procedure TJvCustomAppStorage.DoWriteWideString(const Path: string; + const Value: Widestring); +begin + DoWriteString(Path,string(UTF8Encode(Value))); +end; + procedure TJvCustomAppStorage.DoError(const msg: string); begin if Assigned(OnError) then @@ -3223,17 +3247,13 @@ function TJvCustomAppStorage.ReadWideString(const Path: string; const Default: WideString = ''): WideString; begin - {$IFDEF COMPILER12_UP} - Result := UTF8ToWideString(RawByteString(ReadString(Path, string(UTF8Encode(Default))))); - {$ELSE} - Result := UTF8Decode(ReadString(Path, UTF8Encode(Default))); - {$ENDIF COMPILER12_UP} + Result := DoReadWideString(Path,Default); end; procedure TJvCustomAppStorage.WriteWideString(const Path: string; const Value: WideString); begin - WriteString(Path, string(UTF8Encode(Value))); + DoWriteWideString(Path,Value); end; {$ENDIF COMPILER6_UP} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2009-07-09 08:42:09
|
Revision: 12388 http://jvcl.svn.sourceforge.net/jvcl/?rev=12388&view=rev Author: obones Date: 2009-07-09 08:42:03 +0000 (Thu, 09 Jul 2009) Log Message: ----------- GetTempDir in JvJCLUtils.pas is no longer, use PathGetTempPath from JclFileUtils Modified Paths: -------------- trunk/jvcl/run/JvAppStorage.pas trunk/jvcl/run/JvInterpreter_JvUtils.pas trunk/jvcl/run/JvJCLUtils.pas Modified: trunk/jvcl/run/JvAppStorage.pas =================================================================== --- trunk/jvcl/run/JvAppStorage.pas 2009-07-09 08:37:24 UTC (rev 12387) +++ trunk/jvcl/run/JvAppStorage.pas 2009-07-09 08:42:03 UTC (rev 12388) @@ -3710,7 +3710,7 @@ {$ENDIF MSWINDOWS} {$IFDEF UNIX} flTemp: - FFullFileName := PathAddSeparator(GetTempDir) + NameOnly; + FFullFileName := PathAddSeparator(PathGetTempPath) + NameOnly; flUserFolder: FFullFileName := PathAddSeparator(GetEnvironmentVariable('HOME')) + RelPathName; {$ENDIF UNIX} Modified: trunk/jvcl/run/JvInterpreter_JvUtils.pas =================================================================== --- trunk/jvcl/run/JvInterpreter_JvUtils.pas 2009-07-09 08:37:24 UTC (rev 12387) +++ trunk/jvcl/run/JvInterpreter_JvUtils.pas 2009-07-09 08:42:03 UTC (rev 12388) @@ -619,13 +619,6 @@ Value := DefStr(Args.Values[0], Args.Values[1]); end; -{ function GetTempDir: string; } - -procedure JvInterpreter_GetTempDir(var Value: Variant; Args: TJvInterpreterArgs); -begin - Value := GetTempDir; -end; - { function GenTempFileName(FileName: string): string; } procedure JvInterpreter_GenTempFileName(var Value: Variant; Args: TJvInterpreterArgs); @@ -1036,7 +1029,6 @@ AddFunction(cJvStrUtil, 'HasAnyChar', JvInterpreter_HasAnyChar, 2, [varString, varString], varEmpty); AddFunction(cJvStrUtil, 'CountOfChar', JvInterpreter_CountOfChar, 2, [varEmpty, varString], varEmpty); AddFunction(cJvStrUtil, 'DefStr', JvInterpreter_DefStr, 2, [varString, varString], varEmpty); - AddFunction(cJvUtils, 'GetTempDir', JvInterpreter_GetTempDir, 0, [varEmpty], varEmpty); AddFunction(cJvUtils, 'GenTempFileName', JvInterpreter_GenTempFileName, 1, [varString], varEmpty); AddFunction(cJvUtils, 'GenTempFileNameExt', JvInterpreter_GenTempFileNameExt, 2, [varString, varString], varEmpty); AddFunction(cJvUtils, 'ClearDir', JvInterpreter_ClearDir, 1, [varString], varEmpty); Modified: trunk/jvcl/run/JvJCLUtils.pas =================================================================== --- trunk/jvcl/run/JvJCLUtils.pas 2009-07-09 08:37:24 UTC (rev 12387) +++ trunk/jvcl/run/JvJCLUtils.pas 2009-07-09 08:42:03 UTC (rev 12388) @@ -297,8 +297,6 @@ DefaultCaseSensitivity = True; {$ENDIF UNIX} -{ GetTempDir returns Windows temporary folder name } -function GetTempDir: string; { GenTempFileName returns temporary file name on drive, there FileName is placed } function GenTempFileName(FileName: string): string; @@ -6791,7 +6789,7 @@ STempDir: TFileName; Res: Integer; begin - TempDir := GetTempDir; + TempDir := PathGetTempPath; if FileName <> '' then begin if Length(FileName) < 4 then @@ -6834,26 +6832,6 @@ Result := ChangeFileExt(GenTempFileName(FileName), FileExt); end; -function GetTempDir: string; -{$IFDEF CLR} -begin - Result := Path.GetTempPath; -end; -{$ELSE} -{$IFDEF MSWINDOWS} -begin - Result := PathGetTempPath; -end; -{$ENDIF MSWINDOWS} -{$IFDEF UNIX} -begin - Result := ExtractFileDir(GetTempFileName('')); - if Result = '' then - Result := '/tmp'; // hard coded -end; -{$ENDIF UNIX} -{$ENDIF CLR} - function ClearDir(const Dir: string): Boolean; var SearchRec: TSearchRec; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jfu...@us...> - 2009-07-22 20:06:36
|
Revision: 12406 http://jvcl.svn.sourceforge.net/jvcl/?rev=12406&view=rev Author: jfudickar Date: 2009-07-22 20:06:32 +0000 (Wed, 22 Jul 2009) Log Message: ----------- Mantis 0004870: Wrong background painting in TjvParameterList when using DevExpress skins library Modified Paths: -------------- trunk/jvcl/run/JvDynControlEngineDBTools.pas trunk/jvcl/run/JvParameterList.pas trunk/jvcl/run/JvParameterListParameter.pas Modified: trunk/jvcl/run/JvDynControlEngineDBTools.pas =================================================================== --- trunk/jvcl/run/JvDynControlEngineDBTools.pas 2009-07-22 07:47:09 UTC (rev 12405) +++ trunk/jvcl/run/JvDynControlEngineDBTools.pas 2009-07-22 20:06:32 UTC (rev 12406) @@ -398,6 +398,7 @@ FScrollBox.Align := alClient; FScrollBox.BorderStyle := bsNone; FScrollBox.AutoScroll := True; + FScrollBox.ParentBackground := True; FForm.Constraints := ArrangeConstraints; ArrangePanel := TJvPanel.Create(FForm); ArrangePanel.Align := alTop; Modified: trunk/jvcl/run/JvParameterList.pas =================================================================== --- trunk/jvcl/run/JvParameterList.pas 2009-07-22 07:47:09 UTC (rev 12405) +++ trunk/jvcl/run/JvParameterList.pas 2009-07-22 20:06:32 UTC (rev 12406) @@ -1827,6 +1827,7 @@ ScrollBox.Parent := ParameterParent; ScrollBox.AutoScroll := False; ScrollBox.BorderStyle := bsNone; + ScrollBox.ParentBackground := True; {$IFDEF COMPILER6_UP} ScrollBox.BevelInner := bvNone; ScrollBox.BevelOuter := bvNone; Modified: trunk/jvcl/run/JvParameterListParameter.pas =================================================================== --- trunk/jvcl/run/JvParameterListParameter.pas 2009-07-22 07:47:09 UTC (rev 12405) +++ trunk/jvcl/run/JvParameterListParameter.pas 2009-07-22 20:06:32 UTC (rev 12406) @@ -2527,6 +2527,7 @@ Scrollbox.Align := alClient; ScrollBox.AutoScroll := False; ScrollBox.BorderStyle := bsNone; + ScrollBox.ParentBackground := True; Panel := TJvPanel.Create(ParameterParent.Owner); Panel.Name := GenerateUniqueComponentName(ParameterParent.Owner, Panel, GetParameterName + '_' + Pages[i]); Panel.ArrangeSettings := ArrangeSettings; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2009-08-07 09:44:51
|
Revision: 12429 http://jvcl.svn.sourceforge.net/jvcl/?rev=12429&view=rev Author: obones Date: 2009-08-07 09:44:44 +0000 (Fri, 07 Aug 2009) Log Message: ----------- Mantis 4882: OwnerDrawFixed means that ItemHeight must not be recalculated Modified Paths: -------------- trunk/jvcl/run/JvDBUtils.pas trunk/jvcl/run/JvListBox.pas Modified: trunk/jvcl/run/JvDBUtils.pas =================================================================== --- trunk/jvcl/run/JvDBUtils.pas 2009-08-07 09:17:26 UTC (rev 12428) +++ trunk/jvcl/run/JvDBUtils.pas 2009-08-07 09:44:44 UTC (rev 12429) @@ -1,4 +1,4 @@ -{----------------------------------------------------------------------------- +{----------------------------------------------------------------------------- The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at @@ -483,7 +483,7 @@ var S: string; begin - if Field.DataType = ftString then + if Field.DataType in [ftString{$IFDEF COMPILER12_UP}, ftWideString{$ENDIF}] then begin if Value = Null then Result := Field.IsNull @@ -598,7 +598,7 @@ Field := DataSet.FindField(FieldName); if Field = nil then Exit; - if Field.DataType = ftString then + if Field.DataType in [ftString{$IFDEF COMPILER12_UP}, ftWideString{$ENDIF}] then begin DataSet.DisableControls; BookMk := DataSet.GetBookmark; @@ -856,7 +856,7 @@ FieldValue := ''; DateValue := NullDate; Exact := Exact or not (FieldType in - [ftString, ftDate, ftTime, ftDateTime]); + [ftString, {$IFDEF COMPILER12_UP}ftWideString,{$ENDIF} ftDate, ftTime, ftDateTime]); if FieldType in [ftDate, ftTime, ftDateTime] then begin DateValue := StrToDateDef(Value, NullDate); @@ -870,7 +870,7 @@ if not (Exact or EmptyValue) then FieldValue := ReplaceStr(ReplaceStr(StrMaskSQL(FieldValue), '*', '%'), '?', '_'); - if FieldType = ftString then + if FieldType in [ftString{$IFDEF COMPILER12_UP}, ftWideString{$ENDIF}] then FieldValue := '''' + FieldValue + ''''; end; LogicOperator := Operator; @@ -880,7 +880,7 @@ LogicOperator := '=' else begin - if FieldType = ftString then + if FieldType in [ftString{$IFDEF COMPILER12_UP}, ftWideString{$ENDIF}] then LogicOperator := 'LIKE' else LogicOperator := '>='; @@ -905,7 +905,7 @@ S, Esc: string; begin Esc := ''; - if not Exact and (FieldType = ftString) then + if not Exact and (FieldType in [ftString{$IFDEF COMPILER12_UP}, ftWideString{$ENDIF}]) then begin S := ReplaceStr(ReplaceStr(ReplaceStr(Value, '/', '//'), '_', '/_'), '%', '/%'); Modified: trunk/jvcl/run/JvListBox.pas =================================================================== --- trunk/jvcl/run/JvListBox.pas 2009-08-07 09:17:26 UTC (rev 12428) +++ trunk/jvcl/run/JvListBox.pas 2009-08-07 09:44:44 UTC (rev 12429) @@ -800,7 +800,7 @@ begin inherited FontChanged; Canvas.Font := Font; - if Style <> lbStandard then + if [Style] * [lbStandard, lbOwnerDrawFixed] = [] then ItemHeight := CanvasMaxTextHeight(Canvas) + CShowFocusRect[ShowFocusRect]; RemeasureAll; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ob...@us...> - 2009-08-07 11:48:38
|
Revision: 12431 http://jvcl.svn.sourceforge.net/jvcl/?rev=12431&view=rev Author: obones Date: 2009-08-07 11:48:25 +0000 (Fri, 07 Aug 2009) Log Message: ----------- NewStyleControls is always True as we target Win98 and later. As a result, we can remove its usage to make the code clearer. Modified Paths: -------------- trunk/jvcl/run/JvBDEExceptionForm.pas trunk/jvcl/run/JvBaseEdits.pas trunk/jvcl/run/JvCalendar.pas trunk/jvcl/run/JvCombobox.pas trunk/jvcl/run/JvCustomItemViewer.pas trunk/jvcl/run/JvDBControls.pas trunk/jvcl/run/JvDBLookup.pas trunk/jvcl/run/JvDBLookupComboEdit.pas trunk/jvcl/run/JvDBLookupTreeView.pas trunk/jvcl/run/JvDialButton.pas trunk/jvcl/run/JvDualList.pas trunk/jvcl/run/JvDualListForm.pas trunk/jvcl/run/JvEditorCommon.pas trunk/jvcl/run/JvExceptionForm.pas trunk/jvcl/run/JvGradientCaption.pas trunk/jvcl/run/JvLabel.pas trunk/jvcl/run/JvMenus.pas trunk/jvcl/run/JvOutlookBar.pas trunk/jvcl/run/JvPrvwDoc.pas trunk/jvcl/run/JvSpeedButton.pas trunk/jvcl/run/JvSpeedbar.pas trunk/jvcl/run/JvSpeedbarSetupForm.pas trunk/jvcl/run/JvSpin.pas trunk/jvcl/run/JvTFDays.pas trunk/jvcl/run/JvTFGlance.pas trunk/jvcl/run/JvToolEdit.pas trunk/jvcl/run/JvxCheckListBox.pas Modified: trunk/jvcl/run/JvBDEExceptionForm.pas =================================================================== --- trunk/jvcl/run/JvBDEExceptionForm.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvBDEExceptionForm.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -163,10 +163,7 @@ FPrevOnException(Sender, E); end else - if NewStyleControls then - Application.ShowException(E) - else - MessageDlg(E.Message + '.', mtError, [mbOk], 0); + Application.ShowException(E); end; except { ignore any exceptions } Modified: trunk/jvcl/run/JvBaseEdits.pas =================================================================== --- trunk/jvcl/run/JvBaseEdits.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvBaseEdits.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -925,7 +925,7 @@ procedure TJvCustomNumEdit.EnabledChanged; begin inherited EnabledChanged; - if NewStyleControls and not FFocused then + if not FFocused then Invalidate; end; Modified: trunk/jvcl/run/JvCalendar.pas =================================================================== --- trunk/jvcl/run/JvCalendar.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvCalendar.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -763,7 +763,7 @@ // the same constant for MCS_NOTODAY as IE4 does for MCS_NOTODAYCIRCLE ... Style := Style or BorderStyles[FBorderStyle] or MultiSelects[FMultiSelect] or NoCircles[FAppearance.ShowToday] or Weeks[FAppearance.WeekNumbers] or MCS_DAYSTATE; - if NewStyleControls and (FBorderStyle = bsSingle) then + if FBorderStyle = bsSingle then begin Style := Style and not WS_BORDER; ExStyle := Params.ExStyle or WS_EX_CLIENTEDGE; Modified: trunk/jvcl/run/JvCombobox.pas =================================================================== --- trunk/jvcl/run/JvCombobox.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvCombobox.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -643,21 +643,11 @@ GetTextMetrics(DC, Metrics); SelectObject(DC, SaveFont); ReleaseDC(HWND_DESKTOP, DC); - if NewStyleControls then - begin - if Ctl3D then - I := 8 - else - I := 6; - I := GetSystemMetrics(SM_CYBORDER) * I; - end + if Ctl3D then + I := 8 else - begin - I := SysMetrics.tmHeight; - if I > Metrics.tmHeight then - I := Metrics.tmHeight; - I := I div 4 + GetSystemMetrics(SM_CYBORDER) * 4; - end; + I := 6; + I := GetSystemMetrics(SM_CYBORDER) * I; Height := Metrics.tmHeight + I; end; Modified: trunk/jvcl/run/JvCustomItemViewer.pas =================================================================== --- trunk/jvcl/run/JvCustomItemViewer.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvCustomItemViewer.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -910,7 +910,7 @@ procedure TJvCustomItemViewer.CMCtl3DChanged(var Msg: TMessage); begin - if NewStyleControls and (FBorderStyle = bsSingle) then + if FBorderStyle = bsSingle then RecreateWnd; inherited; end; @@ -966,7 +966,7 @@ with Params do begin Style := Style or BorderStyles[BorderStyle]; - if NewStyleControls and Ctl3D and (BorderStyle = bsSingle) then + if Ctl3D and (BorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; Modified: trunk/jvcl/run/JvDBControls.pas =================================================================== --- trunk/jvcl/run/JvDBControls.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvDBControls.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -1112,7 +1112,7 @@ with FCanvas do begin R := ClientRect; - if not (NewStyleControls and Ctl3D) and (BorderStyle = bsSingle) then + if not Ctl3D and (BorderStyle = bsSingle) then begin Brush.Color := clWindowFrame; FrameRect(R); @@ -1167,38 +1167,15 @@ I: Integer; SysMetrics, Metrics: TTextMetric; begin - if NewStyleControls then - begin - if BorderStyle = bsNone then - I := 0 - else - if Ctl3D then - I := 1 - else - I := 2; - Result.X := SendMessage(Handle, EM_GETMARGINS, 0, 0) and $0000FFFF + I; - Result.Y := I; - end + if BorderStyle = bsNone then + I := 0 else - begin - if BorderStyle = bsNone then - I := 0 - else - begin - DC := GetDC(HWND_DESKTOP); - GetTextMetrics(DC, SysMetrics); - SaveFont := SelectObject(DC, Font.Handle); - GetTextMetrics(DC, Metrics); - SelectObject(DC, SaveFont); - ReleaseDC(HWND_DESKTOP, DC); - I := SysMetrics.tmHeight; - if I > Metrics.tmHeight then - I := Metrics.tmHeight; - I := I div 4; - end; - Result.X := I; - Result.Y := I; - end; + if Ctl3D then + I := 1 + else + I := 2; + Result.X := SendMessage(Handle, EM_GETMARGINS, 0, 0) and $0000FFFF + I; + Result.Y := I; end; function TJvDBMaskEdit.ExecuteAction(Action: TBasicAction): Boolean; Modified: trunk/jvcl/run/JvDBLookup.pas =================================================================== --- trunk/jvcl/run/JvDBLookup.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvDBLookup.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -791,10 +791,7 @@ LookupStyle = [csOpaque]; begin inherited Create(AOwner); - if NewStyleControls then - ControlStyle := LookupStyle - else - ControlStyle := LookupStyle + [csFramed]; + ControlStyle := LookupStyle; IncludeThemeStyle(Self, [csNeedsBorderPaint]); ParentColor := False; @@ -1637,7 +1634,7 @@ begin Style := Style or WS_VSCROLL; if FBorderStyle = bsSingle then - if NewStyleControls and Ctl3D then + if Ctl3D then ExStyle := ExStyle or WS_EX_CLIENTEDGE else Style := Style or WS_BORDER; @@ -2228,7 +2225,7 @@ procedure TJvDBLookupList.CMCtl3DChanged(var Msg: TMessage); begin - if NewStyleControls and (FBorderStyle = bsSingle) then + if FBorderStyle = bsSingle then begin RecreateWnd; if not (csReading in ComponentState) then @@ -2447,7 +2444,7 @@ begin inherited CreateParams(Params); with Params do - if NewStyleControls and Ctl3D then + if Ctl3D then ExStyle := ExStyle or WS_EX_CLIENTEDGE else Style := Style or WS_BORDER; @@ -3175,7 +3172,7 @@ Canvas.Brush.Color := clHighlight; end else - if not Enabled and NewStyleControls then + if not Enabled then Canvas.Font.Color := clGrayText; AText := inherited Text; Alignment := FAlignment; @@ -3377,12 +3374,9 @@ procedure TJvDBLookupCombo.CMCtl3DChanged(var Msg: TMessage); begin - if NewStyleControls then - begin - RecreateWnd; - if not (csReading in ComponentState) and (Height < GetMinHeight) then - Height := GetMinHeight; - end; + RecreateWnd; + if not (csReading in ComponentState) and (Height < GetMinHeight) then + Height := GetMinHeight; inherited; end; Modified: trunk/jvcl/run/JvDBLookupComboEdit.pas =================================================================== --- trunk/jvcl/run/JvDBLookupComboEdit.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvDBLookupComboEdit.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -490,7 +490,7 @@ with FCanvas do begin R := ClientRect; - if not (NewStyleControls and Ctl3D) and (BorderStyle = bsSingle) then + if not Ctl3D and (BorderStyle = bsSingle) then begin Brush.Color := clWindowFrame; FrameRect(R); @@ -545,38 +545,15 @@ I: Integer; SysMetrics, Metrics: TTextMetric; begin - if NewStyleControls then - begin - if BorderStyle = bsNone then - I := 0 - else - if Ctl3D then - I := 1 - else - I := 2; - Result.X := SendMessage(Handle, EM_GETMARGINS, 0, 0) and $0000FFFF + I; - Result.Y := I; - end + if BorderStyle = bsNone then + I := 0 else - begin - if BorderStyle = bsNone then - I := 0 - else - begin - DC := GetDC(HWND_DESKTOP); - GetTextMetrics(DC, SysMetrics); - SaveFont := SelectObject(DC, Font.Handle); - GetTextMetrics(DC, Metrics); - SelectObject(DC, SaveFont); - ReleaseDC(HWND_DESKTOP, DC); - I := SysMetrics.tmHeight; - if I > Metrics.tmHeight then - I := Metrics.tmHeight; - I := I div 4; - end; - Result.X := I; - Result.Y := I; - end; + if Ctl3D then + I := 1 + else + I := 2; + Result.X := SendMessage(Handle, EM_GETMARGINS, 0, 0) and $0000FFFF + I; + Result.Y := I; end; function TJvDBLookupComboEdit.ExecuteAction(Action: TBasicAction): Boolean; Modified: trunk/jvcl/run/JvDBLookupTreeView.pas =================================================================== --- trunk/jvcl/run/JvDBLookupTreeView.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvDBLookupTreeView.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -520,10 +520,7 @@ constructor TJvDBLookupControl.Create(AOwner: TComponent); begin inherited Create(AOwner); - if NewStyleControls then - ControlStyle := [csOpaque] - else - ControlStyle := [csOpaque, csFramed]; + ControlStyle := [csOpaque]; IncludeThemeStyle(Self, [csNeedsBorderPaint]); ParentColor := False; @@ -885,7 +882,7 @@ begin inherited CreateParams(Params); with Params do - if NewStyleControls and Ctl3D then + if Ctl3D then ExStyle := ExStyle or WS_EX_CLIENTEDGE else Style := Style or WS_BORDER; @@ -918,7 +915,7 @@ end {added by zelen} else - if not Enabled and NewStyleControls then + if not Enabled then Canvas.Font.Color := clGrayText; {/added by zelen} if (csPaintCopy in ControlState) and (FDataField <> nil) then @@ -1262,11 +1259,8 @@ procedure TJvDBLookupTreeViewCombo.CMCtl3DChanged(var Msg: TMessage); begin - if NewStyleControls then - begin - RecreateWnd; - Height := 0; - end; + RecreateWnd; + Height := 0; inherited; end; @@ -1464,7 +1458,7 @@ inherited CreateParams(Params); with Params do if FBorderStyle = bsSingle then - if NewStyleControls and Ctl3D then + if Ctl3D then ExStyle := ExStyle or WS_EX_CLIENTEDGE else Style := Style or WS_BORDER; Modified: trunk/jvcl/run/JvDialButton.pas =================================================================== --- trunk/jvcl/run/JvDialButton.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvDialButton.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -1146,7 +1146,7 @@ begin inherited CreateParams(Params); Params.Style := Params.Style or BorderStyles[FBorderStyle]; - if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then + if Ctl3D and (FBorderStyle = bsSingle) then begin Params.Style := Params.Style and not WS_BORDER; Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE; Modified: trunk/jvcl/run/JvDualList.pas =================================================================== --- trunk/jvcl/run/JvDualList.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvDualList.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -201,8 +201,7 @@ Form.SrcList.ScrollBars := FScrollBars; Form.DstList.ScrollBars := FScrollBars; - if NewStyleControls then - Form.Font.Style := []; + Form.Font.Style := []; Form.ShowHelp := Self.ShowHelp; Form.SrcList.Sorted := Sorted; Form.DstList.Sorted := Sorted; Modified: trunk/jvcl/run/JvDualListForm.pas =================================================================== --- trunk/jvcl/run/JvDualListForm.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvDualListForm.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -248,8 +248,7 @@ OkBtn.Caption := SOKButton; CancelBtn.Caption := SCancelButton; HelpBtn.Caption := SHelpButton; - if NewStyleControls then - Font.Style := []; + Font.Style := []; end; procedure TJvDualListForm.FormResize(Sender: TObject); Modified: trunk/jvcl/run/JvEditorCommon.pas =================================================================== --- trunk/jvcl/run/JvEditorCommon.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvEditorCommon.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -3192,7 +3192,7 @@ with Params do begin Style := Style or BorderStyles[FBorderStyle] or ScrollStyles[FScrollBars]; - if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then + if Ctl3D and (FBorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; Modified: trunk/jvcl/run/JvExceptionForm.pas =================================================================== --- trunk/jvcl/run/JvExceptionForm.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvExceptionForm.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -129,10 +129,7 @@ end else begin - if NewStyleControls then - Application.ShowException(E) - else - MessageDlg(E.Message + '.', mtError, [mbOk], 0); + Application.ShowException(E); end; except { ignore any exceptions } Modified: trunk/jvcl/run/JvGradientCaption.pas =================================================================== --- trunk/jvcl/run/JvGradientCaption.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvGradientCaption.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -736,7 +736,7 @@ begin Result := FActive; if not (csDesigning in ComponentState) then - Result := Result and NewStyleControls and (Owner is TCustomForm); + Result := Result and (Owner is TCustomForm); end; procedure TJvGradientCaption.SetActive(Value: Boolean); Modified: trunk/jvcl/run/JvLabel.pas =================================================================== --- trunk/jvcl/run/JvLabel.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvLabel.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -641,7 +641,7 @@ ColorShadow := FShadowColor; if not Enabled then begin - if (FShadowSize = 0) and NewStyleControls then + if FShadowSize = 0 then begin PosShadow := spRightBottom; SizeShadow := 1; Modified: trunk/jvcl/run/JvMenus.pas =================================================================== --- trunk/jvcl/run/JvMenus.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvMenus.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -885,21 +885,15 @@ var NCMetrics: TNonCLientMetrics; begin - if NewStyleControls then + NCMetrics.cbSize := SizeOf(TNonCLientMetrics); + if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NCMetrics, 0) then begin - NCMetrics.cbSize := SizeOf(TNonCLientMetrics); - if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NCMetrics, 0) then - begin - AFont.Handle := CreateFontIndirect(NCMetrics.lfMenuFont); - Exit; - end; + AFont.Handle := CreateFontIndirect(NCMetrics.lfMenuFont); + Exit; end; with AFont do begin - if NewStyleControls then - Name := 'MS Sans Serif' - else - Name := 'System'; + Name := 'MS Sans Serif'; Size := 8; Color := clMenuText; Style := []; @@ -2017,9 +2011,9 @@ GrayColor := clGrayText else GrayColor := clBtnShadow; - IsHighlight := NewStyleControls and ((not (mdSelected in FState)) or + IsHighlight := (not (mdSelected in FState)) or (GetNearestColor(Canvas.Handle, ColorToRGB(clGrayText)) = - GetNearestColor(Canvas.Handle, ColorToRGB(clHighlight)))); + GetNearestColor(Canvas.Handle, ColorToRGB(clHighlight))); if Bitmap.Monochrome then begin SaveColor := Canvas.Brush.Color; @@ -2591,10 +2585,8 @@ function TJvCustomMenuItemPainter.GetDrawHighlight: Boolean; begin - Result := NewStyleControls and - (not (mdSelected in FState) or - (GetNearestColor(Canvas.Handle, ColorToRGB(clGrayText)) = GetNearestColor(Canvas.Handle, ColorToRGB(clHighlight))) - ); + Result := not (mdSelected in FState) or + (GetNearestColor(Canvas.Handle, ColorToRGB(clGrayText)) = GetNearestColor(Canvas.Handle, ColorToRGB(clHighlight))); end; function TJvCustomMenuItemPainter.GetGrayColor: TColor; @@ -2768,17 +2760,9 @@ LineTop: Integer; begin LineTop := (ARect.Top + ARect.Bottom) div 2 - 1; - if NewStyleControls then - begin - Canvas.Pen.Width := 1; - MenuLine(Canvas, clBtnShadow, ARect.Left - 1, LineTop, ARect.Right, LineTop); - MenuLine(Canvas, clBtnHighlight, ARect.Left, LineTop + 1, ARect.Right, LineTop + 1); - end - else - begin - Canvas.Pen.Width := 2; - MenuLine(Canvas, clMenuText, ARect.Left, LineTop + 1, ARect.Right, LineTop + 1); - end; + Canvas.Pen.Width := 1; + MenuLine(Canvas, clBtnShadow, ARect.Left - 1, LineTop, ARect.Right, LineTop); + MenuLine(Canvas, clBtnHighlight, ARect.Left, LineTop + 1, ARect.Right, LineTop + 1); end; procedure TJvCustomMenuItemPainter.DrawImageBackground(ARect: TRect); @@ -3031,7 +3015,7 @@ function TJvBtnMenuItemPainter.GetDrawHighlight: Boolean; begin - Result := NewStyleControls; + Result := True; end; function TJvBtnMenuItemPainter.GetGrayColor: TColor; @@ -3103,10 +3087,8 @@ function TJvOfficeMenuItemPainter.GetDrawHighlight: Boolean; begin - Result := NewStyleControls and - (not (mdSelected in FState) or (not IsPopup(FItem)) or - (GetNearestColor(Canvas.Handle, ColorToRGB(clGrayText)) = GetNearestColor(Canvas.Handle, ColorToRGB(clHighlight))) - ); + Result := not (mdSelected in FState) or (not IsPopup(FItem)) or + (GetNearestColor(Canvas.Handle, ColorToRGB(clGrayText)) = GetNearestColor(Canvas.Handle, ColorToRGB(clHighlight))); end; procedure TJvOfficeMenuItemPainter.UpdateFieldsFromMenu; @@ -3743,10 +3725,8 @@ function TJvXPMenuItemPainter.GetDrawHighlight: Boolean; begin - Result := NewStyleControls and - (not (mdSelected in FState) or (not IsPopup(FItem)) or - (GetNearestColor(Canvas.Handle, ColorToRGB(clGrayText)) = GetNearestColor(Canvas.Handle, ColorToRGB(clHighlight))) - ); + Result := not (mdSelected in FState) or (not IsPopup(FItem)) or + (GetNearestColor(Canvas.Handle, ColorToRGB(clGrayText)) = GetNearestColor(Canvas.Handle, ColorToRGB(clHighlight))); end; function TJvXPMenuItemPainter.GetItemScreenRect(ParentItem: TMenuItem; Modified: trunk/jvcl/run/JvOutlookBar.pas =================================================================== --- trunk/jvcl/run/JvOutlookBar.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvOutlookBar.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -1519,7 +1519,7 @@ with Params do begin Style := Style or BorderStyles[FBorderStyle]; - if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then + if Ctl3D and (FBorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; Modified: trunk/jvcl/run/JvPrvwDoc.pas =================================================================== --- trunk/jvcl/run/JvPrvwDoc.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvPrvwDoc.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -1011,7 +1011,7 @@ procedure TJvCustomPreviewControl.CMCtl3DChanged(var Msg: TMessage); begin - if NewStyleControls and (FBorderStyle = bsSingle) then + if FBorderStyle = bsSingle then RecreateWnd; inherited; end; @@ -1024,7 +1024,7 @@ with Params do begin Style := Style or BorderStyles[FBorderStyle]; - if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then + if Ctl3D and (FBorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; Modified: trunk/jvcl/run/JvSpeedButton.pas =================================================================== --- trunk/jvcl/run/JvSpeedButton.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvSpeedButton.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -584,7 +584,7 @@ begin Result := Client; - NewStyle := (Style = bsNew) or (NewStyleControls and (Style = bsAutoDetect)); + NewStyle := (Style = bsNew) or (Style = bsAutoDetect); ShadowColor := GetShadowColor(AColor); // Honeymic HighlightColor := GetHighlightColor(AColor); // Honeymic Modified: trunk/jvcl/run/JvSpeedbar.pas =================================================================== --- trunk/jvcl/run/JvSpeedbar.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvSpeedbar.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -1554,7 +1554,7 @@ procedure TJvSpeedBar.WriteDesignStyle(Writer: TWriter); begin - Writer.WriteBoolean(NewStyleControls); + Writer.WriteBoolean(True); end; procedure TJvSpeedBar.ReadSections(Reader: TReader); @@ -3020,8 +3020,7 @@ begin Style := WS_POPUP or WS_DISABLED; WindowClass.Style := WindowClass.Style or CS_SAVEBITS; - if NewStyleControls then - ExStyle := WS_EX_TOOLWINDOW; + ExStyle := WS_EX_TOOLWINDOW; end; end; Modified: trunk/jvcl/run/JvSpeedbarSetupForm.pas =================================================================== --- trunk/jvcl/run/JvSpeedbarSetupForm.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvSpeedbarSetupForm.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -377,8 +377,7 @@ FSpeedbar := nil; FDrag := False; CloseBtn.Default := False; - if NewStyleControls then - Font.Style := []; + Font.Style := []; { Load string resources } CloseBtn.Caption := SOKButton; HelpBtn.Caption := SHelpButton; Modified: trunk/jvcl/run/JvSpin.pas =================================================================== --- trunk/jvcl/run/JvSpin.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvSpin.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -955,14 +955,7 @@ function TJvCustomSpinEdit.GetButtonKind: TSpinButtonKind; begin - if NewStyleControls then - Result := FButtonKind - else - begin - Result := bkDiagonal; - if Assigned(FButton) and (FButton.ButtonStyle = sbsClassic) then - Result := bkClassic; - end; + Result := FButtonKind; end; function TJvCustomSpinEdit.GetButtonWidth: Integer; @@ -1190,7 +1183,7 @@ else if FButton <> nil then begin { bkDiagonal } - if NewStyleControls and Ctl3D and (BorderStyle = bsSingle) then + if Ctl3D and (BorderStyle = bsSingle) then if FButtonKind = bkClassic then R := Bounds(Width - DefBtnWidth - 4, -1, DefBtnWidth, Height - 3) else @@ -1202,7 +1195,7 @@ R := Bounds(Width - Height, 0, Height, Height); if BiDiMode = bdRightToLeft then begin - if NewStyleControls and Ctl3D and (BorderStyle = bsSingle) then + if Ctl3D and (BorderStyle = bsSingle) then begin R.Left := -1; R.Right := Height - 4; Modified: trunk/jvcl/run/JvTFDays.pas =================================================================== --- trunk/jvcl/run/JvTFDays.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvTFDays.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -4278,7 +4278,7 @@ procedure TJvTFDays.CMCtl3DChanged(var Msg: TMessage); begin - if NewStyleControls and (FBorderStyle = bsSingle) then + if FBorderStyle = bsSingle then RecreateWnd; inherited; end; @@ -4865,7 +4865,7 @@ with Params do begin Style := Style or BorderStyles[FBorderStyle] or WS_CLIPCHILDREN; - if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then + if Ctl3D and (FBorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; Modified: trunk/jvcl/run/JvTFGlance.pas =================================================================== --- trunk/jvcl/run/JvTFGlance.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvTFGlance.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -1478,7 +1478,7 @@ procedure TJvTFCustomGlance.CMCtl3DChanged(var Msg: TMessage); begin - if NewStyleControls and (FBorderStyle = bsSingle) then + if FBorderStyle = bsSingle then RecreateWnd; inherited; end; @@ -1491,7 +1491,7 @@ with Params do begin Style := Style or BorderStyles[FBorderStyle] or WS_CLIPCHILDREN; - if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then + if Ctl3D and (FBorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; Modified: trunk/jvcl/run/JvToolEdit.pas =================================================================== --- trunk/jvcl/run/JvToolEdit.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvToolEdit.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -1319,41 +1319,18 @@ ed: TCustomEditAccessProtected; begin ed := TCustomEditAccessProtected(Editor); - if NewStyleControls then - begin - if ed.BorderStyle = bsNone then - I := 0 - else - if ed.Ctl3D then - I := 1 - else - I := 2; - if GetWindowLong(ed.Handle, GWL_STYLE) and ES_MULTILINE = 0 then - Result.X := (SendMessage(ed.Handle, EM_GETMARGINS, 0, 0) and $0000FFFF) + I - else - Result.X := I; - Result.Y := I; - end + if ed.BorderStyle = bsNone then + I := 0 else - begin - if ed.BorderStyle = bsNone then - I := 0 - else - begin - DC := GetDC(HWND_DESKTOP); - GetTextMetrics(DC, SysMetrics); - SaveFont := SelectObject(DC, ed.Font.Handle); - GetTextMetrics(DC, Metrics); - SelectObject(DC, SaveFont); - ReleaseDC(HWND_DESKTOP, DC); - I := SysMetrics.tmHeight; - if I > Metrics.tmHeight then - I := Metrics.tmHeight; - I := I div 4; - end; + if ed.Ctl3D then + I := 1 + else + I := 2; + if GetWindowLong(ed.Handle, GWL_STYLE) and ES_MULTILINE = 0 then + Result.X := (SendMessage(ed.Handle, EM_GETMARGINS, 0, 0) and $0000FFFF) + I + else Result.X := I; - Result.Y := I; - end; + Result.Y := I; end; function IsInWordArray(Value: Word; const A: array of Word): Boolean; @@ -1445,7 +1422,7 @@ with ACanvas do begin SendRectMessage(Editor.Handle, EM_GETRECT, 0, EditRect); - if not (NewStyleControls and TEd(Editor).Ctl3D) and (TEd(Editor).BorderStyle = bsSingle) then + if not TEd(Editor).Ctl3D and (TEd(Editor).BorderStyle = bsSingle) then begin Brush.Color := clWindowFrame; FrameRect(TEd(Editor).ClientRect); @@ -1766,21 +1743,11 @@ GetTextMetrics(DC, Metrics); SelectObject(DC, SaveFont); ReleaseDC(HWND_DESKTOP, DC); - if NewStyleControls then - begin - if not Flat then - I := 8 - else - I := 6; - I := GetSystemMetrics(SM_CYBORDER) * I; - end + if not Flat then + I := 8 else - begin - I := SysMetrics.tmHeight; - if I > Metrics.tmHeight then - I := Metrics.tmHeight; - I := I div 4 + GetSystemMetrics(SM_CYBORDER) * 4; - end; + I := 6; + I := GetSystemMetrics(SM_CYBORDER) * I; if Height < Metrics.tmHeight + I then Height := Metrics.tmHeight + I; end; @@ -1885,13 +1852,10 @@ TextColor: Longint; begin inherited; - if NewStyleControls then - begin - TextColor := ColorToRGB(Font.Color); - if not Enabled and (ColorToRGB(Color) <> ColorToRGB(clGrayText)) then - TextColor := ColorToRGB(clGrayText); - SetTextColor(Msg.WParam, TextColor); - end; + TextColor := ColorToRGB(Font.Color); + if not Enabled and (ColorToRGB(Color) <> ColorToRGB(clGrayText)) then + TextColor := ColorToRGB(clGrayText); + SetTextColor(Msg.WParam, TextColor); end; procedure TJvCustomComboEdit.CreateAutoComplete; @@ -2935,41 +2899,38 @@ var BtnRect: TRect; begin - if NewStyleControls then - {$IFDEF JVCLThemesEnabled} - if ThemeServices.ThemesEnabled then + {$IFDEF JVCLThemesEnabled} + if ThemeServices.ThemesEnabled then + begin + if BorderStyle = bsSingle then begin - if BorderStyle = bsSingle then - begin - if Ctl3D then - BtnRect := Bounds(Width - FButton.Width - 2, 0, - FButton.Width, Height - 2) - else - BtnRect := Bounds(Width - FButton.Width - 1, 1, - FButton.Width, Height - 2); - end + if Ctl3D then + BtnRect := Bounds(Width - FButton.Width - 2, 0, + FButton.Width, Height - 2) else - BtnRect := Bounds(Width - FButton.Width, 0, - FButton.Width, Height); + BtnRect := Bounds(Width - FButton.Width - 1, 1, + FButton.Width, Height - 2); end else - {$ENDIF JVCLThemesEnabled} + BtnRect := Bounds(Width - FButton.Width, 0, + FButton.Width, Height); + end + else + {$ENDIF JVCLThemesEnabled} + begin + if BorderStyle = bsSingle then begin - if BorderStyle = bsSingle then - begin - if not Flat then - BtnRect := Bounds(Width - FButton.Width - 4, 0, - FButton.Width, Height - 4) - else - BtnRect := Bounds(Width - FButton.Width - 2, 2, - FButton.Width, Height - 4) - end + if not Flat then + BtnRect := Bounds(Width - FButton.Width - 4, 0, + FButton.Width, Height - 4) else - BtnRect := Bounds(Width - FButton.Width, 0, - FButton.Width, Height); + BtnRect := Bounds(Width - FButton.Width - 2, 2, + FButton.Width, Height - 4) end - else - BtnRect := Bounds(Width - FButton.Width, 0, FButton.Width, Height); + else + BtnRect := Bounds(Width - FButton.Width, 0, + FButton.Width, Height); + end; NewLeft := BtnRect.Left; NewTop := BtnRect.Top; @@ -4273,10 +4234,7 @@ if FState <> rbsDown then with Canvas do begin - if NewStyleControls then - Pen.Color := clBtnFace - else - Pen.Color := clBtnShadow; + Pen.Color := clBtnFace; MoveTo(0, 0); LineTo(0, Self.Height - 1); Pen.Color := clBtnHighlight; Modified: trunk/jvcl/run/JvxCheckListBox.pas =================================================================== --- trunk/jvcl/run/JvxCheckListBox.pas 2009-08-07 11:46:14 UTC (rev 12430) +++ trunk/jvcl/run/JvxCheckListBox.pas 2009-08-07 11:48:25 UTC (rev 12431) @@ -431,10 +431,7 @@ ListBoxStyle = [csSetCaption, csDoubleClicks]; begin inherited Create(AOwner); - if NewStyleControls then - ControlStyle := ListBoxStyle - else - ControlStyle := ListBoxStyle + [csFramed]; + ControlStyle := ListBoxStyle; Width := 121; Height := 97; TabStop := True; @@ -836,7 +833,7 @@ Styles[FStyle] or Sorteds[FSorted] or Selects[FMultiSelect] or IntegralHeights[FIntegralHeight] or MultiColumns[FColumns <> 0] or BorderStyles[FBorderStyle] or TabStops[FTabWidth <> 0]; - if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then + if Ctl3D and (FBorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; @@ -1181,7 +1178,7 @@ procedure TJvxCustomListBox.CMCtl3DChanged(var Msg: TMessage); begin - if NewStyleControls and (FBorderStyle = bsSingle) then + if FBorderStyle = bsSingle then RecreateWnd; inherited; end; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |