LadyOfWood
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 1 Выбираем объект у которого есть style (например Memo) при изменении цвета, шрифта, параметров фрейма Style сбрасывается но update toolbar'а не происходит. //fix 43: if TheFont <> nil then c.Font := TheFont; end; if AAction in [0..5, 20..29, 32] then if c is TfrxCustomMemoView then begin TfrxCustomMemoView(c).Style := ''; StyleCB.ItemIndex := 0; //fix end; wasModified := True; 2. Выбираем отчет с стилями у удаляем один из них, у Memo у которых есть данный стиль он так и остается, а не заменяется на нулевой. procedure TfrxDesignerForm.ReportStylesMIClick(Sender: TObject); begin if CheckOp(drDontChangeReportOptions) then with TfrxStyleEditorForm.Create(Self) do begin if ShowModal = mrOk then begin Modified := True; //здесь надо пробежать все объекты и узнать есть ли у кого левый стиль //PS это не fix, это напрвление мыслей UpdateStyles; Report.Styles.Apply; end; Free; end; end; Добавлено: В догонку Если изменять параметры шрифта через диалог после изменений не происходит update toolbar'а. Я вот и fix //original if TComponent(Sender).Tag in [24, 25, 34..42] then UpdateControls; //fixed if TComponent(Sender).Tag in [24, 25, 34..42, 43] then UpdateControls; Добавлено: Да уж не знаю нето баг, не то фича { TfrxDialogControlEditor } function TfrxDialogControlEditor.Edit: Boolean; var i: Integer; c: TfrxDialogControl; s: String; begin c := TfrxDialogControl(Component); if c.OnClick = '' then begin s := c.Name + 'OnClick'; c.OnClick := s; i := frxLocateEventHandler(Designer.Code, Designer.Report.ScriptLanguage, s); if i = -1 then i := frxAddEvent(Designer.Code, Designer.Report.ScriptLanguage, TypeInfo(TfrxNotifyEvent), s) else Inc(i, 3); TfrxDesignerForm(Designer).SwitchToCodeWindow; TfrxDesignerForm(Designer).CodeWindow.UpdateView; TfrxDesignerForm(Designer).CodeWindow.SetPos(3, i); Result := True; end else begin i := frxLocateEventHandler(Designer.Code, Designer.Report.ScriptLanguage, c.OnClick); TfrxDesignerForm(Designer).SwitchToCodeWindow; TfrxDesignerForm(Designer).CodeWindow.SetPos(1, i + 3); Result := False; end; end; Вот только typecast дизайнера как TfrxDesignerForm очень затрудняет создание собственного дизайнера ведь есть класс TfrxCustomDesigner в чем сложность в нем прописать абстрактный метод SwitchToCodeWindow, и т.п., а потом всвоем дизайнере перекрыть не знаю, а то куда не сунь везде хаки, ну можно сесть и продмать. Добавлено: Еще , если двойным кликом по статусу поменять единицы измерения когда находишся в скипте стутус бар глючит показывает не координаты курсора в скрипте, а координаты объекта в отчете. А вот и фикс procedure TfrxDesignerForm.OnNotifyPosition(ARect: TfrxRect); var dx, dy: Extended; begin with ARect do begin if FUnits = duCM then begin dx := 1 / 96 * 2.54; dy := dx; end else if FUnits = duChars then begin dx := 1 / fr1CharX; dy := 1 / fr1CharY; end else if FUnits = duPixels then begin dx := 1; dy := dx; end else begin dx := 1 / 96; dy := dx; end; Left := Left * dx; Top := Top * dy; if FWorkspace.Mode <> dmScale then begin Right := Right * dx; Bottom := Bottom * dy; end; if FUnits = duChars then begin Left := Trunc(Left); Top := Trunc(Top); Right := Trunc(Right); Bottom := Trunc(Bottom); end; FCoord1 := ''; FCoord2 := ''; FCoord3 := ''; if (not FWorkspace.IsMouseDown) and (FWorkspace.Mode <> dmInsertObject) then if (FSelectedObjects.Count > 0) and (FSelectedObjects[0] = FPage) then FCoord1 := Format('%f; %f', [Left, Top]) else begin FCoord1 := Format('%f; %f', [Left, Top]); FCoord2 := Format('%f; %f', [Right, Bottom]); end else case FWorkspace.Mode of dmMove, dmSize, dmSizeBand, dmInsertObject, dmInsertLine: begin FCoord1 := Format('%f; %f', [Left, Top]); FCoord2 := Format('%f; %f', [Right, Bottom]); end; dmScale: begin FCoord1 := Format('%f; %f', [Left, Top]); FCoord3 := Format('%s%f; %s%f', ['%', Right * 100, '%', Bottom * 100]); end; end; //fix begin if FPage = nil then begin FCoord1 := Format('%d; %d', [CodeWindow.GetPos.Y, CodeWindow.GetPos.X]); FCoord2 := ''; FCoord3 := ''; end; //fix end end; LeftRuler.Position := ARect.Top; TopRuler.Position := ARect.Left; StatusBar.Repaint; end; |