www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Delphi prvi koraki - 4.dan
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
urosg
Član
Član



Pridružen-a: Pet 27 Apr 2007 14:30
Prispevkov: 565
Aktiv.: 2.55

PrispevekObjavljeno: Sre Okt 10, 2007 9:42 pm    Naslov sporočila:   Odgovori s citatom

V samem Delphiju taka funkcija zal ne obstaja - vsaj jaz je se nisem zasledil - drugace je tudi ne bi bilo tezko napisati.

Lahko pa uporabis RegEx, unit v prilogi.

V RegExp-u namesto ? uporabis .

Upam da ti bo v pomoc.



RegExpr.txt
 Opis:
spremeni koncnico v .pas

Download
 Ime datoteke:  RegExpr.txt
 Velikost datoteke:  144.82 KB
 Downloadano:  6 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.65
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Čet Okt 11, 2007 9:37 am    Naslov sporočila:   Odgovori s citatom

Delphi nima take funkcije.

Z funkcijo posex (Returns the index value of a substring) najdeš posamezne znake za nepopoln string in potem primerjaš posamezne delčke.

Jur

Primer kode:

m1..m11 so cela števila, ki držijo pozicijo posameznih wildcard znakov. V mojem primeru je to tabulator(chr(9).
line je string spremenljivka, ki jo gledamo

m1:=posex(chr(9),line,1);
m2:=posex(chr(9),line,m1+1);
m3:=posex(chr(9),line,m2+1);
m4:=posex(chr(9),line,m3+1);
m5:=posex(chr(9),line,m4+1);
m6:=posex(chr(9),line,m5+1);
m7:=posex(chr(9),line,m6+1);
m8:=posex(chr(9),line,m7+1);
m9:=posex(chr(9),line,m8+1);
m10:=posex(chr(9),line,m9+1);
m11:=posex(chr(9),line,m10+1);

Tule se določa stringe, ki so med posameznimi wild znaki.
racun.ident:=midstr(line,1,m1-1);
racun.firma:=midstr(line,m1+1,m2-m1-1);
racun.vrednost:=midstr(line,m2+1,m3-m2-1);
racun.predmet:=midstr(line,m3+1,m4-m3-1);
...
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Čet Okt 11, 2007 12:14 pm    Naslov sporočila:   Odgovori s citatom

Nepreverjeno iz rokava..
Koda:
function CmpStr(StrMask, Str: string): boolean;
var
  n: cardinal;
begin
  if (Length(StrMask) = 0) or (Length(Str) = 0)  then
  begin
//prazen string
    result := false;
    exit;
  end;
  result := true;
  for n := 1 to Length(StrMask) do
  begin
   if Length(StrMask) > Length(Str)  then
   begin
     if StrMask[n] = '*' then
       exit;
    result := false;
    exit;
   end;
   if StrMask[n] = '?' then
      continue;
    if StrMask[n] <> Str[n] then
    begin
      result := false;
      exit;
    end;
  end;
end;



LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Čet Okt 11, 2007 1:57 pm    Naslov sporočila:   Odgovori s citatom

Hvala vsem za odgovore. Tale GJ-jeva rešitev se mi zdi zelo dobra. Seveda, d'oh! niz je načeloma tabela. Meni pa je ravno "manjkala" funkcija, ki vrne karakter iz niza.
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.65
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Čet Okt 11, 2007 3:38 pm    Naslov sporočila:   Odgovori s citatom

Karakter iz niza vrneta pos in posex. Posex zna iskati ne samo od začetka, kot dela pos.


Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Čet Okt 11, 2007 4:01 pm    Naslov sporočila:   Odgovori s citatom

jur je napisal/a:
Karakter iz niza vrneta pos in posex. Posex zna iskati ne samo od začetka, kot dela pos.


Jur


Ne, pos vrača integer (pozicijo niza, ne chr)

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Čet Okt 11, 2007 7:26 pm    Naslov sporočila:   Odgovori s citatom

Vprašanje glede objekta Memo.

V vrstico bi rad pisal dva stringa različne dolžine. Rad bi, da bi prikaz izgledal kot kazalo. Prvemu stringu sicer lahko "prištejem" tabulator, a tabulatorsko mesto je prekratko. Zaradi tega prihaja zaradi različnih dolžin prvega stringa do "stopnic".
A obstaja lastnost za dolžino tabulatorskega mesta? Se da tabulatorska mesta popolnit recimo s piko?

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.65
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Pet Okt 12, 2007 9:15 am    Naslov sporočila:   Odgovori s citatom

Tak/podoben problem sem reševal tako, da sem vzel panel in gor postavil dva memota eden zraven drugega. Če nastaviš za oba memota BorderStyle na msNone, izgineta roba od memota in kot rob panela ustvarja iluzijo, da imaš samo en memo na zaslonu.

Jur



tmp.JPG
 Opis:
 Velikost datoteke:  11.39 KB
 Pogledana:  4179 krat

tmp.JPG


Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Pet Okt 12, 2007 11:16 am    Naslov sporočila:   Odgovori s citatom

Jur, ideja ni slaba. Problem bo nastal edino, če bo zapisov več kot za eno okno, ter bi želel uporabiti drsnik. Bom poskusil uporabil RichEdit. Koliko sem gledal help nekaj podobnega omogoča.
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Pet Okt 12, 2007 11:35 am    Naslov sporočila:   Odgovori s citatom

V ta namen se drugače uporablja TListView.
Imaš rešeno vse kar želiš in še več.
Seveda pa moraš TListView.ViewStyle nastaviti na vsReport!


LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.65
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Pet Okt 12, 2007 2:39 pm    Naslov sporočila:   Odgovori s citatom

Šlo bi tudi z string gridom.
Memotu in podobnim lahko dodaš scrollbare: scrollbars (ssnone, ssboth, sshorizontal in ssvertical). če je zadeva prevelika, bo višek skrit, se ga pa lepo priskrola (čuden izraz) na dan.

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Pet Okt 12, 2007 5:24 pm    Naslov sporočila:   Odgovori s citatom

Hvala obema. Trenuto sem zadevo naredil z RichEdit-om. Lastnost Paragraph.LeftIndent naredi tisto kar sem želel. ListView bi bila vrjetno ravno primerna za to, kar potrebujem a je za moje trenutno znanje preveč.
GJ imaš mogoče kak košček kode za dveh stringov vsakega v svojem stolpcu.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Pet Okt 12, 2007 7:11 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
GJ imaš mogoče kak košček kode za dveh stringov vsakega v svojem stolpcu.


Amm.. Ga imaš že napisanega v helpu.. Laughing
No sem dodal še tri vrstice..
Koda:
procedure TForm1.FormCreate(Sender: TObject);

const
  Names: array[0..5, 0..1] of string = (
    ('Rubble', 'Barney'),
    ('Michael', 'Johnson'),
    ('Bunny', 'Bugs'),
    ('Silver', 'HiHo'),
    ('Simpson', 'Bart'),
    ('Squirrel', 'Rockey')
    );

var
  I: Integer;
  NewColumn: TListColumn;
  ListItem: TListItem;
  ListView: TListView;
begin
  ListView := TListView.Create(Self);
  with ListView do
  begin
    Parent := Self;

    Align := alClient;
    ViewStyle := vsReport;
    GridLines := True;

    NewColumn := Columns.Add;
    NewColumn.Width := 200;
    NewColumn.Caption := 'Last';
    NewColumn := Columns.Add;
    NewColumn.Width := 200;
    NewColumn.Caption := 'First';

    for I := Low(Names) to High(Names) do
    begin
      ListItem := Items.Add;
      ListItem.Caption := Names[I][0];
      ListItem.SubItems.Add(Names[I][1]);
    end;
  end;
end;


Pazi koda je 'event' in sama kreira objekt ob zagonu aplikacije.
Proceduro torej vključiš pod Form1.OnCreate;

Lahko pa ListItem kreiraš normalno tudi v 'Design modu', pač kakor ti je ljubše!

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Pet Okt 12, 2007 7:23 pm    Naslov sporočila:   Odgovori s citatom

Še slikca,da si bodo tudi ostali predstavljali..

LP GJ



ListView.JPG
 Opis:
 Velikost datoteke:  25.11 KB
 Pogledana:  4 krat

ListView.JPG


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Pet Okt 12, 2007 10:56 pm    Naslov sporočila:   Odgovori s citatom

GJ hvala. Tole sem razumel, ter poskusil. A Ko sem poskusil v 'Design modu' se je zataknilo.

Recimo, krerial sem tabelo z dvema stolpcema. Recimo primer, ob kliku na gumb prepiše 10 zapisov v tabelo. To dela, kot je treba. Ne znam pa nastavit širino posameznega stopca.

Koda:
procedure TForm1.Button3Click(Sender: TObject);
var
stolpec:TListColumn;
spisek:TListItem;
ponovi:integer;

begin
ListView1.GridLines:=true;
   for ponovi:=1 to 10 do
   begin
        with ListView1 do
        begin
        spisek:=Items.Add;
        spisek.Caption:=Table2Beseda.AsString;
        spisek.SubItems.Add(Table2Opis.AsString);
        Table2.Next;
        end;
    end;

end;

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
Stran 2 od 3

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 7 dni


Powered by phpBB © 2001, 2005 phpBB Group