Novo

Forum kao aplikacija na telefonu

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

  • 7 odgovora
  • 3.735 pregleda

Najnovija ↓

Dodavanje event-a u kontrolu 17.09.2008. u 11:21 · pre 220 meseci #1
Kreirao sam kontrolu koja je nasljednik TDBEdit-a

postoji event: OnExit

kako dodati event: BeforeExit koji bi se startao prije izlaska iz kontrole, i prije pokušaja upisa podatka u tablicu.

Problem je kako kontrolirati korisnikov upis tako da program ne javi pogrešku prilikom izlaska iz TDBEdit-a ako je npr. field TDate, a korisnik je upisao podatak koji se ne može upisati kao datum.

Isto tako bih npr korisnikov upis: "01" atumatski pretvarao u "01.takuči mjesec.tekuća godina" i još ponešto, ali za sve mi treba event koji se starta prije upisa u tablicu.
Re: Dodavanje event-a u kontrolu 17.09.2008. u 12:45 · pre 220 meseci #2
Zasto ne stavis DateTimePicker?
Stavis da ti u DateTimePickeru datum prikazuje danasnji.
Onda samo mijenjas dan.
Tako korisnik ne moze staviti nista osim datuma!

Ili taj dio mozes napraviti na onKeyDown!
Ako je unesena vrijednost datum onda izadji, a ako nije onda
me napravi npr. setFocus na taj TDBEdit.
Re: Dodavanje event-a u kontrolu 17.09.2008. u 14:56 · pre 220 meseci #3
> Kreirao sam kontrolu koja je nasljednik TDBEdit-a
> postoji event: OnExit
> kako dodati event: BeforeExit koji bi se startao prije izlaska iz kontrole, i prije pokušaja upisa podatka u tablicu.

Možeš overajdovati DoExit, uraditi šta želiš i po potrebi pozvati inherited DoExit (koji poziva OnExit).
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Dodavanje event-a u kontrolu 17.09.2008. u 21:14 · pre 220 meseci #4
lakše je s TEdit kontrolom, tj. napravio sam kontrolu TDateEdit kao nasljednika TEdit.
U njoj sam definirao

fDataSource: TDataSource;
fDataField: TField;

published
property DataSet: TIBDataSet read GetDataSet write SetDataSet;
property DataField: TFied read fDataField write fDataField;

...

vezao sam se na procedure AfterPost i BeforePost tako da odradim što mi treba i osvježim podatak koji se prikazuje, to je ok.

e, sad što me muči:

kako dobiti da mi Object Inspector za property DataField nudi samo field-ove iz dodjeljenog DataSeta. Sada mi nudi sve fieldnove, iz svih DataSet-ova koji su na formi (ili vidljivi preko uses iz drugih formi)

moža preko kreiranja tipa:

type
fSetField=(Field1, Field2...);

taba bih definirao

property DataField: fSetField

ali, kako dinamički kreirati set budući da unaprijed ne znam field-ove?


Re: Dodavanje event-a u kontrolu 01.10.2008. u 15:22 · pre 220 meseci #5
bolje uzmi neki drugi način za rešavanje toga
pošto je takva kontrola krajnje jednostavna

a za recimo dodavanje nekog eventa ide ovako
(u zavisnosti koji dodaješ i kad)

Code:

... deklaracija klase

private
  procedure ExitDateEvent(Sender: TObject)

procedure TMojaForma.FormCreate(Sender: TObject);
begin
  dbInvoiceDate.OnExit := ExitDateEvent;
end;

procedure TMojaForma.ExitDateEvent(Sender: TObject)
begin
{
   kod koji nesto radi sa recimo:
  TDBEdit(Sender).Text
}
end;
Re: Dodavanje event-a u kontrolu 01.10.2008. u 16:42 · pre 220 meseci #6
Ja predlazem da se vratimo na pocetak :) , odnosno na TDBEdit. Evo malo koda:

Code:

  TDBEditModifExit = class(TDBEdit)
  private
    procedure CMExit(var Msg: TCMExit); message CM_EXIT;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;


i jos

Code:

  procedure TDBEditModifExit.CMExit(var Msg: TCMExit);  
  begin
    ShowMessage('Ovo je pre inherited CMExit()'); // ovde se zapravo izmeni text po nahodjenju
    inherited;
  end;


A evo sta radi kod u inherited (originalnoj) metodi:

Code:

  procedure TDBEdit.CMExit(var Message: TCMExit); 
  begin
    try
      FDataLink.UpdateRecord;
    except
      SelectAll;
      SetFocus;
      raise;
    end;
    SetFocused(False);
    CheckCursor;
    DoExit;
  end; 


Ja sam pokusao ovo, i dobio sam taj ShowMessage iz prve (cak i bez "kacenja" na bazu); znaci, trebalo bi da radi.

Rajko
Re: Dodavanje event-a u kontrolu 02.10.2008. u 12:29 · pre 220 meseci #7
Nisam vidio odgovore. Hvala na pomoči.

Problem sam rješio malo zaobilazno: Uzeo sam kompletnu definiciju TDBEdita, promjenio mu ime u TDBDateEdit i sve što sam trebao je napraviti override KeyDown i KeyPress. Sve što mi je trebalo sam stavio unutra.

Kontrola radi odlično.

Neke od stvari zbog kojih sam radio svoju kotrnolu:
- nije potrebno unositi "." - sam zna gdje je i dodaje automatski. npr: nakon unosa "12" pritiskom na "3" će formiati tekst: "12.3"
- dozvoljava unos nepostoječeg datuma do trenutka izlaza iz kontrole. npr: 31.02.2008. Ovo zato što me mućila izmjena datuma u dtpickeru koji ovo ne dozvoljava, pa se izmjena datuma sa npr 28.02.2008 na 31.03.2008 mora početi od mjeseca
- umjesto "." prihvača bilo što osim numerika
- "+" i "-" na num. tastaturi mijenjaju dan, sa CTRL - mjesec, sa ALT godinu
- SPACE - postavlja tekući datum
- izmjena podatka ne briše ciji datum, mijenja se samo dan, mjesec ili godina
- podatak koji se ostavi prazan (d,m ili g) popunjava s trenutnim.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme