Hello,

The other patches on this thread have some minor problems, and can no
longer be applied after my last patch was. To make things easier for
everyone I took the liberty to recreate this patch, only with the
modifications to qtobjects.pas

Mattias, please apply this patch, and not the other ones on this thread.

Guiliano, please check if this works correctly for TMemo.

thanks,

--
Felipe Monteiro de Carvalho
Index: lcl/interfaces/qt/qtobjects.pas
===================================================================
--- lcl/interfaces/qt/qtobjects.pas	(revisão 9272)
+++ lcl/interfaces/qt/qtobjects.pas	(cópia de trabalho)
@@ -19,6 +19,7 @@
     FUpdating: Boolean;       // We're changing Qt Widget
     procedure InternalUpdate;
     procedure ExternalUpdate(var Astr: WideString; Clear: Boolean = True);
+    procedure IsChanged; // OnChange triggered by program action
   protected
     function GetTextStr: string; override;
     function GetCount: integer; override;
@@ -44,15 +45,7 @@
 uses qtprivate, LMessages;
 
 {------------------------------------------------------------------------------
-  DelphiOnChange sets Delphi compatibility for OnChange event:
-  If defined, OnChange is generated whenever there's a change
-  If undefined, OnChange is generated if change is caused by user action
- ------------------------------------------------------------------------------}
-
-{$define DelphiOnChange}
-
-{------------------------------------------------------------------------------
-  Method: TQtMemoStrings.InternalUpdate
+  Private Method: TQtMemoStrings.InternalUpdate
   Params:  None
   Returns: Nothing
 
@@ -68,31 +61,44 @@
 end;
 
 {------------------------------------------------------------------------------
-  Method: TQtMemoStrings.ExternalUpdate
+  Private Method: TQtMemoStrings.ExternalUpdate
   Params:  Astr: Text for Qt Widget; Clear: if we must clear first
   Returns: Nothing
 
   Updates Qt Widget from text - If DelphiOnChange, generates OnChange Event
  ------------------------------------------------------------------------------}
 procedure TQtMemoStrings.ExternalUpdate(var Astr: WideString; Clear: Boolean = True);
-{$ifdef DelphiOnChange}
-var
-  Mess: TLMessage;
-{$endif}
+{var
+  Mess: TLMessage;}
 begin
   FUpdating := True;
   if Clear then
     QTextEdit_clear(FQtTextEdit);
   QTextEdit_append(FQtTextEdit,@Astr);
   FUpdating := False;
-{$ifdef DelphiOnChange}
-  FillChar(Mess, SizeOf(Mess), #0);
-  Mess.Msg := CM_TEXTCHANGED;
-  FOwner.Dispatch(TLMessage(Mess));
-{$endif}
+  {FillChar(Mess, SizeOf(Mess), #0);
+  (FOwner as TCustomMemo).Modified := False;
+  FOwner.Dispatch(TLMessage(Mess));}
+  IsChanged;
+  FUpdating := False;
 end;
 
 {------------------------------------------------------------------------------
+  Private Method: TQtMemoStrings.IsChanged
+  Params:  None
+  Returns: Nothing
+
+  Triggers the OnChange Event, with modified set to false
+ ------------------------------------------------------------------------------}
+procedure TQtMemoStrings.IsChanged;
+begin
+  if Assigned((FOwner as TCustomMemo).OnChange) then begin
+    (FOwner as TCustomMemo).Modified := False;
+    (FOwner as TCustomMemo).OnChange(self);
+    end;
+end;
+
+{------------------------------------------------------------------------------
   Method: TQtMemoStrings.GetTextStr
   Params:  None
   Returns: a string
@@ -201,9 +207,10 @@
     FTextChanged := True;
     FillChar(Mess, SizeOf(Mess), #0);
     Mess.Msg := CM_TEXTCHANGED;
+    //(FOwner as TCustomMemo).Modified := True;
     FOwner.Dispatch(TLMessage(Mess));
     end;
-  Result := False;
+  Result := True;
 end;
 
 {------------------------------------------------------------------------------
@@ -216,9 +223,6 @@
 procedure TQtMemoStrings.Assign(Source: TPersistent);
 var
   Astr: WideString;
-{$ifdef DelphiOnChange}
-  Mess: TLMessage;
-{$endif}
 begin
   if (Source=Self) or (Source=nil) then exit;
   if Source is TStrings then begin
@@ -227,11 +231,6 @@
     Astr := FStringList.Text;
     ExternalUpdate(Astr,True);
     FTextChanged := False;
-{$ifdef DelphiOnChange}
-    FillChar(Mess, SizeOf(Mess), #0);
-    Mess.Msg := CM_TEXTCHANGED;
-    FOwner.Dispatch(TLMessage(Mess));
-{$endif}
     exit;
   end;
   Inherited Assign(Source);
@@ -245,21 +244,20 @@
   Clears all.
  ------------------------------------------------------------------------------}
 procedure TQtMemoStrings.Clear;
-{$ifdef DelphiOnChange}
 var
   Mess: TLMessage;
-{$endif}
 begin
   FUpdating := True;
   FStringList.Clear;
   QTextEdit_clear(FQtTextEdit);
   FTextChanged := False;
   FUpdating := False;
-{$ifdef DelphiOnChange}
+  {FillChar(Mess, SizeOf(Mess), #0);
   FillChar(Mess, SizeOf(Mess), #0);
   Mess.Msg := CM_TEXTCHANGED;
-  FOwner.Dispatch(TLMessage(Mess));
-{$endif}
+  (FOwner as TCustomMemo).Modified := False;
+  FOwner.Dispatch(TLMessage(Mess));}
+  IsChanged;
 end;
 
 {------------------------------------------------------------------------------

Reply via email to