Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 3.449 pregleda

Najnovija ↓

ActionBars - za malo iskusnije 09.04.2004. u 20:02 · pre 274 meseca #1
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;
Potpis
Sve sto je besmislenije, utoliko je bolje.
Re: ActionBars - za malo iskusnije 10.04.2004. u 12:09 · pre 274 meseca #2


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.
Re: ActionBars - za malo iskusnije 11.04.2004. u 07:47 · pre 274 meseca #3
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)
Potpis
blogče :: unescaped beta
  »
go-paste extenzija
  »
reč dana: backup
  »
bočne koalicije
Re: ActionBars - za malo iskusnije 11.04.2004. u 11:25 · pre 274 meseca #4
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme