Page 1 of 1

page setup problem

Posted: Sat Aug 22, 2009 12:57 pm
by Cosmin3
I think there is a problem with the new version 2.2.2.
I create a window with srv. Right after this (in the same procedure) I set a lot of things in which this one:

srvEditor.UnitsProgram := rvuMillimeters;
SclRVRuler1.UnitsDisplay := ruMillimeters;
SclRVRuler2.UnitsDisplay := ruMillimeters;
srvEditor.SetMarginUnit(25, 15, 10, 15);

The problem is that srveditor.PageProperty.BottomMargin is 0.3 after the window is shown.
If I try ShowMessage(FloatToStr(srveditor.PageProperty.BottomMargin)) right after this code says that is 15.081 (!).
After the window is shown (but not in that procedure) if I try this code works fine.
So the problem is that I use it right after creation.

This code worked 100% for versions <= 2.2.1.

Is there something that can be done...?
Thank you.

Posted: Sat Aug 22, 2009 1:27 pm
by Sergey Tkachenko
We tried to reproduce this bug in the following code:

Code: Select all

procedure TForm1.Button1Click(Sender: TObject);
begin
rvEditor := TSRichViewEdit.Create(nil);
rvEditor.Parent := self;
SclRVRuler1.SRichViewEdit := rvEditor;
SclRVRuler2.SRichViewEdit := rvEditor;

rvEditor.UnitsProgram := rvuMillimeters;
SclRVRuler1.UnitsDisplay := ruMillimeters;
SclRVRuler2.UnitsDisplay := ruMillimeters;
rvEditor.SetMarginUnit(25, 15, 10, 15);
ShowMessage(FloatToStr(rvEditor.PageProperty.BottomMargin));

// rvEditor.Parent := nil;
// rvEditor.Destroy;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(FloatToStr(rvEditor.PageProperty.BottomMargin));
end;
Both messages (just after the creation, and when clicking on the second button) display 15.
Probably some other code resets margins. Can you send a project reproducing this problem to Ilya?

Posted: Sat Aug 22, 2009 1:39 pm
by Cosmin3
My code is:

Code: Select all

   if Busy then
      Exit;
   with TfrmMainChild.Create(Self) do
   begin
      Busy := True;
      WindowState := wsMaximized;
      Constraints.MinWidth := 640;
      Constraints.MinHeight := 480;
      srvEditor.RichViewEdit.Style.SelectionMode := rvsmChar;
      srvEditor.RichViewEdit.Clear;
      with srvEditor.RichViewEdit.Style do
         for i := 0 to TextStyles.Count - 1 do
            TextStyles[i].Unicode := True;
      idChildUnic := Abs(Handle);
      RVALocalizeRuler(SclRVRuler1);
      RVAControlPanel1.DefaultControl := srvEditor.RichViewEdit;
      TSRVToolButton(srvtlwndw1.Buttons.Items[0]).Caption := TextRo('Arie editabilã');
      TSRVToolButton(srvtlwndw1.Buttons.Items[1]).Caption := TextRo('Cãutare');
      TSRVToolButton(srvtlwndw1.Buttons.Items[2]).Caption := TextRo('Înlocuire multiplã');
      TSRVToolButton(srvtlwndw1.Buttons.Items[3]).Caption := 'DEX';
      TSRVToolButton(srveditor.MenuHButtons.Items[0]).Hint := TextRo('Suport punctuaþie');
      TSRVToolButton(srveditor.MenuHButtons.Items[4]).Hint := TextRo('Riglã');
      PageModes := pmBreakPage;
      FileType := ftRTF;
      lbInfo.Caption := 'Nr. sugestii: 0       ';
      btnCloseSuport.Hint := TextRo('Închide');
      lbCaption.Caption := TextRo('Suport punctuaþie');
      Caption := 'Fara titlu.rtf';
      FullFileName := '';
      TextLoaded := False;
      frmMain.cmbListZoom.ItemIndex := 3; //3 = default pe 100 %
      if Pos('%', cmbListZoom.Text) > 0 then
         srvEditor.ViewProperty.ZoomPercent := StrToIntDef(Copy(cmbListZoom.Text, 1, Length(cmbListZoom.Text) - 1), 0)
      else
         srvEditor.ViewProperty.ZoomPercent := StrToIntDef(cmbListZoom.Text, 0);
      RememberZoomMode := srvEditor.ViewProperty.ZoomMode;
      RememberZoomPercent := srvEditor.ViewProperty.ZoomPercent;
      RememberPageFormat := srvEditor.PageProperty.PageFormat;
      srvEditor.UnitsProgram := rvuMillimeters;
      SclRVRuler1.UnitsDisplay := ruMillimeters; //ruCentimeters;
      SclRVRuler2.UnitsDisplay := ruMillimeters; //ruCentimeters;
      srvEditor.SetMarginUnit(25, 15, 10, 15);
//      ShowMessage(FloatToStr(srveditor.PageProperty.BottomMargin));
      SclRVRuler1.Scrolled;
      SclRVRuler2.Scrolled;
      SclRVRuler1.DoMarginChanged;
      srvEditor.PageProperty.PageNoVisible := False;
      if frmConfig.cbHideRigla.Checked then begin
         Panel3.Visible := False;
         SclRVRuler1.Visible := False;
         SclRVRuler2.Visible := False;
      end;
      FontName := frmConfig.pnlFontExDoc.Font.Name;
      FontSize := frmConfig.pnlFontExDoc.Font.Size;
      Busy := False;
      with rvActionFontEx1 do
      begin
         UserInterface := False;
         ValidProperties := [rvfimFontName, rvfimSize, rvfimCharset, rvfimBold, rvfimItalic, rvfimUnderline, rvfimStrikeout, rvfimOverline, rvfimColor];
         Font := frmConfig.pnlFontExDoc.Font;
         Execute;
         UserInterface := True;
      end;
      if cmbFontName.Items.Count > 0 then
      begin
         cmbFontName.ItemIndex := cmbFontName.Items.IndexOf(frmConfig.pnlFontExDoc.Font.Name); // 'Times New Roman'
         cmbFontSize.FontName := frmConfig.pnlFontExDoc.Font.Name; //'Times New Roman';
         cmbFontSize.ItemIndex := cmbFontSize.Items.IndexOf(IntToStr(frmConfig.pnlFontExDoc.Font.Size)); //'11');
      end;
      srvEditorCurrentPageChange(Self);
      srvEditor.OnCaretMove := srvEditorCaretMove;
      srvEditor.OnCaretMove(Self);
      Busy := True;
      pnlContainerMesaj.Constraints.MaxHeight := Height div 2 - 20;
      SetRiglaUnits(False);
      AddItemMenu(idChildUnic, Caption);
      srvEditor.RichViewEdit.Delimiters := ' .;,:(){}"/\<>!?[]+*='#$91#$92#$93#$94#$A0#$84;
      Show;
      if frmMain.Showing then
         srvEditor.SetFocus;
      srvEditor.RichViewEdit.Modified := False;
      srvEditor.RichViewEdit.ClearUndo;
      Busy := False;
   end;
Some of the code is specific to my program but hopefully that it will give you an idea about how it works.
I tried this first because it's not very easy to make a smaller program to reproduce the problem..

Posted: Sat Aug 22, 2009 2:04 pm
by Sergey Tkachenko
We found a bug in the ruler.
A quick fix:
unit: SclRVRuler.pas
procedure TSclRVRuler.DoMarginChanged;
line 567, change from

Code: Select all

if (RulerType = rtVertical) then
  FSRichViewEdit.SetMargin(-1, FSRichViewEdit.TopMargin100Pix,
    -1, FSRichViewEdit.BottomMargin100Pix)
else
  FSRichViewEdit.SetMargin(FSRichViewEdit.LeftMargin100Pix, -1,
    FSRichViewEdit.RightMargin100Pix, 1);
to

Code: Select all

if (RulerType = rtVertical) then
  FSRichViewEdit.SetMargin(-1, FSRichViewEdit.TopMargin100Pix,
    -1, FSRichViewEdit.BottomMargin100Pix)
else
  FSRichViewEdit.SetMargin(FSRichViewEdit.LeftMargin100Pix, -1,
    FSRichViewEdit.RightMargin100Pix, [color=red]-1[/color]);
Besides, change in your code:

Code: Select all

SclRVRuler1.Scrolled;
SclRVRuler2.Scrolled;
SclRVRuler1.DoMarginChanged;
to

Code: Select all

SclRVRuler1.CheckMargin;
SclRVRuler2.CheckMargin;

Posted: Sat Aug 22, 2009 2:48 pm
by Cosmin3
Yes, it works fine now :)
Thank you very much for the quick fix.
Best regards.

Posted: Mon Aug 24, 2009 9:49 am
by Cosmin3
A smaller problem: is it normal that at every use of srv.ScrollToCaret to show the ScrollHint..?
How can I deactivate it (without deactivating it at the use of Scrollbar)..?

Posted: Mon Aug 24, 2009 3:58 pm
by Sergey Tkachenko
A quick fix:
Unit: SclRView.pas
function TSRichViewEdit.ScrollToCaret: Boolean;
line: 10793

Change from

Code: Select all

HScrollPos := LeftItem - 1;
VScrollPos := (TopItem div FRichViewEdit.VSmallStep) - 1;
to

Code: Select all

fBusyScroll := True;
HScrollPos := LeftItem - 1;
VScrollPos := (TopItem div FRichViewEdit.VSmallStep) - 1;
fBusyScroll := False;

Posted: Mon Aug 24, 2009 5:02 pm
by Cosmin3
Thank you for this fix too..

Posted: Fri Oct 16, 2009 8:26 am
by Cosmin3
Hi.
I just found another problem: let's say I opened a document. I go with text cursor to the last visible text line in page and start pressing Down key. Every time I press the key the scroll hint appears.
Same thing happens when I go up.
It's annoying to see that scroll hint every time for those users who check dozens of text pages every day.
Less annoying but still.. is when you scroll the text with mouse wheel.
In both cases the scroll hint should be showed only (at most) when you enter in another page.

How can I solve these...?
Thank you in advance.

Posted: Tue Oct 20, 2009 7:35 pm
by Sergey Tkachenko
Confirmed. Will be fixed in the next update.

Posted: Sat Oct 31, 2009 9:04 am
by proxy3d
It is fixed in version SRV 2.5