Багатокритер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 на