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

ActionBars - za malo iskusnije

[es] :: Pascal / Delphi / Kylix :: ActionBars - za malo iskusnije

[ Pregleda: 2640 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

overflow
Goran Milosavljević
Integration & Internet Senior
Engineer @ Telenor
Beograd

Član broj: 396
Poruke: 345
*.vdial.verat.net

ICQ: 106825659
Sajt: localhost


Profil

icon ActionBars - za malo iskusnije09.04.2004. u 19:02 - pre 243 meseci
Ararrarararggh ...
Vec 3 (tri) sata pokusavam, ali bezuspesno, da napravim sledece. Imam neki dir, recimo "C:\test". U njemu se nalaze neki fajlovi. Ja zelim da napravim meni u kome ce biti izlistani svi fajlovi iz tog direktorijuma, a posto se klikne na stavku tako dobijenog menija potrebno je da se pokrene taj fajl.
Meni mora da sadrzi imena fajlova, ali bez ekstenzija. Pogadjate, pravim MLS (MultiLanguageSupport), ali umesto imena fajlova u meniju dobijam kuke i kvake (pa tako i po pokretanju tih fajlova pokrecem unknown fajlove) iako sam kroz debuger video da se sve upisuje na svoje mesto ... HELP.

Evo ga i moj kod ...

Code:

  ...
    aJezik: TAction;
    FLB : TFileListBox;
    LangMenu: TActionClientItem; // root menija u kome vrsim kreiranje stavki
  ...

procedure TfrmMain.FormCreate(Sender: TObject);
var
  aJezikAnc: TAction;
  aci: TActionClientItem;
  i: integer;
  jezik: string;
begin
  inherited;
  ...
  if Assigned(LangMenu) then
  begin
    FLB.Directory := programPath + 'lang\';
    LangMenu.Items.Clear;
    if FLB.Items.Count > 0 then
      for i := 0 to FLB.Items.Count - 1 do
      begin
        aJezikAnc := TAction.Create(self);
        aJezikAnc.Assign(aJezik);
        aJezikAnc.Tag := 5;
        jezik := Copy(flb.items[i], 1, length(flb.items[i]) - 4);
        aJezikAnc.Caption := jezik;
        aci := LangMenu.Items.Add;
        aci.Action := aJezikAnc;
        aci.Caption := jezik;
      end;
  end;
end;

procedure TfrmMain.aJezikExecute(Sender: TObject);
var act: TAction;
begin
  inherited;
  act := TAction(Sender);
  ShowMessage(act.Caption);
  // *****************
  //  SHOWMESSAGE ispisuje kuke i kvake!!!
end;

Sve sto je besmislenije, utoliko je bolje.
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.196.EUnet.yu



+1 Profil

icon Re: ActionBars - za malo iskusnije10.04.2004. u 11:09 - pre 243 meseci


1) Ova linija

Code:
aJezikAnc.Assign(aJezik);


nije ispravna. U principu to radis samo da bi omogucio izvrsavanje akcije. Bolje zameni sa:

Code:

aJezikAnc.OnExecute := aJezikExecute;


2) Ono inherited ti takodje ne treba za izvrsavanje akcije

3) Ova linija ne treba tako da izgleda

Code:

jezik := Copy(flb.items[i], 1, length(flb.items[i]) - 4);
aJezikAnc.Caption := jezik;

vec

aJezikAnc.Caption :=  ChangeFileExt(flb.items[i], '');



Za ostatak bih morao da probam u Delphi-u. Probaj ove izmene pa da vidimo. U principu ne bi trebao da koristis TFileListBox vec da napravis u kodu odgovarajuci metod za listanje foldera (FindFirst i FindNext) ili da skines JCL paket sa neta u kome imas vec gotove metode.
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.beotel.net

Sajt: localhost


+5 Profil

icon Re: ActionBars - za malo iskusnije11.04.2004. u 06:47 - pre 243 meseci
uz sve već rečeno, problem "vidim kuke i kvake" verovatno nema nikakve veze sa kodom za akcije.

jedini deo koji vidim da bi mogao da pravi probleme je kod za odstranjivanje extenzije, ali to si već dobio uputstvo da koristiš ChangeFileExt().

(a da, moguće je i da FileListBox ne poznaje unikod, pa te on zeza, ali i za to si dobio preporuku ;)


a sad malo nagađanja. da li si uopšte siguran da problem nije samo u ShowMessage() funkciji (tj da samo ona ne prihvata unikod), a da ostali deo programa radi, tj da fajlove ipak može da otvori (naravno, da se setiš da vratiš extenziju, opet sa Change... ;).

ako se ipak ispostavi da se string negde u toku izvršavanja programa "pokvari", time što mu se izgubi informacija o enkodingu u kome je, ili time što mu se nepravilno odfikari neki bajt, probaj da napraviš log koji će u fajl trpati vrednost stringa (ime fajla) pre i posle svake izmene od strane tvog programa.


poželjno je ovaj fajl posle posmatrati iz nekog pismenijeg editora koji ume da radi razne konverzije između unikoda-UTFa-ASCIIa-ITDa.. ;)

(ultraedit je kul, sem što mu hex view nije baš uvek verodostojan)
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.143.EUnet.yu



+1 Profil

icon Re: ActionBars - za malo iskusnije11.04.2004. u 10:25 - pre 243 meseci
Sto se tice kuka i kvaka jedna napomena. Ukoliko u folderu imas fajlova sa cirilicom mozes da zaboravis ovakvo resenje. Problem je u tome sto FindFirst i FindNext ne rade ispravno sa unicode nazivima gde se koristi ekstremnija varijanta jezika (npr. cirilica). U MSDN-u postoji nekoliko poglavlja vezanih za to. To je losa vest. Dobra vest je da se kroz NET platformu u potpunosti moze pristupiti takvim folderima i fajlovima. Ja sam licno radio u C# neki mali projekat i mogu reci da sam odusevljen. Jos u samom editoru (Visual Studio) mozes da kucas cirilicu kao sadrzaj stringa (editor ti nudi UTF-8 kao opciju prilikom upisa fajla na disk).

Mislim da Total Comander tek od 5.5 verzije ispravno barata sa cirilicom.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: ActionBars - za malo iskusnije

[ Pregleda: 2640 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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