Пример #1
0
// --------------------------------------------------------------------------------------------
STDMETHODIMP CRegOperatPropAct::EndAction (DWORD, IDataObject** ppDataOut)
{
	_ASSERTE (m_ObjsIter != m_InObjs.end());

	*ppDataOut = 0;
	try {
	WEnumLONG wEnumInObj (*m_ObjsIter);	// die zu bearbeitenden Objekte
	WEnumLONG wEnumOutObj;				// Ergebnisobjekte der ausgewählten Operation

	// Optionen abfragen
	DWORD dwOptions = 0x00;

		if (SUCCEEDED(EnsureOptionsIF())) {
			_ASSERTE(m_wOperOptions.IsValid());
			m_wOperOptions->GetOptions (&dwOptions);
		}

		// im Dialog ausgewählte Operation ausführen
		THROW_FAILED_HRESULT (m_pRegOperDlg->ExecuteOperation (m_hPr, wEnumInObj, dwOptions,
															   wEnumOutObj.ppi()));
		m_ObjsIter++;

		if (wEnumOutObj.IsValid())
		{
		// IDataObject abfragen
		WDataObject IDO (CLSID_DataTransferObject);

		// Ergebnisobjekte im DataObjekt IDO speichern
			THROW_FAILED_HRESULT (SetEnumLONGData (
				(IEnum<LONG>*)(IEnumLONG*)wEnumOutObj, IDO));

		// Resultat setzen
			*ppDataOut = IDO.detach();
			if (0 == wEnumOutObj->Count()) {
			ResString resTitel (ResID (IDS_LONGCLASSNAME, pRF), 50);
			ResString resText (ResID (IDS_BOXTEXT1, pRF), 200);
	
				MessageBox (__hWndM, resText.Addr(), resTitel.Addr(),
							MB_ICONINFORMATION | MB_OK);
			}
		}
	}
	catch (_com_error& hr_result)		// 23.09.99
	{
		DELETE_OBJ (m_pRegOperDlg);		// bei Fehler Dialog wieder freigeben
		return _COM_ERROR(hr_result);	// 23.09.99
	}

	if (m_ObjsIter != m_InObjs.end())	// es kommen noch weitere Daten
		return S_FALSE;

	DELETE_OBJ (m_pRegOperDlg);			// es kommen keine Daten mehr
	return S_OK;

} // EndAction
Пример #2
0
// --------------------------------------------------------------------------------------------
STDMETHODIMP CAreaBuildPropAct::EndAction (DWORD, IDataObject** ppDataOut)
{
	_ASSERTE (m_ObjsIter != m_InObjs.end());

	*ppDataOut = 0;

	COM_TRY {
	WEnumLONG wEnumInObj (*m_ObjsIter);	// die zu bearbeitenden Objekte
	WEnumLONG wEnumOutObj;				// Ergebnisobjekte der ausgewählten Operation

	// Optionen abfragen
	DWORD dwOptions = 0x00;

		if (m_wOperOptions.IsValid())
			m_wOperOptions->GetOptions (&dwOptions);

		// im Dialog ausgewählte Operation ausführen
		THROW_FAILED_HRESULT (m_pAreaBuildDlg->ExecuteOperation (m_hPr, wEnumInObj, dwOptions,
																 wEnumOutObj.ppi()));

		m_ObjsIter++;

		if (wEnumOutObj.IsValid()) {
		// IDataObject abfragen
		WDataObject IDO (CLSID_DataTransferObject);

		// Ergebnisobjekte im DataObjekt IDO speichern
			THROW_FAILED_HRESULT (SetEnumLONGData ((IEnum<LONG>*)(IEnumLONG*)wEnumOutObj,
												   IDO));
		// Resultat setzen
			*ppDataOut = IDO.detach();

			if (0 == wEnumOutObj->Count()) {
			ResString resTitel (ResID (IDS_LONGCLASSNAME, pRF), 50);
			ResString resText (ResID (IDS_BOXTEXT7, pRF), 200);
	
				MessageBox (__hWndM, resText.Addr(), resTitel.Addr(),
							MB_ICONINFORMATION | MB_OK);
			}
		}
	}
	COM_CATCH_OP(
		delete m_pAreaBuildDlg;	// bei Fehler Dialog wieder freigeben
    );
Пример #3
0
// Object bearbeiten ----------------------------------------------------------
int end_previous_object (void) 
{
long irc = 0L;

	lgi++;		/* Geometriezaehler korrigieren */
	if (lgi < koord_paare)
		return (db_error (EGCNT, ASCPARSER, yylineno));

// bevor irgend etwas passiert Header neu einlesen
	if (g_fReReadHeader) {
		DEXN_ReReadHeader();
		DEXN_ReScale();
		g_fReReadHeader = false;		// nur einmal
	}

// auswerten ob Komplexobjekt 
	if (lgi == 0) {
		if (RelCount() == 0)
			return db_error (EBADKO, ASCPARSER, yylineno);
		if (!r_flag)
			return EOKAY;	// keine Relationen, keine KomplexObjekte
		sta[0] = K_OBJEKT;	// Status setzen
		sta[1] = 0;		
	}

HPROJECT hPr = DEX_GetDataSourceHandle();

	_ASSERTE(NULL != hPr);
	irc = CreateObject (on, id, sta, mi, lgi, gxi, gyi);
	if (g_flag) {

	// evtl. ObjectGuid setzen
		if (irc && '\0' != guid[0]) {
		OBJECTGUID OUID;

			INITSTRUCT (OUID, OBJECTGUID);
			OUID.lONr = on;
			if (SUCCEEDED(CLSIDFromString (WideString(guid), &OUID.guid))) {
			// versuchen über GUID zu finden
				if (FAILED(DEX_FindObjectFromGuidEx (hPr, OUID))) {
				// alten Guid wieder setzen
				HRESULT hr = DEX_SetObjectGuid (OUID);

//					if (FAILED(hr) && HRESULT_FROM_ERRCODE(S_DUPLICATE) == hr) {
//						TX_ASSERT(0 != OUID.lONr);		// Objekt muß existieren
//
//					// GUID bereits in GeoDB vorhanden !!??
//						irc = S_DUPLICATE;
//
//					// neu erzeugtes Objekt löschen
//						DEX_DeleteObject (on);
//						CountObjects (sta[1], false);
//
//					// Geometrie an existierendem Objekt korrigieren
//						on = OUID.lONr;					// hier spielt die Musik
//						irc = CreateObject (on, id, sta, mi, lgi, gxi, gyi);
//					}
				}
			}
		}
	} else
		irc = UpdateFeatures (hPr, on, id, sta, mi);

// evtl. zur AusgabeObjektmenge hinzufügen
	if (irc && g_Enum.IsValid())
		g_Enum -> AddItem (on);

// Protocoll, Relationen etc.
bool fBreak = false;

	if (NULL != g_pDlg) {
		if (irc) 
			g_pDlg -> SetPos (ftell (yyin), on);
		fBreak = g_pDlg -> Break();
	}

	if (fpProt) fprintf (fpProt, "Satz %5ld, Objekt %5ld: Irc = %3ld\n", satz_nr, on, irc);

	if (irc && r_flag) {
		if (RelCount()) {
		// Relationen aufbauen
		long lONr, lRCode;
		short iRTyp;

			ResetList();
			while (RetrieveNextFromList (&lONr, &lRCode, &iRTyp)) 
				CreateRelation (on, lONr, lRCode, iRTyp);
			ClearList();
		}

	// Zuordnung Objekt <--> SatzNummer für Relationen merken
		StoreInTree (on, satz_nr);
	}

return fBreak;
}