tag:blogger.com,1999:blog-63540334157283043372024-02-19T09:32:43.285+01:00Delphi på DanskJeg vil behandle emner som jeg støder ind i i dagligdagen.Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-6354033415728304337.post-44786941344929755082012-03-08T22:16:00.000+01:002012-03-09T07:01:43.960+01:00En introduktion til RESTJeg vil i dette blogindlæg give en introduktion til hvordan man bygger en REST server og kommunikerer med med en ditto klient, vel at mørke ved bruge af en Professionel udgave af Delphi. Har man tilgang til en af de størrer udgaver af Delphi, Enterprice, Ultimate eller Architect vil jeg så afgjort anbefale at brugen af DataSnap.
Det første jeg gør er at vælge et nyt projekt af Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com2Møgelbjergvej 34, 9310 Vodskov, Danmark57.110253 10.02052157.1080975 10.0155855 57.1124085 10.0254565tag:blogger.com,1999:blog-6354033415728304337.post-52012053262362985402012-02-12T15:35:00.002+01:002012-02-12T15:40:02.457+01:00Et par gemte eller glemte funktionerDenne gang vil jeg blogge om et par glemte eller gemte funktioner. Den ene hedder AttatchToConsole og den anden er IsDebuggerPresent.
Lad mig starte med den sidste først. Når jeg udvikler programmer har jeg tit brug for at teste noget mange gange under udviklingen. Typisk er der tale om en eller flere vinduer, hvori der skal udfyldes en 3-4 felter eller mere, klikkes på nogle knapper, Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com0Møgelbjergvej 34, 9310 Vodskov, Danmark57.110253 10.02052157.1080975 10.0155855 57.1124085 10.0254565tag:blogger.com,1999:blog-6354033415728304337.post-51138550359204025052012-01-28T20:24:00.001+01:002012-01-28T20:25:05.591+01:00Et loginsystemFørst vil jeg starte med at ønske mine læsere et godt nytår. Jeg håber alle kom godt ind i det. Dernæst skal jeg beklage den lange periode uden blogindlæg fra min side, men det er der flere grunde til. Dels, mellem jul og nytår, fik min computer et psysisk sammenbrud.
Jeg ville sætte en SSD disk i computeren som system disk, det gjorde computeren særdeles ustabil. Det viste sig efter lang Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com0Møgelbjergvej 34, 9310 Vodskov, Danmark57.110253 10.02052157.1080975 10.0155855 57.1124085 10.0254565tag:blogger.com,1999:blog-6354033415728304337.post-58397327425000746122011-12-24T09:26:00.002+01:002011-12-24T11:25:03.158+01:00TDictionary og TEqualityComparerForleden dag havde jeg brug for at vide, hvor mange rækker, der var i hver tabel i en database, og det havde jeg så brug for at spørge om mange gange. Til det brugte jeg en TDictionary. TDictionary er en af de strukturer vi fik sammen med Generics og dermed Delphi 2009. TDictionary bruges til at samle en nøgle med en værdi i en liste. Før Generics ville jeg have brugt en Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com0Møgelbjergvej 34, 9310 Vodskov, Danmark57.110253 10.02052157.1080975 10.0155855 57.1124085 10.0254565tag:blogger.com,1999:blog-6354033415728304337.post-61724931959717031742011-12-18T19:00:00.000+01:002011-12-18T19:00:40.614+01:00Smart Pointers og function Invoke: T;Smart pointers har, indtil for nyligt, ikke været muligt at implementere i Delphi grundet manglen på Generics. Generics kom som bekendt i Delphi 2009.
Lad mig først starte med at citere Wikipedia for at få defineret præcis, hvad smart pointers egentligt er:
"In computer science, a smart pointer is an abstract data type that simulates a pointer while Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com0Møgelbjergvej 34, 9310 Vodskov, Danmark57.110253 10.02052157.1080975 10.0155855 57.1124085 10.0254565tag:blogger.com,1999:blog-6354033415728304337.post-85857030233355911502011-11-30T18:01:00.001+01:002011-11-30T21:40:26.388+01:00Slet tomme mapperI dag stod jeg over for en sjov udfordring på arbejde. Jeg havde en mappe struktur med en masse filer i, som skulle lægges i en database. Det i sig selv er ikke ret svært, og er ikke relevant i forhold til mit indlæg. Det, der er meget mere interessant, er BAGEFTER - når der skal ryddes op på harddisken. Jeg ønsker at slette alle de tomme mapper, men kun de tomme mapper. Hvis der liggerJens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com19310 Vodskov, Danmark57.108387 10.02715457.0394045 9.8692254999999989 57.1773695 10.1850825tag:blogger.com,1999:blog-6354033415728304337.post-32426729283915735372011-11-08T22:38:00.001+01:002011-11-09T09:57:07.323+01:00cxGridExtentionU - En faktor 60 !Det er vist ingen hemmelighed, at jeg er stor fan af Developer Express, og bruger deres komponenter alle de steder, jeg kan komme afsted med det. Enkelte steder er der nogle "uhensigtsmæssigheder", som kunne være gjort smartere/bedre/hurtigere, men det ER ikke mange steder. Og generelt er der så mange ting, vi får foræret, når vi bruger DevExpress, at det på ingen måde ødelægger "billedet".
Når Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com09310 Vodskov, Danmark57.108387 10.02715457.0394045 9.8692254999999989 57.1773695 10.1850825tag:blogger.com,1999:blog-6354033415728304337.post-80346047071291904612011-11-03T12:19:00.000+01:002011-11-04T20:59:25.325+01:00Dynamiske filtre i et TcxGridI dette indlæg vil jeg vise, hvordan man bygger filtre op dynamisk i et TcxGrid på runtime.
I et TcxGrid er standard funktionaliteten, at man kan vælge en lille drop down på en kolonnes header og vælge, hvilke værdier man vil have grid'et filtreret efter. Når man klikker på checkboxene i den lille drop down, genereres et filter, som bliver synligt i bunden af grid'et.
Her Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com09310 Vodskov, Danmark57.108387 10.02715457.0394045 9.8692254999999989 57.1773695 10.1850825tag:blogger.com,1999:blog-6354033415728304337.post-52095375659817191132011-11-02T18:29:00.003+01:002011-11-02T18:29:14.498+01:00Thumbnails!Thumbnails! Et godt dansk ord til en god dansk Delphi blog ;-) Men det var nu det bedste ord jeg kunne finde.
Jeg vil i dette indlæg behandle lidt forskelligt. Dels vil jeg vise, hvordan man tilgår data i en TBitmap ved hjælp af "Scanlines", og dels vil jeg vise hvordan man får Windows til at genere thumbnails for billeder der ligger på harddisken.
Jeg vil angive nogle eksekverings tider, det Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com09310 Vodskov, Danmark57.108387 10.02715457.0394045 9.8692254999999989 57.1773695 10.1850825tag:blogger.com,1999:blog-6354033415728304337.post-79201736617798474332011-10-31T20:56:00.001+01:002011-11-01T11:28:47.416+01:00TList.Sort();
Jeg formoder at alle bekendt med, at Delphi fra version 2009 har generiske typer. Herunder generiske lister.
Helt kort: Hvis man skal bruge en type stærk liste af en bestemt type - det kan være en simpletype, en klasse eller en record - så skal man:
1) Uses Generics.Collections
2) Erklære en variable: List : TList<TMyType>;
3) Kalde dens constructor: List := TList<Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com09310 Vodskov, Danmark57.108387 10.02715457.0394045 9.8692254999999989 57.1773695 10.1850825tag:blogger.com,1999:blog-6354033415728304337.post-66285544811429577482011-10-31T06:17:00.000+01:002011-10-31T11:43:47.938+01:00Implementering af "for in operatorer" vha. TEnumerator og TEnumerableJeg har i et tidligere indlæg vist, hvordan man laver en typestærk liste ved hjælp af Generics. Det kostede ikke meget sved på panden i modsætning til i Delphi 2007, hvor man ikke har generics og således skal kode det hele selv.
Som jeg skrev i slutningen af mit indlæg, får man med brugen af TObjectList<T> eller TList<T> kun en standard enumerator - altså man kan "kun" benytte sig afJens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com09310 Vodskov, Danmark57.108387 10.02715457.0394045 9.8692254999999989 57.1773695 10.1850825tag:blogger.com,1999:blog-6354033415728304337.post-57706391957698924442011-10-31T06:08:00.000+01:002011-10-31T06:08:26.026+01:00"For in"-operatoren ved hjælp af GenericsI et tidligere indlæg viste jeg, hvordan man lavede en "for in"-operator i Delphi 2007. Dette indlæg vil kort vise, hvordan det gøres ved hjælp af generics, og således i Delphi 2009 og senere.
Til forskel fra tidligere (pre generics), hvor man skulle implementere sine egne lister vha. nedarvning for at få den type stærke, klares det i dag med nogle enkelte linjers kode, og erklæringen af Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com09310 Vodskov, Danmark57.108387 10.02715457.0394045 9.8692254999999989 57.1773695 10.1850825tag:blogger.com,1999:blog-6354033415728304337.post-29149104558742772982011-10-30T13:55:00.000+01:002011-10-30T21:19:54.104+01:00Class og Record Helpers"Hjælpe-klasser" til både records og klasser var en af de store nyheder til Delphi 2007. Her flere år efter er det stadig ikke ret udbredt, ihvertfald ikke i den kode jeg er kommet forbi.
På min arbejdsplads sidder vi 8 Delphi-udviklere, og til trods for det, er der ikke andet end en enkelt eller to (ud over mig), der for alvor har taget class/record helpers i brug. Personligt forstår jeg det Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com0tag:blogger.com,1999:blog-6354033415728304337.post-21829147016343317152011-10-30T11:45:00.000+01:002011-10-30T21:26:15.686+01:00"For in"-operatoren i Delphi 2007"For in"-operatoren blev introduceret i Delphi 2007, tror jeg nok. Den var der med sikkerhed ikke i Delphi 7, og jeg må indrømme at jeg ikke rigtigt har brugt nogle af de mellemliggende Delphi versioner. De var efter min smag ikke stabile nok, og Delphi 8 fandt jeg aldrig rigtigt ud af, hvad meningen var med.
Men pyt med det! Måske nogle af mine læsere ved bedre end mig, og kan oplyse mig om Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com29310 Vodskov, Danmark57.108387 10.02715457.0393215 9.8692254999999989 57.1774525 10.1850825tag:blogger.com,1999:blog-6354033415728304337.post-43461953924005509882011-10-30T07:37:00.000+01:002011-10-30T21:35:26.632+01:00Locale: TFormatSettings;TFormatSettings var en af de store nyheder i Delphi 6, men alligevel har den aldrig rigtigt slået igennem. Jo, nogen har nok brugt den, men at dømme ud fra Delphi koden der findes rundt omkring på nettet, så er det ikke vildt udbredt. Grundæggende set kan jeg jo kun tale for mig selv, jeg har kun periodisk brugt record'en.
For nyligt var der et par indlæg på DAPUG omkring datoformat ogJens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com09310 Vodskov, Danmark57.108387 10.02715457.0393215 9.8692254999999989 57.1774525 10.1850825tag:blogger.com,1999:blog-6354033415728304337.post-44713280560634630472011-10-30T07:18:00.000+01:002011-10-31T06:07:42.801+01:00Velkommen
Velkommen til Delphi på Dansk
Jeg vil i min blog forsøge at beskrive forskellige ting omkring Delphi. Dels smarte måder at gøre forskellige ting på, men også noget om hvordan de "nye" features virker i Delphi. Med de "nye" features, tænker jeg på alt det der er kommet ind i sproget siden Delphi 2009, og senest med Delphi XE 2.
Jeg skriver på dansk, fordi det er mit sprog. Der findes rigtig Jens Borrisholthttp://www.blogger.com/profile/00754416827786671138noreply@blogger.com29310 Vodskov, Denmark57.108387 10.02715457.0394045 9.8692254999999989 57.1773695 10.1850825