📄 mainform.cpp
字号:
// Implementation of Main form class
#include "Common.h"
#include "MainForm.h"
#include "StarterApp.h"
#include "EditAddressForm.h"
// Options command handler
Boolean CMainForm::OnOptions(EventPtr pEvent, Boolean& bHandled)
{
CForm frmOptions(OptionsForm);
frmOptions.DoDialog();
return true;
}
// Exit command handler
Boolean CMainForm::OnExit(EventPtr pEvent, Boolean& bHandled)
{
CPalmApp::Stop();
return true;
}
// About command handler
Boolean CMainForm::OnAbout(EventPtr pEvent, Boolean& bHandled)
{
CForm frmAbout(AboutForm);
frmAbout.DoDialog();
return true;
}
Boolean CMainForm::OnOpen(EventPtr pEvent, Boolean& bHandled)
{
CStarterApp* pApp =
(CStarterApp*)CStarterApp::GetInstance();
CDatabase* pDatabase = pApp->GetDatabase();
// Initialize grid object
m_gridAddress.Attach(MainAddressTable, MainAddressScrollBar,
pDatabase);
m_fldLookup.Attach(MainLookupField);
SetFocus(MainLookupField);
// m_gridAddress.SetGridMode(CGrid::GM_FULLROWSELECT);
bHandled = false;
return false;
}
// New command handler
Boolean CMainForm::OnNew(EventPtr pEvent, Boolean& bHandled)
{
CEditAddressForm frmEditAddress;
frmEditAddress.HideObject(EditAddressDeleteButton);
if (frmEditAddress.DoModal() == CEditAddressForm::mrOK)
{
// Create record
CStarterApp* pApp = (CStarterApp*)CStarterApp::GetInstance();
CDatabase* pDatabase = pApp->GetDatabase();
CRecordStream rs(pDatabase);
rs << frmEditAddress.m_strName << frmEditAddress.m_strPhone <<
frmEditAddress.m_strAddress << frmEditAddress.m_strNotes;
m_gridAddress.AddRow();
}
return true;
}
// Select event handler
Boolean CMainForm::OnSelect(EventPtr pEvent, Boolean& bHandled)
{
CEditAddressForm frmEditAddress;
CStarterApp* pApp = (CStarterApp*)CStarterApp::GetInstance();
CDatabase* pDatabase = pApp->GetDatabase();
Int16 nAbsRow = m_gridAddress.RelativeToAbsolute(pEvent->data.tblSelect.row);
UInt16 wIndex = m_gridAddress.GetCurrentIndex();
CRecordStream rs(pDatabase, wIndex);
rs >> frmEditAddress.m_strName >> frmEditAddress.m_strPhone >>
frmEditAddress.m_strAddress >> frmEditAddress.m_strNotes;
switch (frmEditAddress.DoModal())
{
case CEditAddressForm::mrOK:
// Modify record
rs.Seek(0, fileOriginBeginning);
rs << frmEditAddress.m_strName << frmEditAddress.m_strPhone <<
frmEditAddress.m_strAddress << frmEditAddress.m_strNotes;
m_gridAddress.Refresh(nAbsRow);
break;
case CEditAddressForm::mrDelete:
// Delete record
rs.Close();
pDatabase->RemoveRecord(wIndex);
m_gridAddress.DeleteRow(nAbsRow);
break;
}
SetFocus(MainLookupField);
return true;
}
// Key down handler
Boolean CMainForm::OnKeyDown(EventPtr pEvent, Boolean& bHandled)
{
// If special key is not pressed
if (pEvent->data.keyDown.modifiers == 0)
{
SetFocus(MainLookupField);
// Give field object a chance to handle this event
if (FldHandleEvent(m_fldLookup, pEvent))
Lookup();
return true;
}
return false;
}
// Field changed handled
Boolean CMainForm::OnChanged(EventPtr pEvent, Boolean& bHandled)
{
Lookup();
return true;
}
// Looks for database record by name
void CMainForm::Lookup()
{
const Char* pszCriteria = m_fldLookup.GetTextPtr();
Int16 nCriteriaLength = StrLen(pszCriteria);
if (nCriteriaLength > 0)
{
CStarterApp* pApp =
(CStarterApp*)CStarterApp::GetInstance();
CDatabase* pDatabase = pApp->GetDatabase();
// Loop through database to find appropriate record
CMemHandle memHandle((Boolean)false);
UInt16 wIndex, wCount = pDatabase->NumRecords();
for (wIndex = 0; wIndex < wCount; wIndex++)
{
memHandle = pDatabase->QueryRecord(wIndex);
const Char* pszName = (const
Char*)memHandle.Lock();
if (StrNCaselessCompare(pszName, pszCriteria,
nCriteriaLength) == 0)
{
// Matched record is found
m_gridAddress.SetSelection(wIndex);
break;
}
}
// End of database was reached, so no record found
if (wIndex == wCount)
m_fldLookup.Delete(nCriteriaLength - 1, nCriteriaLength);
}
else
m_gridAddress.ClearSelection();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -