[ mojeKorIme @ 17.08.2012. 09:40 ] @
Molim Vas da mi pomognete.. totalno sam se zapetljao..
Priča je ova.. kreiram MDI aplikaciju i pokušavam iz child forme da pozovem drugu formu kojoj ću postaviti jednu vrijednost
Labela i onda iz te forme vratiti neku drugu vrijednost. Klasičan primjer računa i pretrage artikala.. kada nađem artikal vračam ga na račun.
Code:

function jeLiOtvoren(naziv:string):boolean;
var
  ima:boolean;
  i:integer;
begin
  ima:=false;
  for i := 0 to glavnaforma.MDIChildCount - 1 do
  if glavnaforma.MDIChildren[i].Name = naziv then
    ima:=true;
    jeLiOtvoren:=ima;

end;

procedure tglavnaForma.otvoriProzor(nazivProzora:string;tab:integer);
var i,j:integer;

    fc : TFormClass;
    f : TForm;

begin



if not jeLiOtvoren(nazivProzora) then
begin
  fc := TFormClass(FindClass('T'+nazivProzora));
  f := fc.Create(Self);

end
else
  begin
    for j:=0 to screen.FormCount-1 do
    if (screen.Forms[j].ClassName='T'+nazivProzora) then
    begin
      f:=screen.Forms[j];
      f.BringToFront;
        // Exit;
    end;
  end;



for i := 0 to glavnaforma.MDIChildCount - 1 do
begin

  if glavnaforma.MDIChildren[i].Name = nazivProzora then
    begin
    prozoricombo.Text:=glavnaforma.MDIChildren[i].Caption;

    if tab<>-1 then
    for j := 0 to f.ComponentCount - 1 do
      if f.Components[j] is TcxPageControl then
      begin
         TcxPageControl(f.Components[j]).ActivePageIndex := Tab;
         Exit;
      end;


    end;


end;

end;

// mjesto gdje se otvara dijalog za odabir artikala
procedure TsklPrimka.sifraartiklaPropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
glavnaForma.otvoriProzor('dlgArtikli',-1);
[b]dlgArtikli.kojaForma.Caption:='primka'; //error[/b]

end;

//mjesto gdje bi taj dijalog trebao vratiti sifru artikla
procedure TdlgArtikli.cxButton2Click(Sender: TObject);
begin
// if kojaForma.Caption='primka' then
 sklPrimka.sifraartikla.Text:=artiklid.Dataset.fieldbyname('sifra').AsString;


  // else showmessage('0');

 { begin
 if not( Assigned(sklPrimka)) then
 application.CreateForm(TsklPrimka,sklPrimka);
 sklPrimka.show;
[b] sklPrimka.sifraartikla.Text:=artiklid.Dataset.fieldbyname('sifra').AsString; //error [/b] 
  //with sklPrimka.sifraartikla do SendMessage(Handle, WM_CHAR, Word(#13), 0);

 end; }
end;







dlgArtikli.kojaForma.Caption:='primka'; //error
sklPrimka.sifraartikla.Text:=artiklid.Dataset.fieldbyname('sifra').AsString; //error

uvijek mi javlja access violation error
[ Rapaic Rajko @ 17.08.2012. 12:36 ] @
Tamo gde kreiras novu formu, u proceduri otvoriProzor, moras explicitno i da joj postavis property f.Name := nazivProzora. Ne mozes da se oslanjas da ce to Delphi da radi za tebe. Zapravo hoce, ali nekom svojom logikom.

Evo sta mislim da se desava. Kad prvi put kreiras formu recimo TdlgArtikli, Delphi ce joj dodeliti ime dlgArtikli. Ali kad je drugi (i svaki sledeci) put budes kreirao, bice to dlgArtikli1, dlgArtikli2 itd. Probaj pa javi jel to to.

Pozz
[ mojeKorIme @ 17.08.2012. 12:51 ] @
Nije to ;( pokusao sam.. ali nista.. treba li napomenuti da su forme MDI Childern osim ovog dijaloga

Citat:
Rapaic Rajko:
Tamo gde kreiras novu formu, u proceduri otvoriProzor, moras explicitno i da joj postavis property f.Name := nazivProzora. Ne mozes da se oslanjas da ce to Delphi da radi za tebe. Zapravo hoce, ali nekom svojom logikom.

Evo sta mislim da se desava. Kad prvi put kreiras formu recimo TdlgArtikli, Delphi ce joj dodeliti ime dlgArtikli. Ali kad je drugi (i svaki sledeci) put budes kreirao, bice to dlgArtikli1, dlgArtikli2 itd. Probaj pa javi jel to to.

Pozz



[Ovu poruku je menjao mojeKorIme dana 17.08.2012. u 14:06 GMT+1]
[ mojeKorIme @ 17.08.2012. 14:27 ] @
E ovo radi :)

Code:

procedure TsklPrimka.sifraartiklaPropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
  var x:integer;
      njesto:TcxLabel;
begin
glavnaForma.otvoriProzor('dlgArtikli',-1);
application.ProcessMessages;

for x:=0 to screen.FormCount-1 do
begin
    if (screen.Forms[x].Name='dlgArtikli') then
    if assigned(screen.Forms[x].FindComponent('kojaForma')) then
      njesto :=    screen.Forms[x].FindComponent('kojaForma') as TcxLabel;
      njesto.Caption:='sklPrimka';
end;


end;


procedure TdlgArtikli.cxButton2Click(Sender: TObject);
var x:integer;
      njesto:TcxButtonEdit;
begin


for x:=0 to screen.FormCount-1 do
begin
   
    if (screen.Forms[x].Name=kojaForma.Caption) then
    if assigned(screen.Forms[x].FindComponent('sifraartikla')) then
      njesto :=    screen.Forms[x].FindComponent('sifraartikla') as TcxButtonEdit;
      njesto.Text :=artiklid.Dataset.fieldbyname('sifra').AsString;;
end;



Može se još dotjerati ali ovo je suština ...