1. iscrtavanja u Design time-u i
2. nemam ideju kako bi napravio OnExit događaj koji treba da se desi kada se napusti i TEdit i TBitBtn.
1. U Design time-u ako promenim mišem veličinu komponente komponenta se lepo iscrta, ali ako otvorim formu na kojoj se nalazi moja komponenta koja ima promenjenu veličinu onda se ne iscrta kako treba. Ako je promenjena veličina manja od podrazumevane (Height=21; Width=121) onda npr. se samo vidi Edit ili Edit i deo Digmeta. Ako je promenjena veličina veća od podrazumevane onda se iscrta kontrola sa početnim vrednostima a ostatak TCustomControle je prazan. Evo slikakoje ilustruju problem.
Kada ja u design time-u mišem promenim veličinu ili kada kontroli nije promenja veličina →
Kada se otvori forma, koja ima kontrolu sa promenjneom veličinom (različitom od podrazumevane) →
Ja sam samo u konstruktoru i OnResize eventu pozivao proceduru RasiriKontrole() koja menja veličinu. Ne znam na koji događaj još treba da se stavi da bi se kontrola lepo iscrtavala i u Design režimu. U Run time radi dobro.
2. Drugo pitanje kako da detektujem kada ko i TEdit i TBitBtn izgubio fokus, jer hoću da napravim OnExit događaj. Neću da mi se desi da je TEdit kontrola fokusirana pa se klikne na TBitBtn i da se pozove OnExit, nego kada se napusti cela komponenta. Da li samo treba da objavim OnExit od TCustomControl i ona će sama da pozove kada njena deca komponente(TEdit i TBitBtn) i ona samam izgube fokus?
Evo dela koda kodi je bitan:
type
TEditIzbor = class(TCustomControl)
private
FEdit: TEdit;
FBitBtn: TBitBtn;
...
procedure OnResizeNasledjena(Sender: TObject);
...
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
...
published
...
property OnExit: TNotifyEvent read FOnExit write PostaviOnExit;
...
end;
function TEditIzbor.SirinaDugmeta: Integer;
begin
// ovo treba da se preradi jer mogu da dodju slike u obzir
Result := 20;
{
Paznja! Kada se poziva TextCanvas nesto se dogadja sa OnResize eventom. Treba
nekako drugacije da se resi sirina dugmeta.
}
{Result := Canvas.TextWidth('000') + 8;
if (Result < 20) and (Width div 2 > 20) then
Result := 20;}
end;
procedure TEditIzbor.RasiriKontrole;
begin
{ Ovde treba da se menja za dugme Left, Width i Height, a za Edit Width i Height }
FBitBtn.Width := SirinaDugmeta;
FBitBtn.Left := Width - FBitBtn.Width;
FBitBtn.Height := Height;
FEdit.Width := FBitBtn.Left;
FEdit.Height := Height;
{FEdit.Text := Format('E(%d, %d, %d, %d); B(%d, %d, %d, %d);', [FEdit.Left, FEdit.Top, FEdit. Width,
FEdit.Height, FBitBtn.Left, FBitBtn.Top, FBitBtn.Width, FBitBtn.Height]);}
end;
procedure TEditIzbor.OnResizeNasledjena(Sender: TObject);
begin
RasiriKontrole;
end;
constructor TEditIzbor.Create(AOwner: TComponent);
const
PodrVisina = 21;
PodrSirina = 121;
begin
FIzvestaj := TStringList.Create;
FPreuzetiZapis := TStringList.Create;
FUpustvo := TStringList.Create;
PostaviUpustvo;
Inherited Create(AOwner);
OnExit := OnExitEditIzbor;
FBoje := TBoje.Create;
with FBoje do
begin
Boja := clWindow;
BojaObavezno := clYellow;
BojaAktivno := clSkyBlue;
BojaNijeNadjen := $9191ff;
BojaNadjenoVise := $aaffaa;
end;
// EDIT polje
FEdit := TEdit.Create(Self); // create
FEdit.Parent := Self;
FEdit.Left := 0;
FEdit.Top := 0;
FEdit.OnKeyDown := OnKeyDownNasledjena;
FEdit.OnKeyPress := OnKeyPressNasledjena;
FEdit.OnChange := OnChangeNasledjena;
FEdit.OnExit := OnExitFEdit;
FTasterBrisanje := False;
FEditTekstStaro := FEdit.Text;
// DUGME
FBitBtn := TBitBtn.Create(Self); // create
FBitBtn.Parent := Self;
FBitBtn.Glyph := TBitmap.Create; // create
FBitBtn.Top := 0;
FBitBtn.Caption := '...';
FBitBtn.TabStop := False;
FBitBtn.Glyph.OnChange := PromenaSlike;
FBitBtn.OnClick := OnBtnClick;
// SelectSQL
FSelectSQL := TStringList.Create; // create
FSelectSQL.OnChange := OnChangeFSelectSQL;
// LINK baza
FFieldDataLink := TFieldDataLink.Create; // create
FFieldDataLink.Control := Self;
FFieldDataLink.OnDataChange := OnDataChange; // Kada se promene podaci
FFieldDataLink.OnActiveChange := OnActiveChange; // Kada se menja aktivno stanja DataSet-a
FFieldDataLink.OnEditingChange := OnEditingChange; // Kada udje ili izadje u Edit state
// FDlgIzbor
FDlgIzbor := nil;
FBaza := nil;
FDataFieldForeign := '';
FDataFieldSearch := '';
FVrednostPoljaPretrage := '';
FIzborParametri := TParams.Create;
OnResize := OnResizeNasledjena; // ovo ne moze da se poziva pre kreiranja ostalih podkomponenata !
Width := PodrSirina;
Height := PodrVisina;
RasiriKontrole;
FPreuzimanje := False;
FRezimRucnogUnosa := False;
FRezimPreuzimanja := False;
FOgranicenUnos := True;
FIzborBrojZapisa := 0; // podrazumevano je nula, a to znaci da ce biti 100 zapisa u izboru
FIzborBrojZapisaUkucan := 0;
FIzborMaxZapisa := False; // podrazumevano je false sto znaci da ce biti 100 zapisa u izboru
end;
Hvala unapred na savetima.
[Ovu poruku je menjao cacafaca dana 02.09.2010. u 17:40 GMT+1]