[ FranjoZG @ 18.05.2015. 00:05 ] @
radi se o delphi XE 7
Imam problem u proceduri s kojim se do sada nisam sreo:
ne prikazuje ShowMessage.

Procedura je u datamudulu, a pozivam je iz main forme u eventu OnShow:

Code:

procedure Tdm.OtvoriDB;
var
  ti: tMyInit;
  dbName: string;
  Odg: integer;
begin
  ti := tMyInit.Create;
  dbName := ti.Read('DATABASE', 'NAME', '');
  ti.Free;
  Odg := mrCancel;
  if dbName = '' then
  begin
    Odg := MessageDlg('Nije određena radna baza' + ''#13'' + 'Odrediti radnu bazu?' + ''#13'' + ''#13'' + '(bez određene baze rad nije moguć)', mtConfirmation, [mbYes, mbNo], 0);
    if Odg = mrYes then
    begin
      fmParametri := TfmParametri.Create(nil);
      fmParametri.ShowModal;
      fmParametri.Free;
      ti := tMyInit.Create;
      dbName := ti.Read('DATABASE', 'NAME', '');
      ti.Free;
      if dbName = '' then begin
         ShowMessage('Baza nije određena' + #13 + 'Rad nije moguć');
         Application.Terminate;
         exit;
      end;
    end
    else
      Application.Terminate;
      exit;
  end
  else
  begin
    try
       fdc.Params.Database := dbName;
    except
      ShowMessage('Pogreška pri otvaranju radne baze:' + #13 + dbName);
      OtvoriDB;
    end;
  end;
  ...


linija:
ShowMessage('Baza nije određena' + #13 + 'Rad nije moguć');
se ne prikazuje a pređe preko nje!!!

Ideja zašto?
[ savkic @ 18.05.2015. 00:56 ] @
> ShowMessage('Baza nije određena' + #13 + 'Rad nije moguć');
> se ne prikazuje a pređe preko nje!!!
> Ideja zašto?

Ako je VCL aplikacija, da li imas glavnu formu kreiranu? Ako da onda bi se morala videti, ukljuci debugDcu i udji u ShowMessage pa vidi gde je zastoj.
[ FranjoZG @ 18.05.2015. 08:22 ] @
Moja greška... recimo...

1. Ostavio sam TFDConnection "Open" u design modu
2. u BeforeConnect sam pozvao proc. "OtvoriDB"
3. u OnShow main forme sam pozvao proc. "OtvoriDB"

Ispravak:
1. u design modu sam stavio TDBVConnect na "Close"
2. maknuo sam poziv procedure iz BeforeConnect

Sada radi ispravno. Svejedno mi nije jasna greška - preskoči ShowMessage kao da ga je izvršio.
U debugu pratim:
frmMain.ShowMessage -> Vcl.Dialogs.ShowMessage -> Vcl.Dialogs.ShowMessagePos = prikaz poruke

procedura koja se poziva iz Vcl.Dialogs.ShowMessagePos se ne izvrši i debuger deaktivira brekpoint kao da se ne koristi u programu.
-> Vcl.Dialogs.MessageDlgPos

O čemu se radi? Bug?

[ Milan Milosevic @ 18.05.2015. 10:16 ] @
Meni se desavalo da nece da prikaze poruku u ShowMessage slicno kao kod tebe kad se istrosi stack memorija

Code:

implementation

{$R *.dfm}

{$MAXSTACKSIZE 1073741824}


procedure TForm2.Button1Click(Sender: TObject);
begin
 ShowMessage('Prikazi me');
end;



[ savkic @ 18.05.2015. 10:30 ] @
> 1. Ostavio sam TFDConnection "Open" u design modu
> 2. u BeforeConnect sam pozvao proc. "OtvoriDB"
> 3. u OnShow main forme sam pozvao proc. "OtvoriDB"

> Ispravak:
> 1. u design modu sam stavio TDBVConnect na "Close"
> 2. maknuo sam poziv procedure iz BeforeConnect

Deluje da u prvom slucaju ti jos nije bila glavna forma kreirana a u drugom jeste. U takvom slucaju mozes direktno raditi sa WinApi MessageBox i tu neces imati nikakvih problema sa prikazom.