From: Roman K. <rom...@us...> - 2009-06-12 15:19:16
|
Update of /cvsroot/synedit/SynEdit/Source In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv11151 Modified Files: SynEdit.pas Log Message: Fixed the clipboard for Unicode Index: SynEdit.pas =================================================================== RCS file: /cvsroot/synedit/SynEdit/Source/SynEdit.pas,v retrieving revision 1.459 retrieving revision 1.460 diff -u -d -r1.459 -r1.460 --- SynEdit.pas 23 Apr 2009 14:24:14 -0000 1.459 +++ SynEdit.pas 12 Jun 2009 15:19:00 -0000 1.460 @@ -1003,6 +1003,14 @@ FrameWidth = 2; { the border width when BoderStyle = bsSingle (until we support TWidgetStyle...) } {$ENDIF} +//Text-Format for the clipboard +const +{$IFDEF UNICODE} + cClipboardTextFormat = CF_UNICODETEXT; +{$ELSE} + cClipboardTextFormat = CF_TEXT; +{$ENDIF} + function TrimTrailingSpaces(const S: string): string; var I: Integer; @@ -1158,14 +1166,14 @@ EmptyClipboard; // Put it on the clipboard as normal text format so it can be pasted into // things like notepad or Delphi. - Mem := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, SLen + 1); + Mem := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, (SLen + 1) * SizeOf(Char)); if Mem <> 0 then begin P := GlobalLock(Mem); try if P <> nil then begin - Move(PChar(SText)^, P^, SLen + 1); + Move(PChar(SText)^, P^, (SLen + 1) * SizeOf(Char)); // Put it on the clipboard in text format - Failed := SetClipboardData(CF_TEXT, Mem) = 0; + Failed := SetClipboardData(cClipboardTextFormat, Mem) = 0; end; finally GlobalUnlock(Mem); @@ -1176,15 +1184,14 @@ if not Failed then begin // Copy it in our custom format so we know what kind of block it is. // That effects how it is pasted in. - Mem := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, SLen + - SizeOf(TSynSelectionMode) + 1); + Mem := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, (SLen + SizeOf(TSynSelectionMode) + 1) * SizeOf(Char)); P := GlobalLock(Mem); try if P <> nil then begin // Our format: TSynSelectionMode value followed by text. PSynSelectionMode(P)^ := fActiveSelectionMode; inc(P, SizeOf(TSynSelectionMode)); - Move(PChar(SText)^, P^, SLen + 1); + Move(PChar(SText)^, P^, (SLen + 1) * SizeOf(Char)); Failed := SetClipboardData(SynEditClipboardFormat, Mem) = 0; end; finally @@ -1550,7 +1557,7 @@ P := PChar(Result); StrPCopy(P, Copy(S, Index, Count)); Inc(P, Length(S)); - FillChar(P^, DstLen - Srclen, $20); + FillChar(P^, (DstLen - Srclen) * SizeOf(Char), $20); end; end; @@ -1567,7 +1574,7 @@ Dec(Index); pSrc := PChar(S) + Index; DstLen := Min(SrcLen - Index, Count); - Move(pSrc^, P^, DstLen); + Move(pSrc^, P^, DstLen * SizeOf(Char)); Inc(P, DstLen); P^ := #0; end; @@ -1586,7 +1593,7 @@ Len := Count - (P - OldP); if not (eoTrimTrailingSpaces in Options) then begin - FillChar(P^, Len, #$20); + FillChar(P^, Len * SizeOf(Char), #$20); Inc(P, Len); end else @@ -3514,7 +3521,7 @@ Clipboard.Close; end; // If our special format isn't there, check for regular text format. - end else if Clipboard.HasFormat(CF_TEXT) then begin + end else if Clipboard.HasFormat(cClipboardTextFormat) then begin {$ENDIF} fUndoList.AddChange(crPasteBegin, BlockBegin, BlockEnd, '', smNormal); AddPasteEndMarker := True; @@ -4207,7 +4214,7 @@ if P <> Start then begin SetLength(Str, P - Start); - Move(Start^, Str[1], P - Start); + Move(Start^, Str[1], (P - Start) * SizeOf(Char)); if CaretY > Lines.Count then begin Inc( Result ); @@ -5199,8 +5206,7 @@ {$IFDEF SYN_CLX} Result := not ReadOnly and Clipboard.Provides(CF_TEXT); {$ELSE} - Result := not ReadOnly and ( Clipboard.HasFormat(CF_TEXT) - or Clipboard.HasFormat(SynEditClipboardFormat) ); + Result := not ReadOnly and (Clipboard.HasFormat(cClipboardTextFormat) or Clipboard.HasFormat(SynEditClipboardFormat)); {$ENDIF} end; |