|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
NocK
Joined: 06 Jan 2005 Posts: 107
|
Posted: Tue Mar 25, 2008 9:40 am Post subject: Delphi pamatu atcerēšanās |
|
Sveiki. Nezinu kādu iemeslu dēļ nevaru no darba tikt boot.lv forumā, bet vismaz te tiku. Carēšu uz ātru atbildi, jo jautājums ir vienkāršs.
Man uz formas atrodas komponente TLabel. Tai komponentei ir stabiņā jārāda datubāzē neaizpildītie lauki. Bet ak velns -- esmu aizmirsis, ar kādu simbolu tika apzīmēta pāreja jaunajā rindā.
Jau vairākas stundas sēžu un meditēju virs rindiņas Label1.Caption:= 'Nav ievadīts numurs' + ??? + 'Nav ievadīts datums'
Jau iepriekš pateicos, tiem, kas palīdzēs. |
|
Back to top |
|
|
Kamazs Guru
Joined: 17 Jan 2003 Posts: 829 Location: The glorious ancient city of Loja
|
Posted: Tue Mar 25, 2008 10:02 am Post subject: |
|
Nebija #10#13? _________________ ...un es uzskatu, ka Fallout ir etalons |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Mar 25, 2008 10:31 am Post subject: |
|
Varu atklāt tev vienu noslēpumu - gūglē var atrast gandrīz visu, ko vien gribi. Vajag tikai paprasīt.
Skat: http://www.google.com/search?q=delphi+tlabel+multi-line
Un pirmajā linkā jau atbilde:
http://delphi.about.com/od/adptips2005/qt/tlabelmultiline.htm wrote: | What's more, at run-time, you can use the next assignment to specify multiple lines of text for a Label:
Label1.Caption := 'First line' + #13#10 + 'SecondLine'; |
|
|
Back to top |
|
|
NocK
Joined: 06 Jan 2005 Posts: 107
|
Posted: Fri Apr 18, 2008 8:53 am Post subject: |
|
ok ar šo jau kādu laiku tiku galā. radās cits jautājums.
man ir TMaskEdit. tajā tiek ievadīts datums ar masku '__.__.____', bet es tur varu ievadīt jebko. Gan 66 mēneša dienu, gan 41 mēnesi un 8240 gadu. Programma, kuru taisu, paredzēta datubāzes aizpildei un ar to darbosies operātori, kas drukā ļoti ātri un neskatās ne uz klaviatūras ne monitorā, tie skatās datos papīrā, aizpilda blanku, pārskrien ar acīm pār monitoru, saglabā un drukā tālāk. Sou man vaidzētu, lai datumi, ko vieada operators tiktui pārbaudīti uz kļūdām. Diemžēl esmu vairāk teorētiķis nevis zinātājs :)
Tātad mana pārbaudes iecere ir tāda (laikam pielīdzināšos indiešu programmistiem ):
1. TMaskEdit(onChange) -> Timer.Enabled:=true;
2. Taimeris izgrauž pirmos divus simbolus no MaskEdita, tad ceturto un piekto un tad septīto līdz desmitam, t.i. man parādās 3 mainīgie (day, month, year)
3. Algoritms pārbauda ierakstītos simbolus un uzreiz taisa izmaiņas MaskEditā, t.i. es ievadu datumā "3", tad es nevaru nospiest neko citu kā tikai "1" un "0" t.i. 03, 30, 31. Un tā tālāk.
Nu un tur turpinājumā laikam sanāks daudz nevajadzīga un lieka koda Tātad pašlaik man problema tāda, ka neprotu izgrauzt daļu ievadītā MaskEdit teksta. Un nevaru atrast neko jēdzīgu gūglē.
Idejas? Vai arī man ir pārāk sarežģīta datumu pārbaudes sistēma un to var izdarīt kautkā vienkāršāk? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Apr 18, 2008 9:04 am Post subject: |
|
Parasti GUI veidošanas labais stils saka, ka nevajag aizliegt lietotājam lauciņos aizliegt kaut ko rakstīt. Labāk, lai tas ieraksta, un pie formas saglabāšānas / nosūtīšanas / ok/next nospiešanas ir pārbaudīt visus lauciņus un paziņot/aizlekt uz nepareizi ievadītajiem lauciņiem.
Citādi, kā pats saki - "operātori, kas drukā ļoti ātri un neskatās ne uz klaviatūras ne monitorā, tie skatās datos papīrā". viņš gribes ievadīt datumu 27, bet netīšām nospiedīs ciparu 3. Tālāk tavs taimeris ļaus ievadīt tikai 0 vai 1, bet cilvēks nospiedīs 7 (un joprojām neskatīsies uz ekrāna). Tagad šis domās, ka ir ievadījis datumu un ķersies pie nākamās informācijas ievadīšanas (gada vai mēneša, nav svarīgi) un nospiežot jebkuru ciparu šis izrādās ievadīs otru datuma ciparu. Redz cik viegli šim būs ielaist kļūdas, kuras beigās "pārskrienot ar acīm pār monitoru" varēs itin viegli nepamanīt.
Tāpēc iesaku pie formas saglabāšanas pašam pārbaudīt visu lauciņu valīdumu un kļūdas gadījumā dot kādu signālu (pīkstienu vai sarkaniem burtiem uzrakstītu kļūdu...) |
|
Back to top |
|
|
NocK
Joined: 06 Jan 2005 Posts: 107
|
Posted: Fri Apr 18, 2008 9:29 am Post subject: |
|
Jā pats pieturējos tās versijas. Bet ko darīt, ja saka, ka tā vajag? Vienkārši tie operatori pašlaik strādā identiskā formā, kas ir uztaisīta iekš MS Access ūn cik zinu, tad tur ir tāda lieta, ka viņi nevar nesmuki ievadīt datumus.
Tomēr būs jāmeklē kompromiss Jāiet runāties ar priekšniekiem.
Un pat nezinu kā maksimāli samazināt kļūdas iespēju lietotājam...
Tad vēl viens jautājums par SQL datubāzi un Delphi. Pašlaik man ir lokāls InterBase serveris uz kura visu testēju, bet jau ceļ gaisā man darbam serveri, kur darbosies MySQL, tādēļ man tā kā vaidzētu ar datubāzēm visu normalizēt, lai uzreiz pēc servera pacelšanas varētu sākt testēt to savu programmu.
Programmas galvenā funkcija ir datu ievade, taču ir paredzēta arī atskaišu veidošana, t.i. tas notiek tā:
1. Lietotājs izvēlas atskaitei nepieciešamos laukus (to vispār formā ir pāri 20).
2. Parādās forma, kur lietotājs izvēlas pamatlauku (t.i. lauku pēc kura notiks sortēšana A->Z vai Z->A) un trīs parametru ailes, kuru lietošana ir opcionāla.
Jautajums 1.
Kā realizēt noteikta lauka sortēšanu A->Z un Z->A? Ceru, ka tas tomēr ir kautkas no SQL pamatiem (sūdīgas man zināšanas datubāzēs).
Jautājums 2.
Parametru aile izskatās šādi:
DropDown(izvēlamies DB lauku, kam tiks pielietots filtrēšanas parametrs) un tad ir 2 ailes: "No Edit1 līdz Edit2"
Pagaidām esmu panēcis tikai filtrēšanu pēc teksta sākuma. T.i. varu izvadīt visus 15 datumus, visus vārdus, kas sākas ar "Gu*" utt. Tātad šiss otrais jautājums dalās uz 2 daļām:
2.1.
Kā panākt arī filtrējumu pēc beigām? Piem es gribu meklēt visu, kas notika 2007 gada februārī un man vienalga uz datumu. Kinda "*.02.2007." Bet tas nenostrādā. Vai arī meklēju vārdus kas sākas ar "A*" un beidzas ar "*is".
2.2.
Kā panākt filtrēšanu pēc diapazona? Piem man gribās ierakstus, kas sastādīti no 2004. gada 12. maija līdz 2005. gada 9. janvārim.
Pašlaik, nospiežot "Sastādīt atskaiti" man notiek tikai filtrēšana pēc izvēlēto aiļu sākuma, sortēšana un filtrēšana pēc beigām, loģiski, ka nestrādā.
Filtrēju ar Query1.Filter:='adm_vards='''+Edit1.Text''''; |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Apr 18, 2008 10:50 am Post subject: |
|
NocK wrote: | Jā pats pieturējos tās versijas. Bet ko darīt, ja saka, ka tā vajag? |
Ja nu tiešām tiešām tā vajag, tad to nevajag darīt ar nekādu taimeri. To vajag darīt ar katras pogas nospiediena apstrādi uz lauciņu. Kautkāds OnKeypress vai OnKeyDown events (neatceros vairs precīzi kā saucās).
NocK wrote: | Kā realizēt noteikta lauka sortēšanu A->Z un Z->A? Ceru, ka tas tomēr ir kautkas no SQL pamatiem (sūdīgas man zināšanas datubāzēs). |
SELECT * FROM tabule ORDER BY lauks ASC
vai
SELECT * FROM tabule ORDER BY lauks DESC
Quote: | Kā panākt arī filtrējumu pēc beigām? Piem es gribu meklēt visu, kas notika 2007 gada februārī un man vienalga uz datumu. Kinda "*.02.2007." Bet tas nenostrādā. Vai arī meklēju vārdus kas sākas ar "A*" un beidzas ar "*is". |
SELECT * FROM tabule WHERE datums >="2007.02.01" AND datums < "2007.03.01" (pielabo tik sintaksi datumiem)
SELECT * FROM tabule WHERE lauks LIKE "A%is"
Quote: | Kā panākt filtrēšanu pēc diapazona? Piem man gribās ierakstus, kas sastādīti no 2004. gada 12. maija līdz 2005. gada 9. janvārim. |
Ar AND nosacījumu savienojot abus atsevišķos nosacījumus kopā.
Īsāk sakot - RTFM: http://dev.mysql.com/doc/refman/5.0/en/index.html |
|
Back to top |
|
|
NocK
Joined: 06 Jan 2005 Posts: 107
|
Posted: Fri Apr 18, 2008 12:40 pm Post subject: |
|
thx a lot. tagad esmu tavs parādnieks ;)
Un par tiem datumiem es izdomāju vēl gudrāk. Kad saglabā formu, man notiek pārbaude, vai tika aizpildīti obligātie lauki (ja nē, tad izlido saraksts ar laukiem, ko jāaizpilda un paši lauki tiek izdalīti ar krāsu). Un laikam kautkur turpat pastarpināšu, ka mēnesī nevar būt vairāk par 31 dienām un gadā nav 13 mēneši.
Tfui tfui pēdējā problēma (ko aprakstīju bik augstāk):
Man ir string "12.02.2007". Kā man to stringu sadalīt, lai
d1=12
m1=02
y1=2007
? |
|
Back to top |
|
|
Kamazs Guru
Joined: 17 Jan 2003 Posts: 829 Location: The glorious ancient city of Loja
|
Posted: Fri Apr 18, 2008 12:47 pm Post subject: |
|
Nezinu vai tas ir pats labākais risinājums, bet es bieži vien esmu Delphi izmantojis
sscanf
procedūru, kas ir gandrīz analoģiska funkcijai ieksh C. Paskaties Delphi helpā (to taču tu izmanto, vai ne?) par to, kā jamo pareizi jālieto. _________________ ...un es uzskatu, ka Fallout ir etalons |
|
Back to top |
|
|
NocK
Joined: 06 Jan 2005 Posts: 107
|
Posted: Thu Apr 24, 2008 12:11 pm Post subject: |
|
nav tādas procedūras. Ne sscanf ne scanf un nekā līdzīga... un rīt man jānodod +- strādājošo demo versiju... yess, nedēļas nogale ļoti forša jūtu būs |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Thu Apr 24, 2008 2:11 pm Post subject: |
|
Var šādi:
Code: | var list: TStringsList;
...
list := TStringList.Create;
list.Delimiter := '.';
list.DelimitedText := '12.02.2007';
//list[0] == "12"
//list[1] == "02"
//list[2] == "2007" |
Un neviens jau neliedz izmantot arī gūgli: http://www.google.lv/search?q=sscanf+delphi |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|