dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Delphi pamatu atcerēšanās

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
NocK



Joined: 06 Jan 2005
Posts: 107

PostPosted: 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
View user's profile Send e-mail Visit poster's website
Kamazs
Guru
Guru


Joined: 17 Jan 2003
Posts: 829
Location: The glorious ancient city of Loja

PostPosted: Tue Mar 25, 2008 10:02 am    Post subject:

Nebija #10#13?
_________________
...un es uzskatu, ka Fallout ir etalons
Back to top
View user's profile Send e-mail Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
NocK



Joined: 06 Jan 2005
Posts: 107

PostPosted: 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 Smile ):

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 Sad 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
View user's profile Send e-mail Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
NocK



Joined: 06 Jan 2005
Posts: 107

PostPosted: 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 Very Happy 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
View user's profile Send e-mail Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
NocK



Joined: 06 Jan 2005
Posts: 107

PostPosted: 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
View user's profile Send e-mail Visit poster's website
Kamazs
Guru
Guru


Joined: 17 Jan 2003
Posts: 829
Location: The glorious ancient city of Loja

PostPosted: 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
View user's profile Send e-mail Visit poster's website
NocK



Joined: 06 Jan 2005
Posts: 107

PostPosted: 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 Sad
Back to top
View user's profile Send e-mail Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
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