|
|
Sorok maximális számának meghatározása egy Memo komponensben
|
|
Példaprogram letöltése
6737 bájt
|
Szöveg bevitelére alkalmas komponens több is van. Ha csak egy sornyi szöveges adatot kell bekérni a felhasználótól, akkor arra ott van az Edit, míg ha többsoros szöveget, akkor a Memo. De mit teszünk akkor, ha nekünk például egy maximum 5 sornyi szövegre van szükségünk? A mellékelt példában továbbfejlesztjük egy kicsit a Memo komponenst, hogy ez a probléma se legyen probléma többé.
A mellékelt példaprogram megnyitása előtt a FixedRowsMemo.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Az új komponenst a TMemo osztályból származtatjuk. Először is létre kell hozni egy property-t, amiben megadhatjuk a sorok maximális számát. Ez lesz a MaxRows property. Ha ennek értéke kisebb mint 1, akkor nem vesszük figyelembe, tehát a komponens ugyanúgy fog működni, mint egy egyszerű Memo.
Figyelnünk kell, hogy amikor a felhasználó enter-t üt, akkor ennek ne legyen hatása, ha a szöveg sorainak száma elérte a maximálisan engedélyezett számot. Ehhez a KeyPress eljárást írjuk felül.
if (Key=Char(VK_RETURN)) and (FMaxRows>0) then begin
if (Lines.Count>=FMaxRows) then begin
if Assigned(FOnMaxRows) then FOnMaxRows(self);
Key:=#0;
end;
end;
Ez működik is, egy esetet kivéve. Ha az utolsó sorban nincsenek karakterek, tehát üres, akkor a Lines property-ben ez nem fog beleszámítani a sorok számába. Tehát, ha például a MaxRows property értéke 5, és mi pont az 5. sorban vagyunk, ami egy üres sor, akkor a Count property értéke még csak 4. Ebben az esetben, a fenti kódban megadott feltétel nem teljesül, tehát az enter-t elfogadjuk. Létrejön tehát egy új sor (a hatodik), és a Count property értéke még csak most változik 5-re. További enter-eket tehát már nem tudunk bevinni, viszont a 6. sorba nyugodtan gépelhetünk. Ezt a hibát úgy küszöbölhetjük ki, hogy a Change eljárást is felülírjuk. Ez az eljárás akkor fut le, amikor a szöveg megváltozik. Ebben szintén ellenőrizzük, hogy a sorok száma nem több-e, mint a megengedett, és ha igen, akkor a „felesleges” sorokat töröljük.
while Lines.Count>FMaxRows do Lines.Delete(Lines.Count-1);
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 563. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|