Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dinamicko kreiranje menia iz tabele

[es] :: Pascal / Delphi / Kylix :: Dinamicko kreiranje menia iz tabele

[ Pregleda: 1688 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ratko83
ratko kuzmic
Srbija

Član broj: 240814
Poruke: 20
93.87.98.*



Profil

icon Dinamicko kreiranje menia iz tabele03.02.2010. u 18:16 - pre 173 meseci
Molim vas pomognite mi bas ne znam gde bijem....


Koristim Zeos komponente i firebird server.
Imam tabelu tblmenu sa kojom uredjujem meni na glavnoj formi, poenta svega je da se ceo meni nalazi u tabeli zato sto bih menjao pozicije i sl. dinamicki.

Code 1:

Kad pokrenem aplikaciju izvrsavam ovo:
Code:

var
  M, P: TMenuItem;
  ParentName, MenuName, FormName: String;
begin
  FormNames := TStringList.Create;
  
  while not tblMenu.Eof do
  begin
    ParentName := tblMenu.FieldByName('Parent').AsString;
    MenuName := tblMenu.FieldByName('Name').AsString;
    FormName := tblMenu.FieldByName('Form').AsString;

    P := FindMenuItem(mnuMain.Items, ParentName);
    if P = nil then
    begin
      P := TMenuItem.Create(mnuMain);
      P.Name := ParentName;
      P.Caption := P.Name;
      mnuMain.Items.Add(P);
    end;

    M := TMenuItem.Create(mnuMain);
    M.Name := MenuName;
    M.Caption := M.Name;
    P.Add(M);
    if FormName <> '' then
    begin
      FormNames.Add(FormName);
      M.Tag := FormNames.Count - 1;
      M.OnClick := MenuClick;
    end;

    tblMenu.Next;
  end;



Kad kliknem na neki item menija radi ovo:
Code:

Code: 2;
var
  F: TForm;
  C: TComponentClass;
begin
  F := nil;
  try
    C := TComponentClass(FindClass(FormNames[TMenuItem(Sender).Tag]));
    Application.CreateForm(C, F);
    F.ShowModal;
  finally
    if Assigned(F) then
      FreeAndNil(F);
  end;

za Code 2 mi treba pomoc, u tabeli imam polja id, parent, nazivforme, nazivprocedure....
Code 2: samo poziva formu ali nece neku proceduru tipa
class procedure helloWorld;
begin
.....
end;

to nece, samo forma.....

Kako da nekom itemu dam putanju posto u tabeli imam polja nazivforme i nazivprocedure kao forma -> procedura ili samo forma....?

Mislim da ce me neko razumeti...

Hvala unapred!

[Ovu poruku je menjao savkic dana 04.02.2010. u 00:03 GMT+1]
Rale
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Dinamicko kreiranje menia iz tabele05.02.2010. u 03:35 - pre 173 meseci
Može ovako:

Code (delphi):

type
  TKlasaMetoda = class
  published
    procedure p1;
    ...
  end;

...


   TMethod(Metod).Code := TKlasaMetoda.MethodAddress('p1');
   if TMethod(Metod).Code <> nil then begin
    TMethod(Metod).Data := TKlasaMetoda;
    SetMethodProp(_StaGod_,'OnClick', Metod);
   end;
 


interesantna stvar je da mogu da se pozivaju funcije (procedure) koje imaju različte parametre ili ih nemaju.

 
Odgovor na temu

ratko83
ratko kuzmic
Srbija

Član broj: 240814
Poruke: 20
93.86.182.*



Profil

icon Re: Dinamicko kreiranje menia iz tabele05.02.2010. u 19:43 - pre 173 meseci
A sta ide iznad ovoga:


TMethod(Metod).Code := TKlasaMetoda.MethodAddress('p1');
if TMethod(Metod).Code <> nil then begin
TMethod(Metod).Data := TKlasaMetoda;
SetMethodProp(_StaGod_,'OnClick', Metod);
end;



Var
?
Rale
 
Odgovor na temu

ratko83
ratko kuzmic
Srbija

Član broj: 240814
Poruke: 20
93.86.182.*



Profil

icon Re: Dinamicko kreiranje menia iz tabele05.02.2010. u 19:45 - pre 173 meseci
Kako da implementiram kroz bazu podataka odnosno kroz tabelu tblmenu...
Rale
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Dinamicko kreiranje menia iz tabele06.02.2010. u 05:49 - pre 173 meseci
Onako kako si inače planirao da to uradiš sa helloWorld, koja isto može da bude u published klase KlasaMetoda i može i ona da se poziva.

Ako nisi imao konkretnu ideju dopisaću (i opis) kako bi to moglo u kodu koji si poslao gore:

Svaki meni ima svoje ime (imao je i do sada: MenuName) a može da ima i ime metode (dodato kao: ImeMenija) koju poziva. Umesto što svi meniji pozivaju jednu istu metodu čije je ime MenuClick sada mogu svi meniji da pozivaju svoje metode.

Stavio sam lako uočljiv komentar uz izmene koje sam dodao.

Code (delphi):

var
  M, P: TMenuItem;
  ParentName, MenuName, FormName, ImeMenija: String; // ++++++ ImeMenija
  Metod: TMethod; //++++++++
begin
  FormNames := TStringList.Create;
 
  while not tblMenu.Eof do
  begin
    ParentName := tblMenu.FieldByName('Parent').AsString;
    MenuName := tblMenu.FieldByName('Name').AsString;
    FormName := tblMenu.FieldByName('Form').AsString;
    ImeMenija := tblMenu.FieldByName('Metoda').AsString; //Ime metoda koje ce pozivati MenuItem

    P := FindMenuItem(mnuMain.Items, ParentName);
    if P = nil then
    begin
      P := TMenuItem.Create(mnuMain);
      P.Name := ParentName;
      P.Caption := P.Name;
      mnuMain.Items.Add(P);
    end;

    M := TMenuItem.Create(mnuMain);
    M.Name := MenuName;
    M.Caption := M.Name;
    P.Add(M);
    if FormName <> '' then
    begin
      FormNames.Add(FormName);

      //M.Tag := FormNames.Count - 1; //--------- Ovo vise nije potrebno
     
      //M.OnClick := MenuClick; //--------------  ovaj red je zamenjen
      //Umesto zajednicki MenuClick svakom meniju njegova metoda:

      //+++++++ pocetak
      TMethod(Metod).Code := TKlasaMetoda.MethodAddress(ImeMenija); //ImeMenija kao ime metode
      if TMethod(Metod).Code <> nil then begin
       TMethod(Metod).Data := TKlasaMetoda;
       SetMethodProp(M,'OnClick', Metod); //ImeMenija metoda je dodeljena meniju sa imenom MenuName
      end;
      //+++++++ kraj
     
    end;

    tblMenu.Next;
  end;
 


 
Odgovor na temu

ratko83
ratko kuzmic
Srbija

Član broj: 240814
Poruke: 20
109.93.152.*



Profil

icon Re: Dinamicko kreiranje menia iz tabele06.02.2010. u 15:03 - pre 172 meseci

Nemogu da izvrsim kompajliranje...

greska undeclared indtifier...
FindMeniuItem
SetMethodProp


Sta mi nedostaje...?
Rale
 
Odgovor na temu

ratko83
ratko kuzmic
Srbija

Član broj: 240814
Poruke: 20
109.93.152.*



Profil

icon Re: Dinamicko kreiranje menia iz tabele06.02.2010. u 15:26 - pre 172 meseci
Resio sam problem sa SetMethodProp u uses sam dodao Typinfo ali ostao je problem sa
FindMenuItem?
undeclared identifier...FindMenuItem
Rale
 
Odgovor na temu

ratko83
ratko kuzmic
Srbija

Član broj: 240814
Poruke: 20
109.93.152.*



Profil

icon Re: Dinamicko kreiranje menia iz tabele06.02.2010. u 15:37 - pre 172 meseci
Reseno



function FindMenuItem(Parent: TMenuItem; ACaption: String): TMenuItem;
var
I: Integer;
begin
I := 0;
Result := Parent.Find(ACaption);
while (Result = nil) and (I < Parent.Count) do
begin
Result := FindMenuItem(Parent.Items[I], ACaption);
Inc(I);
end;
end;
Rale
 
Odgovor na temu

ratko83
ratko kuzmic
Srbija

Član broj: 240814
Poruke: 20
109.93.152.*



Profil

icon Re: Dinamicko kreiranje menia iz tabele06.02.2010. u 15:44 - pre 172 meseci
Postovani...Tomislav Karanović

Da li su ova polja u tabeli ok?


ID=1, PARENT=Datoteka, Name=HelloWorld,Metod=HelloWorld;

Kada kliknem item iz menia mnumenu sa nazivom HelloWorld nista se ne dogadja a imam proceduru :

procedure TKlasaMetoda.HelloWorld;
begin
ShowMessage('Hello world!');
end;
od klase
TKlasaMetoda


Sta li se desava?
Rale
 
Odgovor na temu

ratko83
ratko kuzmic
Srbija

Član broj: 240814
Poruke: 20
109.93.152.*



Profil

icon Re: Dinamicko kreiranje menia iz tabele06.02.2010. u 15:49 - pre 172 meseci
Hvala ti puno.....


ovo mi je nedostajalo....
initialization
RegisterClass(TForm2);

finalization
UnRegisterClass(TForm2);
end.

Imas li neku idejo koju bi mogao da mi pomognes na ovom nivou programiranja ali bez menia njega sam resio napokon posle 3 godine, cudno zar ne....


Radio sam uvek dizajnerski dok mi prijatelji nisu rekli da sve to moze i kroz bazu podataka na nivou (runtime)....

Nema sta da se prica ti si mi pomogao extra: gospodin.....Tomislav Karanović
Rale
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Dinamicko kreiranje menia iz tabele

[ Pregleda: 1688 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.