* Various TCustomMemo memleaks & bug fixes.

git-svn-id: trunk@11525 -
This commit is contained in:
zeljko 2007-07-16 14:26:16 +00:00
parent 4fbaaf4f4e
commit b6c49dc891
3 changed files with 36 additions and 21 deletions

View File

@ -310,13 +310,19 @@ end;
Updates Qt Widget from text - If DelphiOnChange, generates OnChange Event
------------------------------------------------------------------------------}
procedure TQtMemoStrings.ExternalUpdate(var Astr: WideString; Clear: Boolean = True);
{var
Mess: TLMessage;}
var
Str: WideString;
begin
FUpdating := True;
Str := UTF8Decode(AStr);
if Clear then
begin
QTextEdit_clear(FQtTextEdit);
QTextEdit_append(FQtTextEdit,@Astr);
QTextEdit_setPlainText(FQtTextEdit,@Str);
end
else
QTextEdit_append(FQtTextEdit,@Str);
FUpdating := False;
{FillChar(Mess, SizeOf(Mess), #0);
(FOwner as TCustomMemo).Modified := False;
@ -406,6 +412,7 @@ begin
FStringList := TStringList.Create;
FQtTextEdit := TextEdit;
QTextEdit_toPlainText(TextEdit,@Astr); // get the memo content
AStr := UTF8Encode(AStr);
FStringList.Text := Astr;
FOwner:=TheOwner;
@ -425,6 +432,8 @@ end;
------------------------------------------------------------------------------}
destructor TQtMemoStrings.Destroy;
begin
Clear;
FStringList.Free;
// don't destroy the widgets
inherited Destroy;
end;
@ -486,19 +495,17 @@ end;
Clears all.
------------------------------------------------------------------------------}
procedure TQtMemoStrings.Clear;
{var
Mess: TLMessage;}
begin
FUpdating := True;
FStringList.Clear;
QTextEdit_clear(FQtTextEdit);
if not (csDestroying in FOwner.ComponentState)
and not (csFreeNotification in FOwner.ComponentState)
then
QTextEdit_clear(FQtTextEdit);
FTextChanged := False;
FUpdating := False;
{FillChar(Mess, SizeOf(Mess), #0);
FillChar(Mess, SizeOf(Mess), #0);
Mess.Msg := CM_TEXTCHANGED;
(FOwner as TCustomMemo).Modified := False;
FOwner.Dispatch(TLMessage(Mess));}
IsChanged;
end;
@ -514,12 +521,13 @@ var
Astr: WideString;
begin
if FTextChanged then InternalUpdate;
if Index < FStringList.Count then begin
if Index < FStringList.Count then
begin
FStringList.Delete(Index);
Astr := FStringList.Text;
ExternalUpdate(AStr,True);
FTextChanged := False;
end;
end;
end;
{------------------------------------------------------------------------------
@ -535,12 +543,13 @@ var
begin
if FTextChanged then InternalUpdate;
if Index < 0 then Index := 0;
if Index <= FStringList.Count then begin
if Index <= FStringList.Count then
begin
FStringList.Insert(Index,S);
Astr := FStringList.Text;
ExternalUpdate(Astr,True);
FTextChanged := False;
end;
end;
end;
{------------------------------------------------------------------------------

View File

@ -390,6 +390,7 @@ type
protected
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
public
FList: TStrings;
destructor Destroy; override;
procedure SetColor(const Value: PQColor); override;
procedure SetAlignment(const AAlignment: TAlignment);

View File

@ -592,6 +592,9 @@ begin
QtTextEdit := TQtTextEdit.Create(AWinControl, AParams);
QtTextEdit.AttachEvents;
// create our FList helper
QtTextEdit.FList := TQtMemoStrings.Create(QTextEditH(QtTextEdit.Widget), TCustomMemo(AWinControl));
Result := THandle(QtTextEdit);
end;
@ -619,9 +622,7 @@ begin
if Length(AText) = 0 then
exit;
Astr := UTF8Decode(AText);
//QTextEdit_append(QTextEditH(ACustomMemo.Handle),@Astr);
QTextEdit_append(QTextEditH(TQtWidget(ACustomMemo.Handle).Widget),@Astr);
end;
class procedure TQtWSCustomMemo.SetAlignment(const ACustomMemo: TCustomMemo;
@ -640,8 +641,13 @@ class function TQtWSCustomMemo.GetStrings(const ACustomMemo: TCustomMemo): TStri
var
TextEditH: QTextEditH;
begin
TextEditH := QTextEditH((TQtWidget(ACustomMemo.Handle).Widget)); // set to proper type
Result := TQtMemoStrings.Create(TextEditH,ACustomMemo);
if not Assigned(TQtTextEdit(ACustomMemo.Handle).FList) then
begin
TextEditH := QTextEditH((TQtTextEdit(ACustomMemo.Handle).Widget)); // set to proper type
TQtTextEdit(ACustomMemo.Handle).FList := TQtMemoStrings.Create(TextEditH,ACustomMemo);
end;
Result := TQtTextEdit(ACustomMemo.Handle).FList;
end;
@ -687,8 +693,7 @@ var
AString: WideString;
begin
AString := UTF8Decode(AText);
QTextEdit_append(QTextEditH(TQtWidget(AWinControl.Handle).Widget), @AString);
QTextEdit_setPlainText(QTextEditH(TQtWidget(AWinControl.Handle).Widget), @AString);
end;
{------------------------------------------------------------------------------