 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
urosg Član


Pridružen-a: Pet 27 Apr 2007 14:30 Prispevkov: 565 Aktiv.: 2.55
|
Objavljeno: Sre Okt 10, 2007 9:42 pm Naslov sporočila: |
|
|
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.
Opis: |
|
 Download |
Ime datoteke: |
RegExpr.txt |
Velikost datoteke: |
144.82 KB |
Downloadano: |
6 krat |
|
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.65 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Čet Okt 11, 2007 9:37 am Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Čet Okt 11, 2007 12:14 pm Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14677 Aktiv.: 61.80
|
Objavljeno: Čet Okt 11, 2007 1:57 pm Naslov sporočila: |
|
|
Hvala vsem za odgovore. Tale GJ-jeva rešitev se mi zdi zelo dobra. Seveda, niz je načeloma tabela. Meni pa je ravno "manjkala" funkcija, ki vrne karakter iz niza.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.65 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Čet Okt 11, 2007 3:38 pm Naslov sporočila: |
|
|
Karakter iz niza vrneta pos in posex. Posex zna iskati ne samo od začetka, kot dela pos.
Jur
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14677 Aktiv.: 61.80
|
Objavljeno: Čet Okt 11, 2007 4:01 pm Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14677 Aktiv.: 61.80
|
Objavljeno: Čet Okt 11, 2007 7:26 pm Naslov sporočila: |
|
|
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 |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.65 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pet Okt 12, 2007 9:15 am Naslov sporočila: |
|
|
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
Opis: |
|
Velikost datoteke: |
11.39 KB |
Pogledana: |
4185 krat |

|
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14677 Aktiv.: 61.80
|
Objavljeno: Pet Okt 12, 2007 11:16 am Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Pet Okt 12, 2007 11:35 am Naslov sporočila: |
|
|
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 |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.65 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pet Okt 12, 2007 2:39 pm Naslov sporočila: |
|
|
Š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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14677 Aktiv.: 61.80
|
Objavljeno: Pet Okt 12, 2007 5:24 pm Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Pet Okt 12, 2007 7:11 pm Naslov sporočila: |
|
|
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..
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Pet Okt 12, 2007 7:23 pm Naslov sporočila: |
|
|
Še slikca,da si bodo tudi ostali predstavljali..
LP GJ
Opis: |
|
Velikost datoteke: |
25.11 KB |
Pogledana: |
4 krat |

|
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14677 Aktiv.: 61.80
|
Objavljeno: Pet Okt 12, 2007 10:56 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|