ő tSzerkesztés

ő tSzerkesztés

Néztem, keresett, de nem talált semmit értelmes.
Hosszú ideig volt egy álmom, hogy a tSzerkesztés, önálló ábrázolása a tartalom.

A nagy igény felmerül, például amikor meg kell szerkeszteni a táblázat cellájába, díszített bármilyen stílusban, háttereket, artshriftami, szabálytalan a szöveg helyzete, stb

Alapvetően minden tehet, de zavarban vagyok az a tény, hogy ez vindovyh ellenőrzés, és nem tudom, túl jól a pontos munkája, vagyis azt akarom mondani, hogy én nem tudom, hogyan kell csinálni, hogy ez olyan jól működött mint egy hagyományos tSzerkesztés.

Például egy standard, hogy rögzítse hozzá egyengető legördülő menü, amely eseményeket kezeli beszúrni, törölni, vágott, hogyan lehet egy villogó kursor- a belső fokon TTimer, vagy más, például a helyes úton veszteség és megszerzésére összpontosít, és általában mi funkciók alkatrész .

Szeretném kérni a mesterek, akik tapasztalattal rendelkeznek ezen a területen, egy kis tanácsot, hogy segítsen nekem 8)))

(A kérdések vastagon)
Úgy döntöttem, hogy én örökölnek TMyEdit # XA0; osztály (TGraphicControl).
Hozzátette vagyonát
# XA0; # XA0; Property szöveg: string olvasni FText írási SetText;

Azt hiszem kezdeni, amit tennie kell valamit a komponens bármilyen módon jelenik meg. Nem sokkal zhumaya megtalálják az első megvan utódja, azonos osztályba tartozó, azokat fordult
# XA0; TGauge = osztály (TGraphicControl)
A mintákat a panel. Nézd, hogyan készült. mint minden

de felmerül a kérdés, hogy miért a két bitmap jönnek létre. Mi értelme van a rajzban OverlayImage, ahelyett TheImage?

Holnap folytatódik 20:00 végződik a „Net

Lásd. Az MSDN-ben részén Felhasználói kezelőszervek.
De őszintén szólva, ez egy nehéz dolog -, hogy írjon ellenőrzések a semmiből.

# XA0; # XA0;
# XA0, köz-
// # XA0; # XA0; eljárás CutToClipboard;
# XA0; # XA0; kivitelező létrehozása (AOwner: TComponent); felülbírálhatja;
# XA0; # XA0; destructor megsemmisíti; felülbírálhatja;
# XA0;
# XA0; közzé
# XA0; # XA0; tulajdon Color;
# XA0; # XA0; tulajdon ParentColor;
# XA0; # XA0;
# XA0; end;
.

eljárás TCustomAditor.WMKillFocus (var Msg: TWMKillFocus);
kezdődik
# XA0; örökölt;
# XA0; Windows.HideCaret (fogantyú);
# XA0; Windows.DestroyCaret;
végén;

eljárás TCustomAditor.WMSetFocus (var Msg: TWMSetFocus);
var cw, CH: integer;
kezdődik
# XA0; cw: = 2;
# XA0; CH: = 14;
# XA0; CreateCaret (Handle, 0, CW, CH);
# XA0; ShowCaret (fogantyú);
// # XA0; UpdateCaret;
végén;


Fent is látható, hogyan kell dolgozni koretkoy. Ugyanakkor meg kell hozzá, hogy a kocsi a vstovala polozhenie.Naschet koncentrálni, ha rákattint az egérrel a komponens szükséges a fókuszt # XA0; Windows.SetFocus (fogantyú);
Te poshol TGauge és vizuális komponens. Ahhoz, hogy a folyamatjelző nem villog kettős bufirizatsiyu. Ebben, hogy felhívja a OverlayImage.


> De pomoymu csinálni egy másik osztályba.

Tegnap újraértelmezte a munka jövő alkatrészek tényleg kell tennie a szülő vagy TWinControl vagy TCustomEdit.

Minta által létrehozott TCustomEdit mondta toll, ecset, vászon, újra:
# XA0; # XA0; eljárással WMPaint (var Message: TWMPaint); Üzenet WM_PAINT;

eljárás TMyEdit2.WMPaint (var Message: TWMPaint);
var
# XA0; X, Y, W, H, S: egész;
kezdődik
# XA0, azzal FCanvas do
# XA0; kezdődik
# XA0; # XA0; Pen: = FPen;
# XA0; # XA0; Brush: = FBrush;
# XA0; # XA0; X: = Pen.Width div 2;
# XA0; # XA0; Y: = X;
# XA0; # XA0; W: = szélesség - Pen.Width + 1;
# XA0; # XA0; H: = magasság - Pen.Width + 1;
# XA0; # XA0; ha Pen.Width = 0, akkor
# XA0; # XA0; kezdődik
# XA0; # XA0; # XA0 dec (W);
# XA0; # XA0; # XA0 dec (H);
# XA0; # XA0; end;
# XA0; # XA0; ha W # XA0; # XA0; Inc (X, (W - S) div 2);
# XA0; # XA0 Inc. (Y, (H - S) div 2);
# XA0; # XA0; W: = S;
# XA0; # XA0; H: = S;
# XA0; # XA0; Ellipszis (X, Y, X + W, Y + H);
# XA0; end;
végén;

Hmmm. Nem tudtam, hogy mi okozta WM_PAINT folyamatosan. fedezze fel a közepén Edita folyamatosan villog ellipszis, minden más működik, mint Edita.
Kérdés, hogy a mesterek - Festék és állandóan be kell hivatkozni, és végtelenül dolgozza át a vezérlés, vagy valami, amit felejts el, hogy én kell adnunk néhány zászló egy messege, vagy valami ilyesmi, valami nagyíthat hogy az újrarajzolás tett?

Próbáltam változtatni a szülő TWinControl. már csak egy pislákoló ellipszis.

Hmm. ha túlterhelt a WM_PAINT, akkor miért leszármazottja TCustomEdit továbbra is felhívni a keret, sőt leveleket. Azt mélyebbre ásni a szülők talált
# XA0; # XA0; eljárással WMNCPaint (var Message: TMessage); Üzenet WM_NCPAINT;

Felülbírálat, hogy az összes ugyanazt a kódot ellipsa,
hmm. jobb. van egy fehér téglalap, és mindegy csillámló ellipszis, a betűk nem jelennek meg. Gondolkodunk, hogyan lehet megszabadulni a fehér téglalap.

Hiba - betűket is készíteni.
Szintén találunk kellemetlen hatás - Delfa kezd szörnyen lelassul miatt folyamatos újrafestés.

Hosszú ültem, és úgy vélte a munkát TCustomEdit. kétségek merülnek fel, hogy én is teljesen felülírja a átfestés az ellenőrzés. Ez létrehoz vindovyh Edith, és közli vele Üzenetek segítségével. bár lehet, hogy lehetséges, hogy vindovyh Edith, elrejteni, miközben működő, és felhívni magára, újra cserélik ki az üzeneteket vele.
Szükségesnek látszik, hogy nem rditelem TWinControl, akik legalább felhívja semmi

Kedves mester - kérjük, ossza meg velünk, mi a vélemény, melyik szülő jobb, ha ilyen ellenőrzés, és miért


> Festék és állandóan be kell hivatkozni, és a végtelenségig átrajzolja
> szabályozás

Igen, az üzenet rakodók hívják automatikusan a vezérlő megkapja a megfelelő üzenet. A újrarajzolás hatására végbemenő szinte minden felhasználói műveleteket.

umbra - köszönhetően 8))

Eközben más munkát rátaláltam a következő:
TCustomControl
Ez az osztály származik TWinControl osztályban. Ő bevezeti a vásznon, és tartalmazza a Paint () metódus, amely kiterjedt ellenőrzést az a megjelenés a komponenst. Ez az osztály főleg az egyéni, ablak elemek

De aztán mindent a szöveget kell írni a semmiből

Ha meg akarjuk változtatni csak a rajz tartalmát, akkor örököl TCustomEdit és renderelő véghezvinni TDBEdit például felvezető WM_PAINT.

törölt moderátor
Megjegyzés: Offtopic

Kapcsolódó cikkek