Omschrijving:
Een NLDMarkableControl toont m.b.v. een Timer-event een 'wandelend' selectiekader rond een T(Win)Control van 2 pixels breed, ongeveer gelijk aan het markeringskader van MS Excel. In een andere vorm wordt dit ook wel Marching Ants genoemd.
Oorsprong:
Ik wilde voor een planning-programma een duidelijk in het oog springend kenmerk aan planning-items kunnen toevoegen om aan te geven dat die gemarkeerd was (bijvoorbeeld de gevonden resultaten van een zoekopdracht). Een border was niet duidelijk genoeg vanwege de aanwezige gridlines, en een kleur was niet duidelijk genoeg, want ik werkte al met meerdere kleuren voor de planning-items.
Gebruik:
Het NLDMarkableControl is er in twee versies; een TNLDMarkableGraphicControl en een TNLDMarkableCustomControl. De markeringsstreepjes worden getekend op de Canvas van het Control en worden verwijderd met Paint. Deze Paint moet in een descender gemaakt worden, aangezien de Paint van TCustom/GraphicControl niets doet en ik eventuele descenders niet in de weg wilde lopen.
De markering is in en uit te schakelen met de methods Mark en UnMark. Intern wordt een counter bijgehouden hoevaak het Control gemarkeerd is. Bij een gelijk aantal aanroepen van UnMark wordt de markering opgeheven, of als de property Marked op False wordt gezet.
Voordelen:
- In één applicatie, meerdere markeringen (dit kan bijvoorbeeld niet in Excel)
Nadelen:
- Indien een descender een Control plaatst, daar waar de markeringsstreepjes moeten gaan lopen, zijn die niet meer zichtbaar; het canvas ligt per definitie altijd op de onderste laag. Verplaatsen van dat Control is dan de oplossing.
- Bij vele markeringen flinke belasting van de processor vanwege het aantal Timers.
Bugs:
- Voor zover ik weet zijn er geen bugs.
Openstaande ideeën:
- Property MarkWidth
- Property MarkSpeed
- Property MarkColor
- Property MarkLength
- ....
Nog te onderzoeken:Waar te vinden?
- Het tekenen van de streepjes gebeurd nu nog met de Pixels-property van het Canvas, maar misschien is het efficienter om een custom linetype te definiëren en deze met PolyLine te tekenen.
- Op de Subversion server, zie http://svn.nldelphi.com/nldelphi/ope...ontrolMarking/.
Wensen, opmerkingen, bugreports, bugsolutions, en alle andere vragen verneem ik graag in een aparte thread.
Veel plezier...
Bookmarks