19 - 01 - 2025
Main Menu
Who's online

We have 85 guests and no members online

Latest articles
Visitors
30355644
Today
Yesterday
This Week
This Month
Last Month
All days
6664
9262
50753
160535
288049
30355644

Old stories

Et enkelt og ryddig ancestor-tree design

User Rating:  / 0

Noen ganger kan et enkelt og ryddig design være greit. Som for eksempel her:

updanc3v

anctree13

 

Updated descendant tree

User Rating:  / 0

When we program 2D graphics with many objects that will rotate, move and be zoomed in and out it can be quite complex to find what object the user clicked. Matrices is the way to go in many cases and i will show how i find out what object the user clicked. The tool i use is Microsoft's Visual C# 2008 Express and we will just rotate the objecs here but it will work fine with any movement and zooming also.

 
To rotate the object around its own center we can do this.
 

Rectangle rect = new Rectangle(object.Location, new Size(object.Width, object.Height));
Matrix m = new Matrix();
m.RotateAt(25, new PointF(rect.Left + rect.Width / 2, rect.Top + rect.Height / 2));
Graphics.Transform = m;
Graphics.DrawImage(object, rect);
 

Then the object will be rotated 25 degrees and the same Matrix can be used to rotate thousands of other objects. To find out if the user clicked on a point that is inside the object we just get the point (p) that the user clicked on and do this:
 

Point[] pts = new Point[1];
pts[0] = p;
m.Invert();
m.VectorTransformPoints(pts);
pts[0].X += (int)m.OffsetX;
pts[0].Y += (int)m.OffsetY;
 

Now pts[0] can be used to find if that object was clicked with this code:
if (rect.Contains(pts[0]) MessageBox.Show("You clicked inside");
***************************************************************************
I have now updated DescendantView to use this technique and it rotates very nice the names and dates will be rotated locally the other way so the names are shown horisontally all the time. Rotating the descendant tree 180 degrees was very nice....the youngest persons will be at top then...

27.06.2013 - Updated it with a selection border around clicked person as shown here:

newdesctreviewbox

 

By the way here is a pic of the moon yesterday seen from my moms place

moon2

 

AgetoAgeSqlite (x86) og XP

User Rating:  / 0

I dag skal vi se litt på hva en programmerer trenger å tenke på angående kompatibilitet med eldre versjoner av Windows. Jeg utvikler AgetoAgeSqlite med en pc som kjører Windows 7 (32 bit) og jeg har overhodet ikke tenkt på om programmet mitt vil kjøre på en pc som kjører XP for eksempel. Og det er helt greit for en programmerer skal ikke trenge å bekymre seg om dette under utviklingen. Dette er et problem som (skulle kunnet) løses enkelt når utviklingen er ferdig eller at man har kommet til et punkt der man er fornøyd og man kan begynne å tenke på å publisere programmet.

Men når Windows versjoner kommer og går så kan det være enkelte ting som forandres drastisk i systemet og fra XP til Windows 7 fikk vi noen drastiske forandringer i f.eks path til environment variablene (altså hvor de enkelte systemfiler ligger).

 
For eksempel hvis vi ser på XP så er dette:
 

  •  %ALLUSERSPROFILE% C:\Documents and Settings\All Users
  • %APPDATA% C:\Documents and Settings\{username}\Application Data
  • %COMMONPROGRAMFILES% C:\Program Files\Common Files
  • %COMMONPROGRAMFILES(x86)% C:\Program Files (x86)\Common Files
  • %COMSPEC% C:\Windows\System32\cmd.exe
  • %HOMEDRIVE% C:
  • %HOMEPATH% C:\Documents and Settings\{username}
  • %PROGRAMFILES% C:\Program Files
  • %PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64-bit version)
  • %SystemDrive% C:
  • %SystemRoot% C:\Windows
  • %TEMP% and %TMP% C:\Documents and Settings\{username}\Local Settings\Temp
  • %USERPROFILE% C:\Documents and Settings\{username}
  • %WINDIR% C:\Windows

----------------------------------------------------------
Og for Vista og Windows 7 er dette:
-----------------------------------------------------------

  • %ALLUSERSPROFILE% C:\ProgramData
  • %APPDATA% C:\Users\{username}\AppData\Roaming
  • %COMMONPROGRAMFILES% C:\Program Files\Common Files
  • %COMMONPROGRAMFILES(x86)% C:\Program Files (x86)\Common Files
  • %COMSPEC% C:\Windows\System32\cmd.exe
  • %HOMEDRIVE% C:
  • %HOMEPATH% C:\Users\{username}
  • %LOCALAPPDATA% C:\Users\{username}\AppData\Local
  • %PROGRAMDATA% C:\ProgramData
  • %PROGRAMFILES% C:\Program Files
  • %PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64-bit version)
  • %PUBLIC% C:\Users\Public
  • %SystemDrive% C:
  • %SystemRoot% C:\Windows
  • %TEMP% and %TMP% C:\Users\{username}\AppData\Local\Temp
  • %USERPROFILE% C:\Users\{username}
  • %WINDIR% C:\Windows

-------------------------------------------------------------
Som man ser er det noen forandringer på hvor systemet finner disse variablene og programmet man har laget må kunne håndtere dette. Men som sakt dette problemet er eller skulle ikke være nødvendig å tenke på under utviklingen.
Jeg føler nå at jeg har kommet til det punkt der jeg kan begynne å finne løsninger på dette og siden jeg har en mistanke om at det finnes en mengde pc'er rundt omkring som fremdeles kjører XP (XP er vel den første versjonen av Windows som virkelig er bra!) vil jeg nå prøve å gjøre programmet kompatibelt med XP.
I Microsoft Visual C# Express 2008 som er verktøyet jeg bruker er det noen valg for nettopp dette og jeg prøver nå noen av disse, men siden jeg ikke har en pc med XP installert er det vanskelig å teste dette. Men håper noen med XP kan teste dette og gi tilbakemelding.
Når det gjelder andre ting er det faktisk så enkelt som å kompilere for x86 og at den .Net versjonen som jeg har brukt under utviklingen ikke er nyere enn den som er installert på brukerens pc. (brukeren kan oppdatere sin .Net versjon hvis det ikke er tilfellet)

Updated Ancestor Tree

User Rating:  / 1

updanctreeorg

Oppdatert det gamle ancestor treet med to knapper øverst til venstre i vinduet som åpner et vindu med kommentarer til subjekt og man kan åpne så mange vinduer man vil. Er vinduet åpnet fra før blir det satt i fokus. Den andre knappen kan brukes for å sette barn av subjekt som subjekt. Denne funksjonaliteten er også føyd til på Ancestor 3.1 og man finner den på høyreklikk menyen og da gjelder den for personen som er under musepekeren.

- Oppdatert igjen og nå har også DescendantTree View denne funksjonen. Disse notat vinduene kan maximeres slik at de fyller hele skjermen og det kan være greit når man har store og lange notater. De kan også minimeres og de spretter opp når man velger funksjonen eller man kan selvfølgelig bare klikke på dem på oppgavelinjen. Man kan velge font for den delen av notatet man merker. Altså vil man forandre font for hele notatet merker man hele notatet og velger så font.

- Oppdatert igjen 10-07-2013 og blant annet lagd dobbelklikk funksjon for å få opp personskjema på Ancestor 3.1. Jeg benyttet en artig og interessant teknikk for dette som går ut på lage en Event (hendelse) når man dobbelklikker og det artige er at den ancestoren man klikket på vet selv hvem han er og man behøver ikke å programmere en metode eller funksjon for å finne ut dette.

Oppdatert Desctendant TreeView

User Rating:  / 1

Oppdatert Descendant TreeView. Her er to screenshot der det første er rotert 180 grader men det kan roteres i step på 10 grader med å presse tasten Q på tastaturet eller med å bruke toolbar menyen. Avstanden mellom boksene kan justeres med å presse V og Shift + V. Linjene kan justeres med å presse G og Shift + G. Jeg har også lagd det slik at når man zoomer ut og boksene blir veldig små, så blir kun et rektangel tegnet opp der bildene skulle vært. Dette gjør at det blir lettere å zoome inn og ut på hundrevis av etterkommere med masse bilder...

desctreeA

desctreeB

16-07-2013 - Oppdatert Descendant TreeView slik at alle bokser får en border med et wood texture (der bredden man ønsker kan settes). Her på demoen har jeg valgt å kun vise fornavn fordi dette er private detaljer. Når man klikker på en boks får den en fokus border der texturet kan settes i Setup. Her kan man velge mellom 56 forskjellige varianter. AgetoAgeSqlite har også fått et nytt icon som vil vises på statuslinjen i Windows. Personlisten er også oppdatert slik at man kan sette den opp til å vise kommentarer for en person direkte ved å dobbelklikke på dette feltet. En bug er også rettet i Descendant TreeView...hvis man valgte å vise dette med blanke ark (ingen ancestor valgt) ville man få en feil..men dette er nå rettet.

desctreeC

desctreeD