Багатокритерiальна задача лiнiйного програмування
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
?омiрках рядка-заголовка та стовпця-заголовка таблицi.
ФормуСФ та вiдкриваСФ контекстне меню для вибору типу комiрки iз можливих
типiв для цiСФСЧ комiрки.}sc_CurProcName='EdLineTaskOnMouseUp';CurCol, CurRow, ArrayRow, ArrayCol: Integer; CurElmType:THeadLineElmType;:TPoint;
{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnMouseUp<>Nil then Self. OldOnMouseUp (Sender, Button, Shift, X, Y);
Sender=Nil then Exit;
{Якщо задано екранну таблицю даного об'СФкта TGridFormattingProcs:}Sender = Self. CurGrid thenButton=mbRight then {якщо була вiдпущена права кнопка мишi}
{ПробуСФмо узнати, на яку комiрку натиснула миша:}:=-1; CurRow:=-1;. CurGrid. MouseToCell (X, Y, CurCol, CurRow);:=Self. CurGrid. ClientToScreen (Point(X, Y));
{Координати комiрки у масивах таблицi i СЧСЧ заголовкiв:}:=CurRow-Self.CHeadRowNum-bc_LTaskRowsBeforeVars;:=CurCol-Self.CHeadColNum-bc_LTaskColsBeforeVars;
{Якщо натиснуто на комiрку рядка-заголовка:}(CurRow=Self.CHeadRowNum) and (ArrayCol>=0) and
(ArrayCol<Length (Self. CurHeadRow)) then{очищаСФмо меню перед заповненням:}. InitGridPopupMenu (Self. CurGrid);
{Якщо в екраннiй таблицi були змiни з часу останнього СЧСЧ читання,
то читаСФмо комiрку, для якоСЧ треба сформувати меню:}Self. CurGridModified then Self. ReadHeadRowCell(ArrayCol);
{ЧитаСФмо поточний тип комiрки:}:=Self. CurHeadRow[ArrayCol].ElmType;
{ДодаСФмо пункти меню:}
{Якщо в комiрцi число-то тип комiрки може бути тiльки числовий:}CurElmType=bc_Number then. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_ValInHeadColOrRow, True, CurElmType){якщо в комiрцi не число:}
{незалежна змiнна:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_IndependentVar,= bc_IndependentVar, bc_IndependentVar);
{залежна змiнна:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_DependentVar,= bc_DependentVar, bc_DependentVar);;If (CurCol=Self.CHeadColNum) and (ArrayRow>=0) and
(ArrayRow<Length (Self. CurHeadCol)) then{якщо натиснуто на комiрку стовпця-заголовка:}. InitGridPopupMenu (Self. CurGrid);
{Якщо в екраннiй таблицi були змiни з часу останнього СЧСЧ читання,
то читаСФмо комiрку, для якоСЧ треба сформувати меню:}Self. CurGridModified then Self. ReadHeadColCell(ArrayRow);
{ЧитаСФмо поточний тип комiрки:}:=Self. CurHeadCol[ArrayRow].ElmType;
{ДодаСФмо пункти меню:}
{Якщо в комiрцi число-то тип комiрки може бути тiльки числовий:}CurElmType=bc_Number then. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_ValInHeadColOrRow, True, CurElmType){якщо в комiрцi не число:}
{назва фiнкцiСЧ - рядка нерiвностi:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_InequalFuncName, CurElmType = bc_FuncVal, bc_FuncVal);
{назва функцiСЧ мети, що максимiзуСФться:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_DestFuncToMaxName, CurElmType = bc_DestFuncToMax,_DestFuncToMax);
{назва функцiСЧ мети, що мiнiмiзуСФться:}. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_DestFuncToMinName, CurElmType = bc_DestFuncToMin,_DestFuncToMin);;{якщо для даноСЧ комiрки вибiр типу не передбачено}{ставимо в меню координати комiрки
(щоб користувач взагалi помiтив, що меню СФтАж)}. InitGridPopupMenu (Self. CurGrid);. AddCellTypeItemToMenu (Self. CurGrid. PopupMenu,_Row+sc_DoubleSpot+sc_Space+IntToStr (ArrayRow+1)+sc_KrKm+_Space+sc_Col+sc_DoubleSpot+sc_Space+IntToStr (ArrayCol+1),, bc_OtherType);;
{ЗаписуСФмо координати комiрки для обробника вибору типу з меню:}. CurGridSolveCol:=ArrayCol;. CurGridSolveRow:=ArrayRow;
{ВiдображаСФмо меню:}. CurGrid. PopupMenu. Popup (MouseScrCoords.X, MouseScrCoords.Y);; {If Button=mbRight thenтАж}{If Sender = Self. CurGrid thenтАж}{якщо обробник викликала чужа таблиця або невiдомий об'СФкт:}Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_UnknownObjectCall+_DoubleQuot+Sender. ClassName+sc_DoubleQuot);;;
TGridFormattingProcs. ReactOnSetEditText (Sender: TObject; ACol,: Longint; const Value: string);
{Процедура для реагування на редагування вмiсту комiрок
пiд час редагування вхiдних даних. ВстановлюСФ прапорець:=True про те, що екранна таблиця маСФ змiни.}
{Старий обробник теж викликаСФмо, якщо вiн СФ:}@Self. OldOnSetEditText<>Nil then. OldOnSetEditText (Sender, ACol, ARow, Value);
. CurGridModified:=True;;
TGridFormattingProcs. SetNewState (Value:TTableFormatState);sc_CurProcName='SetNewState';StateSafe:TTableFormatState;, OldHRowPos: Integer;
{Процедура для змiни режиму форматування GrowingStringGrid}GoSolveLTask;{Вирiшування задачi ЛП симплекс-методом:}. ColCount:=bc_FixedCols+1;. RowCount:=bc_FixedRows+1;. FixedRows:=bc_FixedRows;. FixedCols:=bc_FixedCols;
Not (Self. PrepareToSolveLTask) then{Якщо не вдаСФться пiдготувати таблицю до вирiшування задачi:}:=Self. CurFormatState;
{ПеремикаСФмо на режим fs_NoFormatting, i назад у поточний,
щоб встановити усi настройки цього режиму (повернутися до них):}. TableFormatState:=fs_NoFormatting;. TableFormatState:=StateSafe;;;
. OnNewCol:=NumerationOnNewCol;. OnNewRow:=NumerationOnNewRow;. OnDrawCell:=EdLineTaskOnDrawCell;
. OnDblClick:=OldOnDblClick;. OnMouseUp:=OldOnMouseUp;
. OnSetEditText:=OldOnSetEditText;
{ВимикаСФмо редагування екранноСЧ таблицi:}. Options:=CurGrid. Options - [goEditing];;InSolving thenSelf. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_CantChangeStateInSolving);;;
Self. CurGrid=Nil then {Якщо екранну таблицю не задано:}{запам'ятовуСФмо поточний режим, i бiльше нiчого не робимо тут:}. CurFormatState:=Value; Exit;;
{Якщо задано новий режим:}Self. CurFormatState<>Value then{Якщо форматування було вимкнене:}Self. CurFormatState=fs_NoFormatting then{Запам'ятовуСФмо обробники подiй, якi замiнимо на своСЧ
форматувальники:}:=CurGrid. OnNewCol;:=CurGrid. OnNewRow;:=CurGrid. OnDrawCell;:=CurGrid. OnDblClick;:=CurGrid. OnSetEditText;:=CurGrid. OnMouseUp;;
{Якщо таблиця редагована, то приймаСФмо останнi змiни перед
змiною режиму:}Self. CurGridModified then Self. Refresh;
Value of_EnteringEqs: {редагування таблицi системи лiнiйних рiвнянь:}
{ВстановлюСФмо потрiбну кiлькiсть рядкiв i стовпцiв екранноСЧ
таблицi для фiксованих заголовкiв (тiльки для читання).
Для цього забезпечуСФмо щоб кiлькiсть рядкiв i стовпцiв не була
меншою за потрiбну кiлькiсть фiксованих, плюс хоч один
стовпець / рядок (хоч одна комiрка) для редагування:}CurGrid. ColCount<bc_FixedCols+1 then. ColCount:=bc_FixedCols+1;CurGrid. RowCount<bc_FixedRows+1 then. RowCount:=bc_FixedRows+1;
. FixedRows:=bc_FixedRows;. FixedCols:=bc_FixedCols;
{Позицiювання таблицi до змiни режиму:}:=Self.CHeadColNum; OldHRowPos:=Self.CHeadRowNum;
{Позицiювання вiдображення таблицi у даному режимi редагування:}.CHeadColNum:=CurGrid. FixedCols-1;.CHeadRowNum:=CurGrid. FixedRows-1;
{Якщо позицiювання змiнилося, то вiдображаСФмо таблицю
в новому мiii:}(OldHColPos<>Self.CHeadColNu