Results 1 to 3 of 3

Thread: TIntegerPropertyEx, een betere (?) property editor voor integer waarden

  1. #1

    TIntegerPropertyEx, een betere (?) property editor voor integer waarden

    Ik heb het nogal eens nodig en verbaas me steeds dat het niet werkt: Een aantal componenten op het form moeten elk 25 pixels opschuiven om er nog één tussen te kunnen voegen. Hoe doe je dat? Slepen? Komt niet uit met het grid. Ctrl+Down? Kan ook, maar dan moet je 25 keer op dat knopje drukken...
    Baldo, de OTA-koning spoorde me aan om er dan maar eens wat aan te doen, hetgeen na iets meer dan een uurtje puzzelen heeft geleid tot deze simpele, maar doeltreffende property editor. De code is in ieder geval een stuk korter dan deze aankondiging.

    Met deze property-editor is het schuiven van componenten een stuk eenvoudiger. Als TIntegerPropertyEx is geïnstalleerd, kun je relatieve waarden opgeven voor integer properties, zodat je gewoon 25 kunt optellen bij de top van alle geselecteerde components!

    Eisen
    De code is getest op Delphi 5 en Delphi 2006, en zou ook moeten werken voor alle tussenliggende versies. Met een slim geplaatste define werkt het waarschijnlijk ook wel op eerdere versies.

    Installatie
    Installeer de unit in een design-time package. Voor wie niet weet hoe dat werkt; onderstaande stappen tonen een manier om dit te doen:
    ~ Maak een nieuwe package (File->New->Package)
    ~ Voeg de unit uIntPropEditorEx toe
    ~ Wijzig in Options de usage option naar 'Designtime package'
    ~ 'Install' de package.

    That's it.

    Gebruik
    Integer properties, zoals Top en Left, maar natuurlijk ook andere, accepteren waarden in de volgende notaties (N is een integer, F accepteert een Integer of Floating point waarde):

    N : De property krijgt de waarde N (standaard werking)
    +N : N wordt opgeteld bij de huidige waarde. N mag een negatief getal zijn (bijv +-10)
    *F of /F : De huidige waarde wordt vermenigvuldigd met of gedeeld door F
    +F% : Er wordt F% van de waarde opgeteld bij de huidige waarde. F mag negatief zijn.
    *F% : De waarde wordt ingesteld op F% van de huidige waarde.

    De optellingen spreken voor zich. Een groep componenten in een keer opschuiven is iets wat ik zelf nogal eens nodig heb, en ik ben vast niet de enige.
    De vermenigvuldigingen en percentages zullen misschien niet veel gebruikt worden, maar kunnen bijvoorbeeld handig zijn wanneer je je labels 25% groter wilt maken om genoeg ruimte te bieden in een internationale versie van je applicatie. En heb je het niet nodig? Gewoon geen % tikken en je zult er geen last van hebben.

    Bugs, wensen, todo
    ~ Uitbreiden naar andere types, m.n. Int64 en Floats.
    ~ Andersom aftrekken: Als je N- opgeeft moet de huidige waarde van N worden afgetrokken. Waarschijnlijk volledig zinloos, en daarom nog geskipt. (Versie 2)
    ~ Variabelen of constanten of properties ondersteunen en echte berekeningen uitvoeren, bijvoorbeeld: 'Parent.Height-Height' om het object onderaan het form te zetten, of 'Parent.Height - Height - 10' om 'm 10 pixels boven de onderrand te zetten. (Leuk voor versie 3 of 4... of 5)
    Attached Files Attached Files
    Last edited by GolezTrol; 13-Mar-07 at 21:57.
    1+1=b

  2. #2
    Een domme denkfout, gepinpoint door Baldo, waardoor negatieve getallen altijd als relatief werden beschouwd, terwijl je natuurlijk ook de absolute waarde '-10' in wilt kunnen toetsen. Dit is aangepast; als je een relatieve waarde wilt aftrekken, dan kun je er een negatieve waarde bij optellen, ofwel '+-10'. Getallen die beginnen met een - worden als absolute waarde verwerkt.

    De uitleg is aangepast en de unit is vervangen met de verbeterde versie om misvattingen te voorkomen.
    1+1=b

  3. #3
    De unit is wederom aangepast.
    ~ De foutcontrole en range checking die de gewone IntProperty heeft, wordt nu ook toegepast in deze editor.
    ~ Er wordt tussentijds gewerkt met een Int64 wat iets meer vrijheid geeft voor de input. Je kunt van MaxInt tenslotte een waarde groter dan MaxInt aftrekken en toch een geldige integer krijgen.
    ~ Alle waarden worden eerst gecontroleerd en in een array bewaard. Als één waarde niet goed is, dan wordt geen enkele property ingesteld, om te voorkomen dat een aantal componenten wel wordt gewijzigd en de rest niet als er halverwege een fout optreedt.
    ~ 'Modified' werd niet aangeroepen, waardoor de designer modified-flag niet werd gezet. Hierdoor werden wijzigingen niet meegecompileerd totdat ook een andere wijziging werd doorgevoerd.
    ~ Er is wat commentaar toegevoegd voor extra uitleg over wat er gebeurt.
    ~ Code is wederom getest op Delphi 5 en 2006.
    1+1=b

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
  •