Results 1 to 2 of 2

Thread: Versiehistorie

  1. #1
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,099

    Versiehistorie

    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:
    • 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.
    Waar te vinden?

    Wensen, opmerkingen, bugreports, bugsolutions, en alle andere vragen verneem ik graag in een aparte thread.

    Veel plezier...
    Last edited by NGLN; 17-Apr-08 at 02:27. Reason: link naar SVN omgezet
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  2. #2
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,099

    Nieuwe versie...

    Het tekenen met een custom linetype bleek bijzonder effectief. Ook de tip van GolezTrol om met slechts één timer te werken pakte positief uit. Het resultaat is een component dat elk willekeurig control kan markeren. Eigenlijk is er te veel gewijzigd om van een nieuwe versie te spreken.

    De naam van dit component is in ieder geval gewijzigd in NLDControlMarker.

    Wijzigingen:
    • Component toegevoegd: TNLDControlMarker. Dit is zeg maar de markeer-manager voor meerdere T(Win)Controls.
    • NLDMarkableGrapicControl en NLDMarkableCustomControl zijn geen componenten meer en heten nu TMarkableGraphicControl en TMarkableCustomControl. Hoewel je deze in principe helemaal niet meer nodig hebt, bieden beide klassen nog wel steeds mogelijkheden voor componentenbouw en hebben ook nog steeds de interne counter.
    • Nieuwe property's voor TNLDControlMarker:
      - MarkBounds: de omtrek van de markering: in geval van een TWinControl of de markering binnen de border wordt getekend (ClientRect), of over de border heen,
      - MarkColor: de kleur van de markeringsstreepjes,
      - MarkDirection: Clockwise of counterclockwise,
      - MarkInterval: het interval van de interne timer, de motor achter het tekenwerk,
      - MarkLength: de lengte van de markeringsstreepjes en de tussenruimte,
      - MarkShift: het aantal pixels dat de streepjes opschuiven bij elk interval. Samen met de MarkInterval property is hiermee dus de snelheid in te stellen. Hoe lager MarkShift, hoe vloeiender het tekenwerk,
      - MarkWidth: de dikte van de streepjes, standaard 2,
      - SpaceColor: de kleur van de ruimte tussen de streepjes. Standaard staat deze op clDefault waardoor de originele achtergrondkleur van het control wordt gebruikt,
      - ControlCount: het aantal controls wat op dit moment word gemarkeerd, read-only.

    Werking:
    • Stel je wilt een memo markeren:
      Code:
        NLDControlMarker1.MarkControl(Memo1);
    • Met UnmarkControl(Memo1) verwijder je de markering,
    • En met UnmarkControls verwijder je alle markeringen.


    Om met TMarkableGraphicControl en TMarkableCustomControl uit de voeten te kunnen hoeft er geen ControlMarker aangemaakt of vrijgegeven te worden.

    Veel plezier er mee...
    Last edited by NGLN; 05-Feb-08 at 03:06.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •