Интерфейс пользователя MIS3 — различия между версиями

Материал из ИбисоПедии
Перейти к: навигация, поиск
(Горячие клавиши)
(Правила дизайна Ribbon)
 
(не показано 35 промежуточных версий 4 участников)
Строка 1: Строка 1:
 
== Общие ==
 
== Общие ==
* свойство TOP для контролов: 6,39,72, 105,138,171 ,204
+
# расстояние между контролами по вертикали 10
* метки обязательных полей подчеркиваются красным (см. dmImages.SetRequiredFieldLabelStyle)
+
# свойство TOP для контролов: 10,41,72, 103,134,165 ,195
* настройки соединения с БД  в ibis.ini
+
# метки обязательных полей подчеркиваются красным (см. dmImages.SetRequiredFieldLabelStyle)
* текущие настройки приложения (положения окон, выбранный стили и т.п.) в реестре HKCU\Software\SoftMaster\<имя_приложения>
+
# настройки соединения с БД  в [[ibis.ini]]
* русификация в файле russian.lng  (в том числе и для других языков через cxLocalizer)
+
# текущие настройки приложения (положения окон, выбранный стили и т.п.) в реестре Software\IBIS\MIS (актуальное значение находится в dConfig.dmConfig.AppStorage.Root). Путь ветки реестра правильно брать так dmConfig.AppStorage.Root + '\' + Self.ClassName
* стиль нередактируемых контролов dmImages.escInfo
+
# русификация в файле russian.lng  (в том числе и для других языков через cxLocalizer)
* стиль заголовков (над списками и пр) - будет тут.
+
# стиль нередактируемых контролов dmImages.escInfo
 +
# стиль заголовков (для cxLabel над списками и пр) - dmImages.escCaption.
 +
#* cxlabel.Height := 14
 +
#* cxlabel.Style.Font.Size := 8
 +
# AlignWithMargin := False (Избегаем его использования)
  
 
== Главное окно ==
 
== Главное окно ==
 
== Горячие клавиши ==
 
== Горячие клавиши ==
=== В окнах редактирования (WinOnTask) ===
+
Здесь информация может немного устареть. См описание классов и исходные коды модулей [[MIS3._Иерархия_классов]]
* F2 - Сохранить
+
иконки, горячие клавиши определены в модуле dImages.pas. См. dImages.SetShurtCutOnRibbon(AForm:TForm);
* F3 - Добавить
+
 
* F4 - Редактировать
+
{|cellspacing="0" border="1"
* F5 - Обновить
+
!Действие
* F6 - Выполнить отчет
+
!Hotkey
* F9 - Конструктор отчетов
+
!Место применения
* F12 Закрыть форму
+
!Примечания
* Ctrl+Q Сохранить и закрыть  (Вариант Ctrl+Enter ???)
+
|-
* Shift+Del - удалить
+
|Сохранить
* Alt+backspace - отменить изменения на форме
+
|F2 Ctrl+S
=== В окнах выбора ===
+
|
* Enter - В окнах выбора "выбрать и вернуть"
+
|
* F12 Закрыть форму
+
|-
 +
|Сохранить и закрыть
 +
|Ctrl+Q или Ctrl+Enter
 +
|
 +
|
 +
|-
 +
|Добавить
 +
|F3, NumPlus
 +
|
 +
|
 +
|-
 +
|Редактировать
 +
|F4
 +
|
 +
|
 +
|-
 +
|Обновить
 +
|F5
 +
|
 +
|
 +
|-
 +
|Удалить
 +
|Shift+Del
 +
|
 +
|
 +
|-
 +
|Закрыть
 +
|F12 или ESC
 +
|
 +
|
 +
|-
 +
|Выбрать
 +
|Shift+ENTER
 +
|
 +
|
 +
|-
 +
|Фильтр
 +
|Ctrl+F
 +
|
 +
|
 +
|-
 +
|Печать
 +
|Ctrl+P
 +
|
 +
|
 +
|-
 +
|Сохранить и вернуть
 +
|Shift+Enter
 +
|
 +
|
 +
|-
 +
|Проверить
 +
|F7
 +
|
 +
|
 +
|-
 +
|}
  
 
=== В окнах списках ===
 
=== В окнах списках ===
* Ctrl+F4? Закрыть текущий список
+
* Ctrl+F4 - Закрыть текущий список
 +
* Ctrl+I - Включить инкрементальный поиск по таблице
 +
 
 +
=== Для разработчика ===
 +
 
 +
  IBISShortCut_DebuInfo : String = 'Ctrl+Shift+L'; // сочетание клавиш для показа системной информации об окне (имя класса, идентификатор объекта и т.п)
 +
  IBISShortCut_Audit    : String = 'Ctrl+Shift+H'; // сочетание клавиш для вызова окна аудита
  
 
== Окно с кнопками операций ==
 
== Окно с кнопками операций ==
Строка 35: Строка 101:
 
- наследник от TdxRibbonForm
 
- наследник от TdxRibbonForm
  
<source lang="delphi">
+
см [[MIS3. Иерархия классов]]
procedure TfmDict.FormCreate(Sender: TObject);
 
begin
 
  // для форм без списка достаточно только одного вызова
 
  // Проверяем доступ
 
//  dxbrUserControl.Visible := dmMain.CheckRight(1);
 
 
 
  if not rbtDict.IsMerged then  fmMain.rbtDict.Merge(rbtDict);
 
  dxRibbon1.Visible := False;
 
 
 
end;
 
</source>
 
  
 
== Окно список ==
 
== Окно список ==
Строка 59: Строка 114:
  
 
[[File:WinList.png]]
 
[[File:WinList.png]]
=== Код ===
+
см [[MIS3. Иерархия классов]]
<source lang="delphi">
 
interface
 
uses
 
  UniScript,uSFMessages;
 
 
 
implementation
 
uses
 
  dImages, dMain, fMain, dRef;
 
 
 
procedure TfmTeamList.FormActivate(Sender: TObject);
 
begin
 
  if Application.Terminated then exit;
 
 
 
  fmMain.rbtTeam.Active :=True;
 
  if not rbtTeamList.IsMerged then  fmMain.rbtTeam.Merge(rbtTeamList);
 
end;
 
//------------------------------------------------------------------------------
 
procedure TfmTeamList.FormClose(Sender: TObject; var Action: TCloseAction);
 
begin
 
  Action := caFree;
 
end;
 
//------------------------------------------------------------------------------
 
procedure TfmTeamList.FormCreate(Sender: TObject);
 
begin
 
  dxRibbon1.Visible := False;
 
  uqTeamList.Open;
 
  dmImages.il16.GetIcon(cii16_Brig,Self.Icon);
 
end;
 
//------------------------------------------------------------------------------
 
procedure TfmTeamList.FormDeactivate(Sender: TObject);
 
begin
 
  if rbtTeamList.IsMerged then  fmMain.rbtTeam.Unmerge(rbtTeamList);
 
end;
 
</source>
 
  
 
== WinOnTask ==
 
== WinOnTask ==
Строка 99: Строка 120:
 
- наследник от WinOnTask (кнопка на панели задач)
 
- наследник от WinOnTask (кнопка на панели задач)
 
- название заканчиваем на WOT (WinOnTask)
 
- название заканчиваем на WOT (WinOnTask)
 +
 +
[[Файл:IBIS_WOT1.png]]
  
 
=== Дизайн ===
 
=== Дизайн ===
Строка 104: Строка 127:
 
* TdxBarmanager
 
* TdxBarmanager
 
* dxRibbon.showheaders := False (в дизайнере)
 
* dxRibbon.showheaders := False (в дизайнере)
* From.OnClose - и не забываем оставлять inherided
 
* FormOnCreate
 
  
=== Код ===
+
см [[MIS3. Иерархия классов]]
<source lang="delphi">
 
uses
 
  fWinOnTask
 
...
 
type
 
  TfmTeamWOT = class(TfmWinOnTask)
 
  
  private
+
== Правила дизайна Ribbon ==
    procedure SaveData;
+
* Подпись к группе кнопок должна быть существительным с Большой буквы (Файлы, Пользователи, Расписание, Документы, Действия и т.п.)
    procedure CheckData;
+
* Подписи к кнопкам должны по возможности означать действие (глагол в совершенной форме) над объектом который указан в заголовке группы. Например: Сохранить, Редактировать, Закрыть, Удалить. Для двухсловных действий (Показать фильтр, Показать расписание) допускается пропуск действия. Т.е. Указываем просто Фильтр, Расписание и т.п. По возможности подпись к кнопке должна состоять из одного слова.
    procedure SetCaption;
 
    procedure SetControls;
 
    procedure SetRequedFieldStyle;
 
    procedure SendMessageOnChange;
 
  public
 
    procedure InitData(AID:Integer);
 
  end;
 
  
implementation
+
== Модальное окно ==
 +
[[Файл:ibis_modal.png]]
  
{$R *.dfm}
+
== Простое модальное окно ==
 +
* Panel
 +
** Align := paBottom
 +
** Height := 41
 +
* Кнопки
 +
** Width := 75
 +
** Top := 8
 +
** Height := 25
 +
** Anchors := [akTop,akRight]
 +
** Кнопка "Отмена" Left := Panel.Width-15-75 := Panel.Width -90
 +
** Кнопка "ОК"  Left := Panel.Width-(15-75)*2 := Panel.Width -180  расстояние между кнопками = 15
 +
** Кнопки TcxButton, Skin = ultraflat, skin = UserSkin
 +
** Кнопка OK имеет значение Default := True;
  
uses  
+
== Поддержка скинов ==
  dMain, dImages, fMain, uSFVCLUtils, uSFMessages, uUniUtils;
+
Проект внутри себя не должен содержать никаких скинов. Все скины находятся во внешних файлах в папке skins и подгружаются динамически.
 +
Поэтому в исходных кодах в секции uses не должно быть следующих файлов (компиляция на сервере не пройдет):
  
 +
* dxSkinBlack.dcu                 
 +
* dxSkinBlue.dcu                   
 +
* dxSkinBlueprint.dcu             
 +
* dxSkinCaramel.dcu               
 +
* dxSkinCoffee.dcu                 
 +
* dxSkinDarkRoom.dcu               
 +
* dxSkinDarkSide.dcu               
 +
* dxSkinDevExpressDarkStyle.dcu   
 +
* dxSkinDevExpressStyle.dcu       
 +
* dxSkinFoggy.dcu                 
 +
* dxSkinGlassOceans.dcu           
 +
* dxSkinHighContrast.dcu           
 +
* dxSkiniMaginary.dcu             
 +
* dxSkinLilian.dcu                 
 +
* dxSkinLiquidSky.dcu             
 +
* dxSkinLondonLiquidSky.dcu       
 +
* dxSkinMcSkin.dcu                 
 +
* dxSkinMetropolis.dcu             
 +
* dxSkinMetropolisDark.dcu         
 +
* dxSkinMoneyTwins.dcu             
 +
* dxSkinOffice2007Black.dcu       
 +
* dxSkinOffice2007Blue.dcu         
 +
* dxSkinOffice2007Green.dcu       
 +
* dxSkinOffice2007Pink.dcu         
 +
* dxSkinOffice2007Silver.dcu       
 +
* dxSkinOffice2010Black.dcu       
 +
* dxSkinOffice2010Blue.dcu         
 +
* dxSkinOffice2010Silver.dcu       
 +
* dxSkinOffice2013DarkGray.dcu     
 +
* dxSkinOffice2013LightGray.dcu   
 +
* dxSkinOffice2013White.dcu       
 +
* dxSkinPumpkin.dcu               
 +
* dxSkinSeven.dcu                 
 +
* dxSkinSevenClassic.dcu           
 +
* dxSkinSharp.dcu                 
 +
* dxSkinSharpPlus.dcu             
 +
* dxSkinSilver.dcu                 
 +
* dxSkinSpringTime.dcu             
 +
* dxSkinStardust.dcu               
 +
* dxSkinSummer2008.dcu             
 +
* dxSkinTheAsphaltWorld.dcu       
 +
* dxSkinValentine.dcu             
 +
* dxSkinVS2010.dcu                 
 +
* dxSkinWhiteprint.dcu             
 +
* dxSkinXmas2008Blue.dcu           
  
  procedure OpenTransport(AID:Integer);
+
Для того чтобы Delphi не включала эти файлы автоматически существует галочка
  procedure DeleteTransport(AID: Integer);
+
Project -> ModifySkinOption. (можно просто обновить файл из svn policlinic.skincfg)
  
  
procedure OpenTransport(AID:Integer);
+
[[Категория:Руководство программиста MIS3]]
var
 
  Form : TForm;
 
begin
 
  Form:=FindFormByTag(TfmTrasportWOT,AID);
 
  if Form=nil then
 
  begin
 
    Form := TfmTrasportWOT.Create(Application);
 
    TfmTrasportWOT(Form).InitData(AID);
 
    Form.Show;
 
  end;
 
end;
 
//------------------------------------------------------------------------------
 
procedure DeleteTransport(AID: Integer);
 
var
 
  us :TUniScript;
 
begin
 
  us := TUniScript.Create(dmMain);
 
  us.Connection := dmMain.con;
 
  //TEAM
 
//  TEAM_SHCEDULE_TRANSPORT
 
  us.SQL.Add('Delete from mm.transport_emp t where t.transport_id= &id ;');
 
  us.SQL.Add('update mm.team set transport_id=null where transport_id= &id ;');
 
  us.SQL.Add('Delete from mm.transport t where t.id= &id ;');
 
  us.MacroByName('id').AsString := intToStr(AID);
 
  try
 
    us.Execute;
 
  finally
 
    us.Free;
 
  end;
 
 
 
end;
 
 
 
</source>
 
 
 
== Модальное окно ==
 
* Здесь будет описание
 
 
 
== Простое модальное окно ==
 
* Ширина кнопок OK, Отмена = 75
 
* притянуты к правому краю панели
 
* расстояние между кнопками = 15
 
* Кнопки TcxButton, Kind = ultraflat
 
* Кнопка OK имеет значение Default := True;
 
 
 
[[Категория:MIS3]]
 

Текущая версия на 10:26, 19 мая 2015

Общие

  1. расстояние между контролами по вертикали 10
  2. свойство TOP для контролов: 10,41,72, 103,134,165 ,195
  3. метки обязательных полей подчеркиваются красным (см. dmImages.SetRequiredFieldLabelStyle)
  4. настройки соединения с БД в ibis.ini
  5. текущие настройки приложения (положения окон, выбранный стили и т.п.) в реестре Software\IBIS\MIS (актуальное значение находится в dConfig.dmConfig.AppStorage.Root). Путь ветки реестра правильно брать так dmConfig.AppStorage.Root + '\' + Self.ClassName
  6. русификация в файле russian.lng (в том числе и для других языков через cxLocalizer)
  7. стиль нередактируемых контролов dmImages.escInfo
  8. стиль заголовков (для cxLabel над списками и пр) - dmImages.escCaption.
    • cxlabel.Height := 14
    • cxlabel.Style.Font.Size := 8
  9. AlignWithMargin := False (Избегаем его использования)

Главное окно

Горячие клавиши

Здесь информация может немного устареть. См описание классов и исходные коды модулей MIS3._Иерархия_классов иконки, горячие клавиши определены в модуле dImages.pas. См. dImages.SetShurtCutOnRibbon(AForm:TForm);

Действие Hotkey Место применения Примечания
Сохранить F2 Ctrl+S
Сохранить и закрыть Ctrl+Q или Ctrl+Enter
Добавить F3, NumPlus
Редактировать F4
Обновить F5
Удалить Shift+Del
Закрыть F12 или ESC
Выбрать Shift+ENTER
Фильтр Ctrl+F
Печать Ctrl+P
Сохранить и вернуть Shift+Enter
Проверить F7

В окнах списках

  • Ctrl+F4 - Закрыть текущий список
  • Ctrl+I - Включить инкрементальный поиск по таблице

Для разработчика

 IBISShortCut_DebuInfo : String = 'Ctrl+Shift+L'; // сочетание клавиш для показа системной информации об окне (имя класса, идентификатор объекта и т.п)
 IBISShortCut_Audit    : String = 'Ctrl+Shift+H'; // сочетание клавиш для вызова окна аудита

Окно с кнопками операций

Назначение показ кнопок с различными списками, без реализации самих списков

- Название должно заканчиваться на Tab - наследник от TdxRibbonForm

см MIS3. Иерархия классов

Окно список

  • Отображает один список (список справочников, людей и т.п.)
  • имя pas-файлы должно заканчиваться на List
  • умеет реагировать на сообщения об обновлении

Дизайн

  • FormStyle = fsMDIChild
  • tdxbarmanager
  • TdxRibbon

WinList.png см MIS3. Иерархия классов

WinOnTask

- наследник от WinOnTask (кнопка на панели задач) - название заканчиваем на WOT (WinOnTask)

IBIS WOT1.png

Дизайн

  • Наследуем от TfmWinOnTask
  • TdxBarmanager
  • dxRibbon.showheaders := False (в дизайнере)

см MIS3. Иерархия классов

Правила дизайна Ribbon

  • Подпись к группе кнопок должна быть существительным с Большой буквы (Файлы, Пользователи, Расписание, Документы, Действия и т.п.)
  • Подписи к кнопкам должны по возможности означать действие (глагол в совершенной форме) над объектом который указан в заголовке группы. Например: Сохранить, Редактировать, Закрыть, Удалить. Для двухсловных действий (Показать фильтр, Показать расписание) допускается пропуск действия. Т.е. Указываем просто Фильтр, Расписание и т.п. По возможности подпись к кнопке должна состоять из одного слова.

Модальное окно

Ibis modal.png

Простое модальное окно

  • Panel
    • Align := paBottom
    • Height := 41
  • Кнопки
    • Width := 75
    • Top := 8
    • Height := 25
    • Anchors := [akTop,akRight]
    • Кнопка "Отмена" Left := Panel.Width-15-75 := Panel.Width -90
    • Кнопка "ОК" Left := Panel.Width-(15-75)*2 := Panel.Width -180 расстояние между кнопками = 15
    • Кнопки TcxButton, Skin = ultraflat, skin = UserSkin
    • Кнопка OK имеет значение Default := True;

Поддержка скинов

Проект внутри себя не должен содержать никаких скинов. Все скины находятся во внешних файлах в папке skins и подгружаются динамически. Поэтому в исходных кодах в секции uses не должно быть следующих файлов (компиляция на сервере не пройдет):

  • dxSkinBlack.dcu
  • dxSkinBlue.dcu
  • dxSkinBlueprint.dcu
  • dxSkinCaramel.dcu
  • dxSkinCoffee.dcu
  • dxSkinDarkRoom.dcu
  • dxSkinDarkSide.dcu
  • dxSkinDevExpressDarkStyle.dcu
  • dxSkinDevExpressStyle.dcu
  • dxSkinFoggy.dcu
  • dxSkinGlassOceans.dcu
  • dxSkinHighContrast.dcu
  • dxSkiniMaginary.dcu
  • dxSkinLilian.dcu
  • dxSkinLiquidSky.dcu
  • dxSkinLondonLiquidSky.dcu
  • dxSkinMcSkin.dcu
  • dxSkinMetropolis.dcu
  • dxSkinMetropolisDark.dcu
  • dxSkinMoneyTwins.dcu
  • dxSkinOffice2007Black.dcu
  • dxSkinOffice2007Blue.dcu
  • dxSkinOffice2007Green.dcu
  • dxSkinOffice2007Pink.dcu
  • dxSkinOffice2007Silver.dcu
  • dxSkinOffice2010Black.dcu
  • dxSkinOffice2010Blue.dcu
  • dxSkinOffice2010Silver.dcu
  • dxSkinOffice2013DarkGray.dcu
  • dxSkinOffice2013LightGray.dcu
  • dxSkinOffice2013White.dcu
  • dxSkinPumpkin.dcu
  • dxSkinSeven.dcu
  • dxSkinSevenClassic.dcu
  • dxSkinSharp.dcu
  • dxSkinSharpPlus.dcu
  • dxSkinSilver.dcu
  • dxSkinSpringTime.dcu
  • dxSkinStardust.dcu
  • dxSkinSummer2008.dcu
  • dxSkinTheAsphaltWorld.dcu
  • dxSkinValentine.dcu
  • dxSkinVS2010.dcu
  • dxSkinWhiteprint.dcu
  • dxSkinXmas2008Blue.dcu

Для того чтобы Delphi не включала эти файлы автоматически существует галочка Project -> ModifySkinOption. (можно просто обновить файл из svn policlinic.skincfg)