Autor Beitrag
schitho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 288

XP Home SP2
D2005 Prof
BeitragVerfasst: Mo 24.05.04 22:29 
Hi,

ich hab in einem Programm 2 TRxRichEdit (RE1 und RE2) Formulare. Im Programm kopier ich nun den Inhalt vom RE1 zu RE2.

Bei dem Kopieren sollte wirklich der komplette Inhalt kopiert werden, so dass in RE1 und RE2 wirklich alle Zeichen (Bytes) gleich sind.

Doch scheinbar funktioniert das mit meiner Routine (die ich übrigens eh aus diesem Forum habe :oops: ) nicht richtig. Manchmal werden scheinbar bestimmte (nicht sichtbare :?!?: ) Zeichen nicht kopiert.

Hier einmal der Programmcode, mit dem Ihr selbst ausprobieren könnt was ich meine.
(1 Form, 2 Buttons und 2x TRxRichEdit)

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, RxRichEd;

type
  TForm1 = class(TForm)
    RE1: TRxRichEdit;
    RE2: TRxRichEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Vergleicht die Inhalte 2er RichEdit-Felder
function CompareRichEdits(const Re1, Re2: TRxRichEdit): Boolean;
var
  ms1, ms2: TMemoryStream;
begin
  Result := False;
  ms1 := TMemoryStream.Create;
  try
    Re1.Lines.SaveToStream(ms1);
    ms2 := TMemoryStream.Create;
    try
      Re2.Lines.SaveToStream(ms2);
      if ms1.Size = ms2.Size then
        // Compare the streams, Streams vergleichen:
        Result := CompareMem(ms1.Memory, ms2.Memory, ms1.Size)
      finally
        ms2.Free
    end
  finally
    ms1.Free
  end
end;

procedure SaveToRichEdit(const FromRE : TRxRichEdit; VAR ToRE : TRxRichEdit);
var
  tmpStream: TMemoryStream; // Temp. Stream im Speicher
begin
  // Speicherstream erzeugen
  tmpStream := TMemoryStream.Create;
  try
    // Inhalt von RichEdit in Speicher ablegen
    FromRE.Lines.SaveToStream(tmpStream);
    tmpStream.Position:=0;
    // und von dort in das andere RichEdit-Formular wieder einlesen.
    ToRe.Lines.LoadFromStream(tmpStream);
  finally
    tmpStream.Free
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SaveToRichEdit(RE1,RE2);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if CompareRichEdits(RE1,RE2)=false then
  ShowMessage('Leider nicht gleich'else
  ShowMessage('beide gleich!');
end;

end.


Das Problem tritt aber nicht immer auf. Meistens jedoch, wenn man aus einer Internetseite nur einen Teil über die Zwischenablage in RE1 hineinkopiert. Wenn ich dann auf den Button1 -Klicke, wird der Inhalt von RE1 nach RE2 kopiert.

Mittels Button2 könnt Ihr dann testen, ob der Inhalt wirklich gleich ist.

Ihr werdet festellen, dass der Inhalt leider nicht immer gleich ist. :cry:

Woran könnte das liegen und wie könnte ich das Problem umgehen?

Gruß
Thomas

_________________
(Sorry! Leider ewiger Delphi-Neuling)
daflear
Hält's aus hier
Beiträge: 13

Win XP

BeitragVerfasst: Di 25.05.04 18:00 
hallo schitho
ich weiß jetzt nicht ob das eine lösung ist aber lass doch einfach ne for-schleife von 0 (oder 1 ich weiß net wies bei richedit is; einfach ausprobieren) bis count-1 laufen und check dann ob die strings in den lines gleich sind....