Olá Rocha,
Com relação ao que o amigo Elieser falou, provavelmente o que ele se referia era o controle CRViewer, que surtgiu apenas com o Crystal 8. Se você estiver usando uma versão mais antiga, não terá este controle. Mas eu tenho uma idéia que pode te ajudar. Não existe uma forma simples de fazer um Crystal modal, mas você pode simular isto usando a API do Windows. Para isso, faça o seguinte:
Em um módulo ou na seção Declarations do seu form:
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal aint As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
'Se estiver em um módulo, troque Private desta procedure para Public
Private Sub Aguarda_Janela(StrJanela As String)
On Error Resume Next
Dim AntHwnd As Long, JHwnd As Long, TamNome As Long
Dim NomeJanela As String
AntHwnd = GetDesktopWindow()
JHwnd = GetWindow(AntHwnd, GW_CHILD)
Do Until JHwnd = 0
NomeJanela = Space$(255)
TamNome = GetWindowText(JHwnd, NomeJanela, 128)
NomeJanela = Left$(Trim$(NomeJanela), TamNome)
If UCase$(Trim$(NomeJanela)) = UCase$(Trim$(StrJanela)) Then
Exit Do
Else
AntHwnd = JHwnd
JHwnd = GetWindow(AntHwnd, GW_HWNDNEXT)
End If
Loop
Do Until TamNome = 0
TamNome = GetWindowText(JHwnd, NomeJanela, 128)
DoEvents
Loop
If Err Then Err.Clear
End Sub
Agora, na chamada do seu relatório, faça o seguinte:
CrystalReport1.WindowTitle = "Nome do Relatorio"
CrystalReport1.Action = 1
Aguarda_Janela "Nome do Relatorio"
MsgBox "oi"
Quando rodar este programa, verá que o relatório aparece, mas a MsgBox com a palavra "oi" não surge em seguida. Quando você fechar a janela do relatório, aí sim, a MsgBox aparece. Isto é um quebra-galho que serve para qualquer outra aplicação, como dispara um outro programa, por exemplo (embora exista outro método mais indicado para isto). Veja se isto resolve o seu problema, qualquer coisa, post.
Um abraço,
Sandro.