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;
{------------------------------------------------------------------------------