TBeCbFormVariantMaskEdit
TBeCbFormVariantMaskEdit
Dialog zum Definieren eines Varianten-Arrays.
Findet Verwendung im Codeblock Standard-Modul "Sachmerkmalleisten".
Eigenschaften
Eigenschaften | Beschreibung |
---|---|
CbSLMemo:C | Varianten-Definition als String |
CbModified:L | Gibt an, ob Änderungen an der Varianten-Definition durchgeführt wurden. |
CbReadOnly:L | True Die Varianten-Definition kann nicht verändert werden. Sämtliche Controls zum Ändern der Varianten-Definition sind disabled. False(Default) Die Varianten-Definition kann beliebig verändert werden. |
Ereignisse | Beschreibung |
---|---|
OnSave | Beim Speichern der Änderungen |
OnCancel | Beim Speichern der Änderungen |
Beispiel
CODE
//##############################################################################
//##############################################################################
// Beschreibung: Beispiel für die Benutzung des Variatnendialogs
// (TBeCbFormVariantMaskEdit) im Codeblock.
//##############################################################################
//##############################################################################
|
m_oOwner:P1,
m_cPositionSaveID,
m_cBrowserID,
m_cSMLFieldName,
m_nSMLWorkarea,
m_bCanClose,
m_oDM,
m_oMainTable,
ds_MainTable,
m_bMainTableExpicitPost,
// Actions
A_Save, A_Cancel, A_EditSML,
// GUI-Controls
oForm, pnl_Detail, grd_Main, ipnl_EditAttribs, pnl_EditAttribs,
pnl_Grid, ipnl_SML, pnl_SMLCode, edt_SMLCode, ipnl_SMLCode,
pnl_Toolbar, toolbar_Main, tb_Save, tb_Cancel, tb_Split, tb_EditSML,
pnl_SMLControl, btn_AttribsToText, btn_AttribsFromText
|
//##############################################################################
//##############################################################################
// Konstanten
//##############################################################################
//##############################################################################
m_cPositionSaveID := '@VARIANT_POS',
m_cBrowserID := 'ART_FIN',
m_cSMLFieldName := 'SL_MEMO',
m_nSMLWorkarea := waDab010,
//##############################################################################
//##############################################################################
// Funktionen
//##############################################################################
//##############################################################################
//******************************************************************************
// SLMemo aus aktuellen Datensatz der Haupttabelle holen
// @Result: string
//******************************************************************************
function GetSLMemo()
Result := AsString(m_cSMLFieldName, m_oMainTable),
end,
//******************************************************************************
// Zentrale Steuerung des "Enabled-Zustand" aller Actions
//******************************************************************************
function ActionsEnabled()
| bInEditMode, bMainTableIsEmpty |
bInEditMode := EditModes(m_oMainTable),
bMainTableIsEmpty := Bof(m_oMainTable) and Eof(m_oMainTable),
// Buttons in der Toolbar En-/Disablen
A_Save.Enabled := bInEditMode,
A_Cancel.Enabled := bInEditMode,
A_EditSML.Enabled := not bMainTableIsEmpty,
end,
//******************************************************************************
// Oberflächen-Controls aktualisieren
// @Result: null
//******************************************************************************
function RefreshControls()
| cSLMemo |
cSLMemo := GetSLMemo(),
pnl_EditAttribs.FormVarCalc.PL_Memo := cSLMemo,
edt_SMLCode.Text := cSLMemo,
end,
//******************************************************************************
// Neue Spalte in einem TBeAltGrid hinzufügen
// cFieldName: Name des Feldes, dessen Inhalt angezeigt werden soll
// cCaption: Anzeigename für das Feld
// @Result: TBeColumn
//******************************************************************************
function TBeAltGrid_AddColumn(oSelf, cFieldName, cCaption)
Result := CollAdd(oSelf),
Result.FieldName := cFieldName,
Result.Title.Caption := cCaption,
end,
//******************************************************************************
// SLMemo String speichern
// @Result: null
//******************************************************************************
function SaveSLMemo(cSLMemo)
| oField |
BeginSuspend(m_oMainTable),
startseq
SetErrorIf(not DbEdit(m_oMainTable),
'Datensatz konnte nicht bearbeitet werden'),
oField := DbField(m_cSMLFieldName, m_oMainTable),
SetErrorIf(Empty(oField),
'Feld <' + m_cSMLFieldName + '> nicht vorhanden!'),
SetErrorIf(not DbReplace(oField, cSLMemo),
'SLMemo-String konnte nicht gespeichert werden!'),
RefreshControls(),
always
EndSuspend(m_oMainTable),
stopseq,
end,
//******************************************************************************
// Variantendialog erzeugen und anzeigen
// @Result: null
//******************************************************************************
function ShowVariantEdit()
| oVariantEdit |
m_bCanClose := True,
oVariantEdit := CreateObject('TBeCbFormVariantMaskEdit', '', oForm),
oVariantEdit.PositionSaveID := m_cPositionSaveID,
oVariantEdit.CbSLMemo := GetSLMemo(),
AssignEvent(oVariantEdit, 'OnSave', 'VariantEdit_Save'),
AssignEvent(oVariantEdit, 'OnCancel', 'VariantEdit_Cancel'),
AssignEvent(oVariantEdit, 'OnCloseQuery', 'VariantEdit_CloseQuery'),
ShowModal(oVariantEdit),
end,
//##############################################################################
//##############################################################################
// Eventhandler
//##############################################################################
//##############################################################################
//******************************************************************************
// Event: OnScroll_Update
//******************************************************************************
function DataSource_ScrollUpdate()
ActionsEnabled(),
RefreshControls(),
end,
//******************************************************************************
// Event: BeforePost
//******************************************************************************
function MainTable_BeforePost(Sender)
if m_bMainTableExpicitPost then
m_bMainTableExpicitPost := False,
else
Abort(True),
endif,
end,
//******************************************************************************
// Event: Beim Speichern des SLMemo Strings
//******************************************************************************
function VariantEdit_Save(Sender)
startseq
SaveSLMemo(Sender.CbSLMemo),
onerror
MessageDlg('Fehler beim Speichern des SLMemo-Strings: [' + CRLF +
GetErrorText() + CRLF +
']'),
DbCancel(m_oMainTable),
stopseq,
end,
//******************************************************************************
// Event: Beim Klick auf "Abbrechen" im Variantendialog
//******************************************************************************
function VariantEdit_Cancel(Sender)
m_bCanClose := True,
if Sender.CbModified then
m_bCanClose := Jn('Änderungen verwerfen?'),
endif,
end,
//******************************************************************************
// Event: Kann der Dialog geschlossen werden?
//******************************************************************************
function VariantEdit_CloseQuery(Sender, CanClose)
CanClose := m_bCanClose,
// Globale CanClose-Variable muss zurückgesetzt werden, damit der Dialog beim
// nächsten Schließen "normal" geschlossen werden kann.
m_bCanClose := True,
end,
//******************************************************************************
// Event: Merkmale zu Text
//******************************************************************************
function btn_AttribsToTextExecute(Sender)
edt_SMLCode.Text := pnl_EditAttribs.FormVarCalc.PL_Memo,
end,
//******************************************************************************
// Event: Merkmale aus Text
//******************************************************************************
function btn_AttribsFromTextExecute(Sender)
pnl_EditAttribs.FormVarCalc.PL_Memo := edt_SMLCode.Text,
end,
//##############################################################################
//##############################################################################
// Actionhandler
//##############################################################################
//##############################################################################
//******************************************************************************
// Action: Änderung speichern
//******************************************************************************
function A_SaveExecute(Sender)
m_bMainTableExpicitPost := True,
if not DbPost(m_oMainTable) then
MessageDlg('Änderungen konnten nicht gespeichert werden!', mtError),
endif,
end,
//******************************************************************************
// Action: Änderung verwerfen
//******************************************************************************
function A_CancelExecute(Sender)
if Jn('Änderungen verwerfen?') then
DbCancel(m_oMainTable),
endif,
end,
//******************************************************************************
// Action: Sachmerkmalleiste bearbeiten
//******************************************************************************
function A_EditSMLExecute(Sender)
ShowVariantEdit(),
end,
//##############################################################################
//##############################################################################
// Oberflächen-Funktionen
//##############################################################################
//##############################################################################
//******************************************************************************
// InitForm lädt das Formular in Abhängigkeit des Owners
// @Result: null
//******************************************************************************
function InitForm()
if Empty(m_oOwner) then
oForm := CreateObject('TFormEx', 'FormEx'),
else
oForm := CreateObject('TFormEx', 'FormEx', m_oOwner, m_oOwner),
oForm.FormStyle := fsMDIChild,
oForm.Windowstate := wsMaximized,
endif,
//---------------------------------------------------------------------------
// Formular erstellen
oForm.Name := GFU_CalcFormularName('', oForm, m_oOwner),
oForm.OrigCapt := 'Beispielprogramm für den Variantendialog im Codeblock',
oForm.Font.Name := 'Segoe UI',
oForm.Width := 1200,
//---------------------------------------------------------------------------
// Panel für Toolbar erstellen
pnl_Toolbar := CreateObject('TBePanel', 'pnl_Toolbar', oForm, oForm),
pnl_Toolbar.Align := alTop,
pnl_Toolbar.AlignWithMargins := True,
pnl_Toolbar.Caption := '',
pnl_Toolbar.Height := 24,
pnl_Toolbar.BevelOuter := bvNone,
//---------------------------------------------------------------------------
// Toolbar erstellen
toolbar_Main := CreateObject('TToolbar', 'toolbar_Main', pnl_Toolbar, pnl_Toolbar),
toolbar_Main.Images := BeImageList(nImageListMain16),
toolbar_Main.AllowTextButtons := True,
//---------------------------------------------------------------------------
// Toolbuttons erstellen
// * Sachmerkmalleiste bearbeiten
tb_EditSML := CreateObject('TToolButton', 'tb_EditSML', toolbar_Main, toolbar_Main),
tb_EditSML.Style := 5, // tbsTextButton
// * Splitter
tb_Split := CreateObject('TToolButton', 'tb_Split', toolbar_Main, toolbar_Main),
tb_Split.Style := 3,
tb_Split.Width := 7,
// * Abbrechen
tb_Cancel := CreateObject('TToolButton', 'tb_Cancel', toolbar_Main, toolbar_Main),
// * Speichern
tb_Save := CreateObject('TToolButton', 'tb_Save', toolbar_Main, toolbar_Main),
//---------------------------------------------------------------------------
// Panel für Grid erstellen
pnl_Grid := CreateObject('TBePanel', 'pnl_Grid', oForm, oForm),
pnl_Grid.Align := alLeft,
pnl_Grid.ShowBeSplitter := True,
pnl_Grid.BevelOuter := bvNone,
pnl_Grid.Width := 450,
//---------------------------------------------------------------------------
// InfoPanel "Sachmerkmalleisten" erstellen
ipnl_SML := CreateObject('TBeInfoPanel', 'ipnl_SML', oForm, pnl_Grid),
ipnl_SML.Align := alTop,
ipnl_SML.AlignWithMargins := True,
ipnl_SML.Caption := 'Sachmerkmalleisten',
//---------------------------------------------------------------------------
// Grid erstellen (DAB010)
grd_Main := CreateObject('TBeAltGrid', 'grd_Main', oForm, pnl_Grid),
grd_Main.Align := alClient,
grd_Main.Margins.Top := 0,
grd_Main.AlignWithMargins := True,
//---------------------------------------------------------------------------
// Detail-Panel erstellen
pnl_Detail := CreateObject('TBePanel', 'pnl_Detail', oForm, oForm),
pnl_Detail.Align := alClient,
pnl_Detail.Caption := '',
pnl_Detail.ShowBeSplitter := True,
pnl_Detail.BevelOuter := bvNone,
//---------------------------------------------------------------------------
// InfoPanel "Sachmerkmale bearbeiten" erstellen
ipnl_EditAttribs := CreateObject('TBeInfoPanel', 'ipnl_EditAttribs', oForm, pnl_Detail),
ipnl_EditAttribs.Align := alTop,
ipnl_EditAttribs.AlignWithMargins := True,
ipnl_EditAttribs.Caption := 'Ausprägungen bearbeiten',
//---------------------------------------------------------------------------
// Button "Merkmale als Text" erstellen
btn_AttribsToText := CreateObject('TBeBitBtn', 'btn_AttribsToText', oForm, pnl_Detail),
btn_AttribsToText.Align := alTop,
btn_AttribsToText.AlignWithMargins := True,
btn_AttribsToText.Caption := 'Merkmale in Text konvertieren',
btn_AttribsToText.ImageIndex.IndexNormal := 24,
btn_AttribsToText.Height := 22,
AssignEvent(btn_AttribsToText, 'OnClick', 'btn_AttribsToTextExecute'),
//---------------------------------------------------------------------------
// TVarCalcPanel zum bearbeiten der Sachmerkmale erstellen
pnl_EditAttribs := CreateObject('TVarCalcPanel', 'pnl_EditAttribs', oForm, pnl_Detail),
pnl_EditAttribs.Align := alClient,
pnl_EditAttribs.Margins.Top := 0,
pnl_EditAttribs.AlignWithMargins := True,
pnl_EditAttribs.Caption := '',
pnl_EditAttribs.BevelOuter := bvNone,
pnl_EditAttribs.FormVarCalc.Font.Name := 'Segoe UI',
//---------------------------------------------------------------------------
// Detail-Control-Panel erstellen
pnl_SMLControl := CreateObject('TBePanel', 'pnl_SMLControl', oForm, pnl_Detail),
pnl_SMLControl.Align := alBottom,
pnl_SMLControl.AlignWithMargins := True,
pnl_SMLControl.Caption := '',
//pnl_SMLControl.Width := 24,
pnl_SMLControl.Height := 48,
pnl_SMLControl.BevelOuter := bvNone,
//---------------------------------------------------------------------------
// SML-Code-Panel erstellen
pnl_SMLCode := CreateObject('TBePanel', 'pnl_SMLCode', oForm, oForm),
pnl_SMLCode.Align := alRight,
pnl_SMLCode.Caption := '',
pnl_SMLCode.ShowBeSplitter := True,
pnl_SMLCode.Width := 300,
pnl_SMLCode.BevelOuter := bvNone,
//---------------------------------------------------------------------------
// InfoPanel "Sachmerkmalleiste als Text" erstellen
ipnl_SMLCode := CreateObject('TBeInfoPanel', 'ipnl_SMLCode', oForm, pnl_SMLCode),
ipnl_SMLCode.Align := alTop,
ipnl_SMLCode.AlignWithMargins := True,
ipnl_SMLCode.Caption := 'Sachmerkmalleiste als Text',
//---------------------------------------------------------------------------
// Button "Merkmale aus Text" erstellen
btn_AttribsFromText := CreateObject('TBeBitBtn', 'btn_AttribsFromText', oForm, pnl_SMLCode),
btn_AttribsFromText.Align := alTop,
btn_AttribsFromText.AlignWithMargins := True,
btn_AttribsFromText.Caption := 'Merkmale aus Text befüllen',
btn_AttribsFromText.ImageIndex.IndexNormal := 23,
btn_AttribsFromText.Height := 22,
AssignEvent(btn_AttribsFromText, 'OnClick', 'btn_AttribsFromTextExecute'),
//---------------------------------------------------------------------------
// Edit für den Code der Sachmerkmalleiste erstellen
edt_SMLCode := CreateObject('TBeEdit', 'edt_SMLCode', oForm, pnl_SMLCode),
edt_SMLCode.Align := alClient,
edt_SMLCode.Margins.Top := 0,
edt_SMLCode.AlignWithMargins := True,
edt_SMLCode.Autosize := False,
edt_SMLCode.WordWrap := True,
edt_SMLCode.WantReturns := True,
edt_SMLCode.Text := '',
//---------------------------------------------------------------------------
// Lokales DataSource erstellen
ds_MainTable := CreateObject('TDataSourceEx', 'ds_MainTable', oForm),
AssignEvent(ds_MainTable, 'OnScroll_Update', 'DataSource_ScrollUpdate'),
end,
//******************************************************************************
// Actions erzeugen
// @Result: null
//******************************************************************************
function InitActions()
// Action: Speichern
A_Save := CreateObject('TAction', 'A_Save', oForm),
A_Save.Caption := '',
A_Save.Hint := 'Änderungen speichern',
A_Save.ImageIndex := 7,
A_Save.Enabled := False,
AssignEvent(A_Save, 'OnExecute', 'A_SaveExecute'),
// Action: Abbrechen
A_Cancel := CreateObject('TAction', 'A_Cancel', oForm),
A_Cancel.Caption := '',
A_Cancel.Hint := 'Änderungen verwerfen',
A_Cancel.ImageIndex := 8,
A_Cancel.Enabled := False,
AssignEvent(A_Cancel, 'OnExecute', 'A_CancelExecute'),
// Action: Sachmerkmalleiste bearbeiten
A_EditSML := CreateObject('TAction', 'A_EditSML', oForm),
A_EditSML.Caption := 'Sachmerkmalleiste bearbeiten',
A_EditSML.Hint := 'Sachmerkmalleiste bearbeiten',
A_EditSML.ImageIndex := 284,
A_EditSML.Enabled := False,
AssignEvent(A_EditSML, 'OnExecute', 'A_EditSMLExecute'),
// Actions zuordnen
tb_Save.Action := A_Save,
tb_Cancel.Action := A_Cancel,
tb_EditSML.Action := A_EditSML,
end,
//******************************************************************************
// Eigenes Datenmodul erstellen, benötigte Tabellen öffnen und mit GUI verbinden
//******************************************************************************
function OpenDataBaseAndLinkToGUI()
| oColumn |
// Lokales DataSource mit Haupttabelle verbinden
m_oDM := CreateObject('TBeDbGet', 'm_oDM', oForm),
m_oMainTable := DbGetTable(m_oDM, m_nSMLWorkarea, 'DAB010'),
AssignEvent(m_oMainTable, 'BeforePost', 'MainTable_BeforePost'),
DbGoTop(m_oMainTable),
ds_MainTable.DataSet := m_oMainTable,
GFU_Docking_LinkMasterTableToLocalDataSource(
m_oMainTable,
ds_MainTable,
m_nSMLWorkarea,
'TBeRightsTable'
),
// Grid mit Haupttabelle verbinden
grd_Main.DataSource := ds_MainTable,
grd_Main.RegisterDataSet := m_oMainTable,
// HINWEIS:
// Um den Standard-Artikel-Browser zu nutzen müssen folgende zwei Zeilen
// einkommentiert werden (kann zu schlechter Performance führen):
//grd_Main.ID := m_cBrowserID,
//grd_Main.ReadWriteProps := 0,
// Grid: Ggf. eigene Spalten hinzufügen/initialisieren
// (darf erst nach der DB Initialisierung gemacht werden)
if grd_Main.ID == '' then
oColumn := TBeAltGrid_AddColumn(grd_Main.Columns, 'ID', 'ID'),
oColumn.Width := 35,
if m_nSMLWorkarea = waDab010 then
TBeAltGrid_AddColumn(grd_Main.Columns, 'ARTNR', 'Artikelnummer'),
oColumn := TBeAltGrid_AddColumn(grd_Main.Columns, 'BEZ', 'Bezeichnung'),
oColumn.Width := 243,
oColumn.BeAttr.Caption := 'Bezeichnung',
oColumn.BeAttr.FuncBlock := 'AllTrim(BEZ1) + iif(Empty(AllTrim(BEZ2)), ""," / " + AllTrim(BEZ2))',
endif,
endif,
end,
//******************************************************************************
// ShowGUI zeigt das GUI an, das vorher mit LoadGUI geladen werden muss.
// @Result: null
//******************************************************************************
function ShowGUI()
if Empty(m_oOwner) then
ShowModal(oForm),
else
Show(oForm),
endif,
end,
//##############################################################################
//##############################################################################
// Hauptprogramm
//##############################################################################
//##############################################################################
startseq
InitForm(),
InitActions(),
OpenDataBaseAndLinkToGUI(),
ShowGUI(),
onerror
MessageDlg('Fehler im Programm ' + ProgName() + CRLF +
GetErrorText() + CRLF + CRLF +
DebugArr(GetErrorStack(True)), mtError),
DestroyObject(oForm),
stopseq,
oForm