Scopo
Effettua il drag & drop di un oggetto. L'effetto dell'operazione dipende dal tipo degli oggetti coinvolti e dallo stato dei tasti Control, Shift e Alt, così come accade nel normale utilizzo di IN.DE.
Può essere utilizzata per impostare il legame Master-Detail tra due pannelli, tirando il primo sul secondo con il tasto Shift premuto.
Sintassi
INDE.ObjDrop(id oggetto, id oggetto tirato, stato tasti, id transazione)
Argomenti
| ID Oggetto | Puntatore dell'oggetto su cui tirare |
| ID Oggetto Tirato | Puntatore dell'oggetto da tirare |
| Stato Tasti | Stato dei tasti Ctrl, Shift e Alt (vedi la lista valori Tipi Tasto contenuta nell'esempio) |
| ID Transazione | E' un numero opzionale, rappresentante la transazione da usare per effettuare il drop. Se non specificato la modifica avviene fuori transazione. |
Esempio di codice
// ****************************************************************************
// Evento notificato al documento quando l'utente esegue una operazione di drop
// di un documento su questo documento, in un albero con drag & drop attivo
// ****************************************************************************
event OggettoBase.OnDrop(
IDDocument SourceDocument // Documento tirato su questo documento
boolean ShiftKey // Vero se l'utente teneva premuto il tasto Sh...
boolean AltKey // Vero se l'utente teneva premuto il tasto Al...
boolean ControlKey // Vero se l'utente teneva premuto il tasto Co...
inout boolean Cancel // Se lo si imposta a True si impedisce l'esec...
)
{
Transazione trans = null //
//
try
{
Documento doc = null //
OggettoBase obj = null //
//
obj := OggettoBase.Cast(SourceDocument)
doc := obj.GetDocument()
//
// Inizio una nuova transazione
trans := doc.BeginTransaction(FormatMessage(Drop |1 su |2, Nome, obj.
Nome, ??, ??, ??))
//
// Se gli oggetti sono dello stesso tipo
if obj.Tipo = Tipo
{
// Copio le proprietà dell'oggetto tirato nell'oggetto su cui ho tirato
EsempiMS.INDE.UpdateObject(Puntatore, obj.Puntatore, trans.ID)
}
else
{
// Effettuo un D&D tra i due oggetti
EsempiMS.INDE.ObjDrop(Puntatore, obj.Puntatore, If(ShiftKey, Shift
, ZERO) | If(ControlKey, Control, ZERO) | If(AltKey, Alt, ZERO),
trans.ID)
}
//
trans.Commit()
//
// Aggiorno gli oggetti da INDE
this.LoadChildrenFromINDE()
obj := OggettoBase.Cast(obj.Parent)
obj.LoadChildrenFromINDE()
}
catch
{
trans.Rollback()
}
}
// Evento notificato al documento quando l'utente esegue una operazione di drop
// di un documento su questo documento, in un albero con drag & drop attivo
// ****************************************************************************
event OggettoBase.OnDrop(
IDDocument SourceDocument // Documento tirato su questo documento
boolean ShiftKey // Vero se l'utente teneva premuto il tasto Sh...
boolean AltKey // Vero se l'utente teneva premuto il tasto Al...
boolean ControlKey // Vero se l'utente teneva premuto il tasto Co...
inout boolean Cancel // Se lo si imposta a True si impedisce l'esec...
)
{
Transazione trans = null //
//
try
{
Documento doc = null //
OggettoBase obj = null //
//
obj := OggettoBase.Cast(SourceDocument)
doc := obj.GetDocument()
//
// Inizio una nuova transazione
trans := doc.BeginTransaction(FormatMessage(Drop |1 su |2, Nome, obj.
Nome, ??, ??, ??))
//
// Se gli oggetti sono dello stesso tipo
if obj.Tipo = Tipo
{
// Copio le proprietà dell'oggetto tirato nell'oggetto su cui ho tirato
EsempiMS.INDE.UpdateObject(Puntatore, obj.Puntatore, trans.ID)
}
else
{
// Effettuo un D&D tra i due oggetti
EsempiMS.INDE.ObjDrop(Puntatore, obj.Puntatore, If(ShiftKey, Shift
, ZERO) | If(ControlKey, Control, ZERO) | If(AltKey, Alt, ZERO),
trans.ID)
}
//
trans.Commit()
//
// Aggiorno gli oggetti da INDE
this.LoadChildrenFromINDE()
obj := OggettoBase.Cast(obj.Parent)
obj.LoadChildrenFromINDE()
}
catch
{
trans.Rollback()
}
}
- Le modifiche fatte fuori transazione non cambiano lo stato del documento, quindi se il documento non era modificato prima dell'operazione non lo sarà neanche dopo.
- Le modifiche fatte fuori transazione non utilizzano il sistema Team Works anche se abilitato per il progetto corrente. Non viene quindi verificato che l'utente possa prendere un lock sugli oggetti modificati dall'operazione.
- Se uno dei puntatori passato a parametro non appartiene al progetto corrente, viene generata un'eccezione.
Ultima modifica: 05/03/2009 / Validità: da 7.5.3400
procedura