Багатокритерiальна задача лiнiйного програмування
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
(Not (ACol<(Self.CHeadColNum+bc_LTaskColsBeforeVars))) then:=Self. CurHeadRow [ACol - Self.CHeadColNum-_LTaskColsBeforeVars].ElmType;:=GetColorByElmType(CurVarColState);
CurColor<>bc_NotColored then {якщо комiрку треба пофарбувати:}{МалюСФмо текст на фонi з кольором CurColor:}. Canvas. Brush. Color:=CurColor;. Canvas. TextRect (Rect, Rect. Left, Rect. Top,. Cells [ACol, ARow]);;
. Canvas. Brush. Color:=SafeBrushColor;;;
TGridFormattingProcs. EdLineTaskOnDblClick (Sender: TObject);
{Процедура реагуСФ на подвiйне натискання лiвою кнопкою мишi на
комiрки рядка-заголовка таблицi (другий рядок StringGrid).
РедагуСФ масив позначок про обранi стовпцi (SipmlexVarsDependencyRec)
залежних змiнних. Залежнi змiннi - це змiннi, для яких СФ умова
невiд'СФмностi. Тобто вони не повиннi бути менше нуля.}CurGrid:TStringGrid; CurCol, CurRow: Integer;:TPoint;Sender=Nil then Exit;
{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnDblClick<>Nil then Self. OldOnDblClick(Sender);
Sender is TStringGrid then:=TStringGrid(Sender);
{ПробуСФмо узнати, на яку комiрку двiчi натиснула миша:}:=CurGrid. ScreenToClient (Mouse. CursorPos);:=-1; CurRow:=-1;. MouseToCell (MouseCoordsInGrid.X, MouseCoordsInGrid.Y, CurCol, CurRow);
{Якщо натиснуто на комiрку-заголовок стовпця коефiцiСФнтiв при змiннiй, то:}((CurCol>=(Self.CHeadColNum+bc_LTaskColsBeforeVars)) and
(CurCol<(CurGrid. ColCount-bc_LTaskColsAfterVars))) and
(CurRow=Self.CHeadRowNum) then
{ЗмiнюСФмо ознаку залежностi вiдповiдноСЧ змiнноСЧ:}CurHeadRow [CurCol - Self.CHeadColNum-_LTaskColsBeforeVars].ElmType=bc_IndependentVar then[CurCol - Self.CHeadColNum-_LTaskColsBeforeVars].ElmType:=bc_DependentVar[CurCol - Self.CHeadColNum-_LTaskColsBeforeVars].ElmType:=bc_IndependentVar;
{ЗадаСФмо перемалювання комiрок, щоб вiдобразилася змiна позначки
для змiнноСЧ:}. Invalidate;;;;
TGridFormattingProcs. InitGridPopupMenu (SGrid:TStringGrid);
{Процедура перевiряСФ наявнiсть об'СФкта TPopupMenu. Якщо його немаСФ
(SGrid. PopupMenu=Nil), то створюСФ новий.
ВидаляСФ усi пунтки (елементи, теми) з меню.}SGrid. PopupMenu=Nil then. PopupMenu:=TPopupMenu. Create(Application);;. PopupMenu. AutoPopup:=False;. PopupMenu. Items. Clear;;
TGridFormattingProcs. ProcOnCellTypeSelInMenu (Sender: TObject);
{Обробник вибору пункту в меню типiв для комiрки
рядка - чи стовпця-заголовка.}sc_CurProcName='ProcOnCellTypeSelInMenu';ReportUnsupportedCell;
{ВiдображаСФ координати комiрки з повiдомленням про те, що вона
не пiдтримуСФться:}Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_NoCellOrNotSupported+
' ['+IntToStr (Self. CurGridSolveCol)+';'+IntToStr (Self. CurGridSolveRow)+
']тАж ');;;CurMenuItem:TMenuItem; TypeForCell:THeadLineElmType;(Sender=Nil) or (Not (Sender is TMenuItem)) thenSelf. MemoForOutput<>Nil then. MemoForOutput. Lines. Add (sc_CurProcName + sc_CantDetMenuItem);;;
{ЧитаСФмо тип, що обраний для комiрки:}:=TMenuItem(Sender);:=THeadLineElmType (CurMenuItem. Tag);
(Self. CurGridSolveCol<0) and (Self. CurGridSolveRow<0) then{якщо комiрка вище чи лiвiше заголовкiв таблицi:}; Exit;;
{ПеревiряСФмо координати комiрки i змiнюСФмо СЧСЧ тип:}
{координати комiрки мають бути записанi у CurGridSolveRow i CurGridSolveCol:}Self. CurGridSolveRow=-bc_LTaskRowsBeforeVars then{якщо це комiрка рядка-заголовка:}Length (Self. CurHeadRow)>Self. CurGridSolveCol then {якщо комiрка iснуСФ:}{задаСФмо тип комiрки:}. CurHeadRow [Self. CurGridSolveCol].ElmType:=TypeForCell;{якщо в рядку-заголовку немаСФ такоСЧ комiрки:}; Exit;;if Self. CurGridSolveCol=-bc_LTaskColsBeforeVars then{якщо це комiрка стовпця-заголовка:}Length (Self. CurHeadCol)>Self. CurGridSolveRow then {якщо комiрка iснуСФ:}{задаСФмо тип комiрки:}. CurHeadCol [Self. CurGridSolveRow].ElmType:=TypeForCell;{якщо в стовпцi-заголовку немаСФ такоСЧ комiрки:}; Exit;;{якщо комiрка у таблицi коефiцiСФнтiв або правiше чи нижче неСЧ:}; Exit;;
{Якщо тип комiрки змiнено, то перемальовуСФмо екранну таблицю для
вiдображення нового типу комiрки:}Self. CurGrid<>Nil then Self. CurGrid. Invalidate;;
TGridFormattingProcs. AddCellTypeItemToMenu (SMenu:TPopupMenu;: String; IsCurrentItem: Boolean; SAssocType:THeadLineElmType;: Boolean=True);
{ДодаСФ пункт меню для вибору типу комiрки в таблицi з заданим
написом SCaption i кругом того кольору, що асоцiйований з даним
типом SAssocType. Для нового пункту меню настроюСФ виклик процедури обробки
комiрки для задавання СЧй обраного типу SAssocType. Значення SAssocType
записуСФ у поле Tag об'СФкта пункту меню.
Вхiднi данi:- контекстне меню для комiрки, що формуСФться;- пiдпис для пункту меню (назва типу комiрки);- ознака того, що даний пункт меню маСФ бути поточним
(ввiмкненим, вiдмiченим) - що це поточний тип комiрки;- тип комiрки, що прив'язаний до цього пункта меню, i буде
присвоСФний комiрцi при виборi цього пункту;- вмикач настройки виклику процедури задавання нового
типу комiрки (при виборi елемента меню). При ToSetReactOnClick=False
це не виконуСФться, i натискання елемента меню не викликаСФ нiяких дiй.}CurMenuItem:TMenuItem;:TColor;SMenu=Nil then Exit; {якщо меню не задано - елемент не додаСФмо в нього}
{СтворюСФмо новий тункт меню:}:=TMenuItem. Create(Application);
{ОтримуСФмо колiр для даного типу комiрки:}:=Self. GetColorByElmType(SAssocType);
{Бiля тексту малюСФмо круг такого кольору, який асоцiйований
з типом комiрки, i буде присвоСФний СЧй у разi вибору цього пунтку
меню:}. Bitmap. Height:=bc_MenuItemColorCircleDiameter;. Bitmap. Width:=bc_MenuItemColorCircleDiameter;. Bitmap. Canvas. Pen. Color:=SAssocColor;. Bitmap. Canvas. Brush. Color:=SAssocColor;. Bitmap. Canvas. Ellipse (CurMenuItem. Bitmap. Canvas. ClipRect);
{0 - картинка задана у самому об'СФктi, а не в SMenu. Images:}. ImageIndex:=0;. RadioItem:=True; {промальовувати перемикач, якщо не буде картинки}
{Текст пункту меню:}. Caption:=SCaption;
. Checked:=IsCurrentItem;
ToSetReactOnClick then {якщо обробка вибору елемента меню ввiмкнена}
{Тип для комiрки у випадку вибору цього пунтку меню:}. Tag:=Integer(SAssocType);
{Процедура-обробник вибору пункта меню:}. OnClick:=Self. ProcOnCellTypeSelInMenu;. AutoCheck:=True;;
. Items. Add(CurMenuItem);;
(* {РЖдентифiкатор для типу елемента масиву чисел та iмен змiнних.
Типи змiнних: залежнi, незалежнi, функцiСЧ (умови-нерiвностi).
Залежнi змiннi - це змiннi, для яких дiСФ умова невiд'СФмностi:}=(bc_IndependentVar, bc_DependentVar, bc_FuncVal, bc_Number,_DestFuncToMax);} *)TGridFormattingProcs. EdLineTaskOnMouseUp (Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);
{Процедура реагуСФ на вiдпускання правоСЧ кнопки мишi на