Page 1 of 4 1 2 3 ... LastLast
Results 1 to 15 of 49

Thread: Voor/van de absolute beginner

  1. #1
    Member bwzwart's Avatar
    Join Date
    Mar 2010
    Location
    Deventer
    Posts
    77

    Voor/van de absolute beginner

    Mijn eerste kleine stapjes.
    Het doel van mijn verhaal is om nitwits, newbees, dummies, beginners en ieder ander persoon van mijn eigen nivo te helpen zo snel mogelijk creatief aan de gang te kunnen met Delphi. (Ik Google nog steeds op Internet "Delphi Dummy" om voor mij geschikte artikelen te vinden).
    Okay dan, hiermee heb ik mezelf voorgesteld.
    Daar hoort alleen nog een naam bij: Ben Zwart.
    Het programmeren met databases is wat ik voor ogen heb.
    Ik wijs de plekken aan waar ik gestruikeld ben, zodat je in turbogang door kunt gaan om zo snel mogelijk lekker creatief te stoeien met het opbouwen en gebruiken van databases.
    Voorlopig zal ik gebruik maken van de database die in Delphi ingebouwd zit.
    Dat is tenslotte gratis en bovendien heeft de bedoelde ClientDataSet zo barstens veel mogelijkheden dat je er voorlopig zeker mee uit de voeten kunt. Al is het maar om het programmeren met databases onder de knie te krijgen. Pas als ik mezelf goed genoeg voel durf ik de stap te maken naar een multi-user relationele database. Nu nog even niet.
    Uit de vele variaties van Delphi heb ik Delphi7 Enterprise gekozen omdat die nog het meest gebruikt wordt en er veel hulp voor beschikbaar is.
    Een voor mij groot nadeel is het feit dat deze versie niet overweg kan met Russische tekst. Ik heb wel oplossingen gevonden, maar die waren allemaal te moeilijk voor mij.
    De huidige versie Delphi 2010 heeft dit nadeel niet.
    Het kopen en installeren behandel ik hier niet.
    Ik start met het opstarten van Delphi 7, die bij mij in mijn snelstartmenu staat samen met Dev-Pascal, IB-console (InterBase), XVI32 (een hexeditor), Notepad++ (een andere editor) en DelphiBasic (een tutorial voor Delphi).
    Ik kan er nog weinig mee, maar al doende leert men en ik ga ze zeker allemaal in de toekomst meer nodig hebben.

    Na het opstarten verschijnen er 5 losse onderdelen op het scherm.
    Je wordt bijna blind van al die tabjes, icoontjes en knopjes.
    Bovendien is het achtergrondscherm van Windows nog gedeeltelijk zichtbaar.
    Dus eerst maar eens zien waar iets herkenbaars staat.
    Delphi7 start standaard op met een Form1 en een Unit1 in het midden van het scherm.
    Laat ik die maar eens wegklikken.
    Als ik Unit1 wegklik vraagt Delphi of ik wil saven: nee, dat wil ik niet.
    Unit1 verdwijnt en neemt ook Form1 mee.
    Andersom, eerst Form1, dan blijft Unit1 staan.
    Voor nu moeten ze beide weg.
    En natuurlijk weer terug, want ik wil zelf de controle houden.
    Volg dit menupad: File>New>Application
    Delphi geeft een melding "Save Project1?": nee, ik wil nog even niets saven.
    Op het scherm staan weer Form1 en Unit1.
    Een Form is bedoeld om je eigen scherm te bouwen met knoppen, edit vensters, database vensters en nog heel veel meer.
    De Unit is bedoeld om in te programmeren.

    Links zie ik 2 onderdelen: Object TreeView en Object Inspector.
    Ze hebben de akelige eigenschap aan elkaar te koppelen (docken) als je ze over elkaar heen beweegt.
    Voor gevorderden waarschijnlijk, maar ik schrik.
    Hoe krijg ik ze weer uit elkaar?
    Voor de oplossing volg dit menupad:
    Tools>Environment Options...>Preferences>Auto Drag Docking: uitvinken.
    Dat voorkomt dat de venster gaan docken, maar maakt ze nog niet los.
    Om ze weer los te maken zoek je het balkje dat boven Properties/Events staat (rechts van een piepklein kruisje in dezelfde kleur als het bedoelde balkje.
    Sleep dit balkje naar beneden en voila, de vensters zijn weer los.

    Wat gebeurt als ik Form1 en Unit1 minimaliseer?
    Dan zie ik ze niet meer!
    Volg het volgende om ze weer terug te zien:
    Ik maak nu het bovenste venster Object TreeView kleiner, schuif de Object Inspector naar boven, strak tegen de onderkant van Object TreeView.
    Dan maak ik ook de Object Inspector iets korter door aan de onderkant iets omhoog te schuiven.
    En daar zie ik de 2 geminimaliseerde vensters Form1 en Unit1.
    Handig voor de toekomst als je heel veel Forms en Units aan het bewerken bent, want die kun je dus gewoon even onderin het scherm parkeren.

    Ik heb nu in Verkenner van Windows een map aangemaakt waar ik mijn experimenten in kwijt kan: C:\Delphi_Ben\experiment
    Dus kan ik nu mijn eerste experiment gaan saven.
    De Form1 is nog leeg en de Unit1 bevat alleen basiscode.
    Volg dit pad:
    File>Save Project as...>'c:\Delphi-Ben\Experiment\Test1Unit1.pas'.
    Je hoeft hier alleen maar Test1Unit1 in te tikken. Delphi zet er dan .pas achter.
    Dit is het Pascal programma. Een .exe daar kun je niets van lezen in de editor maar de .pas laat juist alle geschreven code zien.
    Test1Unit.pas bevat de Unit en ook de Form. Of beter gezegd: als je de Unit opstart dan wordt de bijbehorende Form ook opgestart.
    Delphi wil nu ook het project .dpr saven. Tik de volgende naam in:
    Test1
    Delphi zet er zelf .dpr achter.
    Met de Verkenner van Windows kun je nu zien wat er gebeurd is.
    Voor nu neem ik dit voor kennis aan.
    De regels voor de naamgeving:
    de .pas file mag niet dezelfde naam hebben als de .dpr file.
    De .pas filename vindt je terug in de titel van de Unit en in de eerste regel van de code: Unit Test1Unit1;
    De naam van de Unit wordt niet gebruikt in de .exe
    De naam van de .dpr file wordt wel gebruikt voor de .exe file, en dat is dus de naam die je aan je programma wilt geven.
    Nu nog even alles afsluiten en dan zit de eerste partij stapjes er bijna op.
    File>Save All als je verder wilt gaan, of File>Close All als je wilt stoppen.
    Ik kies nu de laatste: File>Close All.
    Het laatste wat ik nu nog wil doen is mijn programma weer oproepen.
    Daar zijn verschillende manieren voor.
    Bijvoorbeeld: File>ReOpen...Test1.dpr
    of: File>Open Project>Test1.dpr
    of: File>Open...>Test1.dpr
    of: File>Open...>Test1Unit1.pas
    Allemaal, in dit voorbeeld, hetzelfde resultaat.
    Later zul je zien dat de laatste mogelijkheid wordt gebruikt als je meerdere Forms hebt gemaakt.
    Nu wil ik nog even mijn programma laten lopen.
    Dat kan op de volgende manieren:
    Run>Run
    of: klik op het groene pijltje in de menubalk
    Delphi maakt in beide gevallen nu een .exe aan. Inderdaad een direkt uitvoerbaar programma, een executable: Test1.exe.
    Als die .exe bestaat kun je die buiten Delphi om uitvoeren.
    Ga met Verkenner naar 'c:\delphi-ben\experiment\test1.exe' en dubbelklik die .exe.
    In alle gevallen gebeurt er weinig. Het programma opent de Form, maar daar staat nog niets op. Klik op het afsluitkruisje om te stoppen.

    Hiermee sluit ik het eerste deel af.

    Het volgende deel gaat over het plakken van knoppen op de Form, en het maken van meerder Forms, het wisselen tussen Forms en een eigenbouw BerichtVenster.

    Tot gauw,
    Ben
    Last edited by Marcel; 09-Apr-10 at 13:41. Reason: Delhi gewijzigd in Delphi

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Mooi begin, Ben

    Het mooie van Delphi is juist dat je niet de executable hoeft te starten vanuit verkenner;
    sterker nog: ik doe het bijna nooit... hooguit aan het einde, voordat ik mijn exe de wereld
    in stuur; gewoon op de groene pijl/play/run-knop drukken en hij draait

    ...en het mooie is: als je programma door een fout ineens stopt, dan zie je precies wáár
    hij stopt: "Debuggen", noemen ze dat.

    Maar, eerlijk is eerlijk: de moeilijkste stap is gezet: het verkennen van iets nieuws is begonnen!

    Chapeau!

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

  3. #3
    Senior Member Henk Schreij's Avatar
    Join Date
    Sep 2002
    Location
    Heino (Raalte)
    Posts
    1,465
    Wat een feest der herkenning voor mij .
    Toen ik mijn eerste Windows-achtige computer kreeg (in 1980 een Atari) had ik precies hetzelfde.
    Ik wist niet waar te beginnen en nam dus maar het tekstverwerkings-programma.
    Diskette erin en er gebeurde van alles. Maar ik had geen idee van met een muis klikken, slepen, hints, etc.
    Ik zag wel teksten als File, Print, etc bovenaan het scherm maar wist niet dat het menu-items voorstelden die uitrolden.
    Een week lang zweten en proberen, en toen had ik het een beetje in de gaten.

    Maar met Delphi beginnen was een feest, indertijd met Delphi 1.
    Want er werd een sublime USERS GUIDE meegeleverd.
    Hoofdstuk 1 Introducing Delphi: 25 bladzijden met elementaire uitleg.
    Het begon met "Starting Delphi", met een plaatje van het scherm met uitleg van alle onderdelen.
    In "Elements visible upon starting Delphi", passerden ze alle de revue, met heldere uitleg van alles wat er was:
    -Form
    -Component Palette
    -Object Inspector
    -Code Editor
    -Speedbar
    Daarna "Elements not visible upon starting Delphi":
    -Project manager,
    -Integrated Debugger
    Daarna "The Delphi development model", hoe je
    -componeten op het Form zet
    -een nw Form toevoegt
    -properties zet,
    -program runt
    etc.

    In latere versies verscheen dit in een apart mini-boekje: Quick Start.
    Volgens mij zat het ook nog in de Help.

    Helaas is sinds Delphi 7 de (papieren) documentatie vervallen en de Help een zootje geworden (alhoewel die de laatste tijd weer wat opknapt).

    Ben succes met je vervolg verhaal. En met Delphi natuurlijk. Stel je vragen als je er niet uitkomt.

  4. #4
    Erg mooi om te lezen hoe iemand zijn eerste stappen in Delphi doet. En erg herkenbaar ook

    Alvast een tip: je kunt het audot-docken ook gewoon aan laten staan. Als je een keer niet wilt docken dan druk je gewoon de CTRL toets in tijdens het slepen, er wordt dan niet gedocked.
    Marcel

  5. #5
    Member bwzwart's Avatar
    Join Date
    Mar 2010
    Location
    Deventer
    Posts
    77
    Bedankt voor de positieve opmerkingen.
    Daar krijg ik een Mona blij gevoel van!
    Dus, ik ga uiteraard verder.
    En jullie opmerkingen helpen uiteraard ook mee aan deze handleiding voor beginners.
    @Peter. Je hebt helemaal gelijk. Ik doe de Run ook bijna altijd alleen vanuit het groene pijltje van Delphi. Om dezelfde reden. Het groene pijltje start een Debugger op en als alles goed is en als ik het goed begrepen heb dan wordt daarna een Compiler opgestart die de Pascalcode omzet in een executable. De Debugger laat precies zien waar je iets fout doet, of in mijn geval, laat Debugger al mijn vele fouten zien
    Wat een prachtig stuk gereedschap!
    Ennuh, Peter, zou jij misschien die Debugger in een artikeltje precies willen uitleggen en hier ergens aanplakken?
    Dan kan ik met een gerust hart verder met de uitleg van Forms.
    Als je geen tijd hebt doe ik dat zelf wel, maar dan later.
    @Henk. Bedankt voor je feestje. Ik vier met je mee. Ja, was dat boekje er nog maar van Delhi 1, maar zonder dat boekje gaan we het ook wel redden. En vragen komen er zeker.
    @Marcel. Dat van dat docken en de CTRL toets wist ik niet. Weer wat geleerd.

  6. #6
    Member bwzwart's Avatar
    Join Date
    Mar 2010
    Location
    Deventer
    Posts
    77
    Voor/van de absolute beginner Deel2.
    Ik ga het hebben over Forms.

    Direkt bij het opstarten van Delphi 7 staat er al een Form1 te wachten voor gebruik.
    Ik beschouw de Form als een stukje gereedschap.
    De stippeltjes in de Form maken het makkelijk om componenten zoals knoppen, edit vensters, teksten (labels) en dergelijke, uit te lijnen.
    Wie wel eens in Visual Basic heeft geprogrammeerd weet dat daar ook met Forms wordt gewerkt.
    Maar onze Delphi is toch de kampioen als het gaat om nauwkeurigheid bij het aanpassen van de maten van de componenten en de plek waar ze moeten komen te staan.
    En de overstelpende hoeveelheid componenten waaruit gekozen kan worden.... tja daarom gebruik je dus ook Delphi.
    Laten we beginnen met de Form1 en Unit1 niet te gebruiken.
    Ik haal de test1.dpr op die ik in Deel1 gemaakt heb.
    Als je dat doet zonder wijzigingen aan te brengen in Form1 en Unit1, dan worden deze laatste 2 zonder verder omhaal vervangen.

    Dat kan zo:
    File>ReOpen>c:\delphi-ben\test1.dpr (de makkelijkste manier)
    of, Open Project....> <zoek zelf nu het bestand op test1.dpr>
    of, Open...> <zoek zelf het bestand op en kies test1.dpr, of test1unit1.pas>
    Die verschillende mogelijkheden zijn er niet voor niets.
    Als de 1e mogelijkheid niet kan, omdat na een hele tijd saven van nieuwe projecten, het 1e project niet meer in de ReOpen lijst staat, dan kies je de 2e mogelijkheid Open Project...
    Als je meerdere Forms en/of Units in je project hebt dan wil je misschien juist die ene en niet die andere, dus haal je die Unit (.pas) op met de 3e mogelijkheid.

    Ik wil een icoon.
    Ik ben zover.
    Ik heb een lege Form voor mijn neus staan van mijn Test1 project.
    Om je eigen stempel op je Project te zetten (dat doe ik tenminste zo) is het leuk om het icoontje links bovenin de Form te veranderen.
    Als je de executable van je Project uitvoert dan staat je eigen gekozen icoontje dan ook in de uitvoering van de Form (dat nu een Windows venster geworden is).
    Zoek eerst met de verkenner op "ico".
    Je krijgt een waslijst van icoontjes. Als je in de verkenner Beeld>Miniatuurweergave kiest dan heb je ook meteen de afbeeldingen van die icoontjes op het scherm.
    Onthou waar jouw geweldig leuke icoontje staat.
    Ik ben weer in Delphi.
    Ik activeer de Form1 als die nog niet geactiveerd is door 1x (niet dubbelklikken) op de blauwe balk te klikken.
    Activeren kan op meerdere manieren, maar deze vind ik zelf makkelijk.
    Boven in het venster van de ObjectInspector staat Form1, dat is dus goed.
    Kies de tab Properties van de ObjectInspector.
    Scroll nu naar beneden en vind icon.
    Rechts van icon staat (none).
    Klik op (none) en je ziet ...
    Waarom dit een elips heet mag Joost weten, maar iedereen noemt dit een elips.
    Klik op de elips (of "het" elips), dan op Load... en zoek en vind je icoon.
    Selecteer (klik 1x) op de icoon, en dan Openen, of, klik dubbel op het icoon voor het zelfde resultaat.
    Klik OK. Je hebt een nieuwe icoon in je Form.

    Nu nog even de naam veranderen:
    Er zijn 2 velden in de ObjectInspector Properties die zich met de naam bezig houden.
    Ik kies Caption, want daar wordt de titel van de Form ingezet.
    In Name wordt de naam van de Form gezet die je in je programmacode wilt gebruiken.
    Ik zet Test 1 in de Caption.

    Nu wil ik knoppen plakken. Een ding wat je op de form plakt is volgens programmeurs een Component. Dus, een knop is een Component.
    Zoek en vind in de menubalk bovenin het scherm de tab Standard.
    Even een uitstapje.
    Helemaal rechts van al die tabjes staan 2 zwarte pijltjes.
    Klik hierop om te zien dat er inderdaad enorm veel tabjes zijn en per tabje enorm veel componenten.
    Nog een uitstapje.
    Soms gebeurt er dit.
    Als je met de muiswijzer op een component gaat staan dan hoort er een Hint met hulptekst te verschijnen. Als ik met de rechter muisknop klik dan zie ik dat Hints is aangevinkt.
    Maar soms komen die Hints toch niet tevoorschijn, zoals nu tijdens het schrijven van dit artikel.
    Ik weet nog steeds niets anders dan alles af te sluiten en te saven en dan Delphi weer opnieuw op te starten.
    Ik heb dat nu ook gedaan en de Hints werken weer.
    De Hint bij het component OK zegt "Button" (stdctrls).
    Klik in tab Standard op het component OK.
    Klik nu ergens op de Form, maar niet in de balk van de Form.
    De knop staat op de Form.

    Ik wil nu een programmaatje maken dat de gebruiker tussen 3 Forms laat switchen.
    Dus op elke Form komen 2 knoppen.
    De Forms zijn Test 1, Test 2 en Test 3.
    Ik klik op de knop, op Form Test 1.
    Deze heeft nu nog de titel Button1.
    In de ObjectInspector maak ik de Caption Test 2.
    Ik sleep de Test 2 knop naar links boven.
    Even aan de maten trekken: Ik zet de muiswijzer op de knop, rechterrand, midden.
    Met de linkermuisknop ingedrukt, naar rechts slepen, en de Hints laat zien dat de knop 6 pixels breder wordt.
    Nu met de Shift ingedrukt en de rechter pijltoets op het toetsenbord 1x klikken.
    Nu wordt de knop per klik maar 1 pixel breder.
    Dan kijk ik wat de CTRL toets in petto heeft.
    Dus CTRL ingedrukt houden en 1x op de rechter pijltoets klikken.
    Nu schuift de knop in zijn geheel 1 pixel naar rechts.
    Als ik met de muiswijzer in het midden van de knop ga staan geeft Hints mij de exacte positie en maat van de knop.
    In de ObjectInspector vind je de maten en de posities terug in de properties onder Height, Width, enz.
    Plaats nu een tweede knop met Caption Test 3, vlak onder de 1e knop.
    De Form kan nu zelf ook een stuk kleiner gemaakt worden.

    Tijd om tussendoor even te saven.
    File>Save All (of CTRL+Shift+S).

    Ik maak nu 2 extra Forms.
    File>New>Form
    Maak het Form net zo groot als de 1e en sleep het Form rechts naast de 1e.
    Maak nog een Form.
    Er staan nu 3 Forms naast elkaar.
    Klik op knopje Test 2 en daarna Shift klik op knopje Test 3.
    Beide knopjes staan nu geselekteerd.
    Doe CTRL+C, klik met de muis op Form Test 2, doe CTRL+V, klik op Form Test 3, doe CTRL+V. (Kopiëren en plakken)
    Maak de titel Captions van Form2 en Form3 in orde zoals hierboven is voorgedaan. Vergeet je eigen icoontjes niet.
    In Form Test 2 maak je de Captions van de knopjes Test 1 en Test 3.
    In Form Test 3 maak je de Captions van de knopjes Test 1 en Test 2.


    Het zal al opgevallen zijn dat er nu ook 2 Units toegevoegd zijn.
    Die moeten we even apart saven.
    Klik in de editor op tab Unit2.
    File>Save as...>Test2Unit2.pas (de naam van de Unit in de editor veranderd nu van Unit2 naar Test2Unit2)
    Klik op tab Unit3.
    File>Save as...>Test3Unit3.pas

    Ik ga programmeren.
    Klik in de editor op tab Test1Unit1.
    Dubbelklik in de Form Test 1 op knopje Test 2.
    In de editor komt de code

    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    
    end;
    Je ziet dat mijn knopje Test 2 door Delphi nog steeds Button1 genoemd wordt.
    Ik kan dat wel veranderen, maar laat dat nu zo.
    Het is hier en nu meteen een oefening in verwarring, oftewel, scherp opletten wat je doet met de naamgeving en evenzo scherp opletten tijdens het programmeren.

    Wat betekenen de tekens?
    Het heeft mij enorm veel tijd gekost om er achter te komen wat de punten, puntkomma's, komma's, enz voor een functie hadden.
    De punt tussen 2 woorden betekent zoiets als "van de".
    Tform1.Button1 heeft dus de betekenis Button1 van de TForm1.
    Het teken " = " betekent "is".
    Het teken " := " betekent "wordt".
    De "," wordt gebruikt om parameters te scheiden.
    De ";" wordt gebruikt om opdrachten te scheiden.
    End. is de laatste opdracht (statement) in een Unit.
    Let op met het gebruik van " " en ' '.
    In Delphi moet de ' ' gebruikt worden om tekst in te sluiten.

    Maak nu de code compleet:

    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Form1.Hide;
    Form2.Show;
    end;
    Dubbelklik op knopje Test 3 en maak de code compleet

    Code:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Form1.Hide;
    Form3.Show;
    end;
    Klik in de editor op tab Test2Unit2 en ga door met het programmeren van klik gebeurtenissen voor de rest van de knopjes. Ik vertrouw op je slimheid.

    Zoek in de editor in tab Test1Unit1 het woord implementation.
    Zet de volgende code na een lege regel:

    Code:
    implementation
    
    uses Test2Unit2, Test3Unit3;
    Nu kan Test1Unit1 zien dat er ook nog andere Units zijn, en die gebruiken.
    Vergeet de ";" niet!
    Doe hetzelfde in Test2Unit2:

    Code:
    implementation
    
    uses Test1Unit1, Test3Unit3;
    En de laatste even op eigen kracht doen.

    Nou, dat was het dan.....bijna.
    Ik wil nog even testen.
    Klik op het groene pijltje en ... bij mij werkt alles perfekt.
    Na heen en weer geklikt te hebben tot je het zeker weet kun je afsluiten met het kruisje.
    Nog 1x File>Save all.

    De volgende keer meer.
    Tot gauw,
    Ben

  7. #7
    Member bwzwart's Avatar
    Join Date
    Mar 2010
    Location
    Deventer
    Posts
    77
    Wil je alles weten over de " ; " en het gebruik van dat ding, lees dan dit artikel van

    SamWitse

    http://www.nldelphi.com/Forum/showthread.php?t=35411

  8. #8
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Quote Originally Posted by bwzwart View Post
    Ennuh, Peter, zou jij misschien die Debugger in een artikeltje precies willen uitleggen en hier ergens aanplakken?
    Wat precies de volgorde is bij het compileren en hoe de debugger intern precies
    werkt weet ik ook niet (dat zou marcov misschien beter uit kunnen leggen), maar
    dat is ook eigenlijk niet zo belangrijk om te weten; zolang je maar weet hoé je
    de debugger moet gebruiken

    Als ik zin en tijd kan vinden kan ik wel een klein rondgang schrijven over hoe je problemen
    @runtime (dit is dus als je programma eenmaal draait) op kunt sporen of je code
    kunt controleren dmv de debugger

    Het belangrijkste voor jou momenteel, is dat de compiler geen fouten genereert
    op de door jou geschreven code

    Quote Originally Posted by bwzwart View Post
    Tijd om tussendoor even te saven.
    File>Save All (of CTRL+Shift+S).
    Regelmatig saven is altijd een goede tip; ik heb al eens meegemaakt dat de spanning
    hier uitviel nadát ik een uur had zitten tikken (helaas heeft alleen mijn server een UPS)

    Verder kan ik je aanraden om deze optie in "Tools"->"Environment Options" aan
    te zetten:

    Onder Delphi 6 staat deze namelijk standaard uit

    Met de "Autosave-Editor files" wordt automatisch alle code (*.dpr, *.pas) opgeslagen
    zodra je je project runt; het kan namelijk voorkomen (als je in een later stadium
    gaat zitten experimenteren met pointers e.d.) dat je programma keurig compileert,
    maar knoerthard blijft hangen en daarmee ook je Delphi IDE, zodat je deze geforceerd
    moet "Killen", met als gevolg dat de veranderingen niet zijn opgeslagen!

    Maar goed: ik zal je niet meteen overladen met tips en truuks: alles op z'n tijd!

    Het gaat de goede kant op Ben; ik zal trots zijn als ik over een aantal jaren kan
    opscheppen dat ik de directeur van BenSoft™ persoonlijk nog geholpen heb

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

  9. #9
    Member bwzwart's Avatar
    Join Date
    Mar 2010
    Location
    Deventer
    Posts
    77
    Deel 2.
    Debug.
    Op mijn zoektocht naar de waarheid sla ik vele weggetjes in die blijken dood te lopen.
    Maar ik kom toch vooruit.
    In mijn programmeercode in Deel 2 staan 2 fouten.
    De beruchte ";" fout wordt gewoon geslikt door Delhi en lijkt daarom goed.
    Nogmaals: zie het artikel van Sam Witse over de ";".
    Beter is natuurlijk om het laatste statement voor een "end" geen afluitingsteken ";" te geven.

    Delphi Code:
    1. procedure TForm1.Button1Click(Sender: TObject);
    2. begin
    3. Form1.Hide;
    4. Form2.Show
    5. end;

    De 2e fout komt aan het licht als je Form Test 2, of Form Test 3 wilt afsluiten met het kruisje.

    File>ReOpen>C:\Delhi-Ben\Test1.dpr
    File>Open... C:\Delhi-Ben\Test2Unit2.pas en C:\Delhi-Ben\Test3.Unit3.pas

    Op de Form Test 2, klik op een lege plek.
    In de ObjectInspector, klik tab Events, zoek en vind OnClose, rechts daarvan staat een leeg veld, dubbelklik op dat lege veld.
    In de editor wordt nu automatisch de tab Test2Unit2 gekozen.
    De code voor het afsluiten na een klik op het rode kruisje hoeft alleen nog maar aangevuld te worden met de opdracht (statement) "halt".

    Delphi Code:
    1. procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
    2. begin
    3. halt
    4. end;

    Doe hetzelfde voor Form Test 3.

    Na een Run opdracht is het nu mogelijk om ook Form Test 2 en Form Test 3 af te sluiten.
    Form Test 1 heeft die opdracht "halt" niet nodig. Daar zit het afsluiten al ergens in Delhi ingebakken.

    Tot gauw,
    Ben

  10. #10
    Senior Member Henk Schreij's Avatar
    Join Date
    Sep 2002
    Location
    Heino (Raalte)
    Posts
    1,465
    Ben,

    Je bewandelt wegen die nooit iemand gaat.
    Drie Forms naast elkaar zie je niet vaak.

    Even een toelichting:
    Het 1e Form is het HoofdForm. Als je die sluit, stopt je programma.
    De andere twee Forms hebben dat niet. Met Halt (een opdracht die ik nooit gebruik) stop je het programma.
    Halt is eigenlijk een noodrem.
    Een Form tonen met Show is minder gebruikelijk. Meestal doe je dat met ShowModal.

    Nog even over wat je in post #6 zei:
    Rechts van icon staat (none). Klik op (none) en je ziet ...
    Waarom dit een elips heet mag Joost weten, maar iedereen noemt dit een elips.
    Klik op de elips (of "het" elips), dan op Load... en zoek en vind je icoon.
    In het Engels zijn er 2 woorden:
    Ellipse (een ovaal)
    Ellipsis (weglating, bv bij een lang woord zet je er puntje-puntje-puntje achter)
    Hier wordt gerefereerd aan de tweede betekenis.

  11. #11
    Member bwzwart's Avatar
    Join Date
    Mar 2010
    Location
    Deventer
    Posts
    77

    Post

    Voor/van de absolute beginner Deel 3

    In het volgende Deel 4 pak ik de ClientDataSet (database) bij de hoorns.

    Maar nu eerst nog even de Form.
    Ik wil dat je van Form naar Form kunt schakelen waarbij het voorgaande Form verdwijnt.
    Behalve als je naar het Form Bericht gaat, want dan moet de aanroepende Form op de achtergrond blijven staan.
    Verder mogen de Forms Test1, Test 2 en Test 3 op elke plek op het scherm verschijnen, maar het Form Bericht moet precies in het midden van het scherm.
    Natuurlijk kan het ook anders.
    Ik zou een voorgekookt berichtenvenster kunnen nemen uit de Delphi reeks, of zelfs de MS Windows messagebox kunnen gebruiken, maar het gaat mij hier om het aftasten van de mogelijkheden.
    En tasten is vaak heel prettig.

    Ik voeg een 4e Form toe.
    File>New>Form

    Dan meteen een .pas maken voor deze unit
    File>Save as... c:\delphi-ben\Experiment\Bericht.pas

    Let hierboven even op het pad. Ik vergeet zelf nog wel eens een letter en soms zelfs een gedeelte van het pad. Ik heb in de voorgaande artikelen al eens c:\delphi-ben\test1.dpr geschreven. Dat moet steeds c:\delphi-ben\experiment\test1.dpr zijn.
    Schrijven van een lang artikel is net programmeren alleen de Debugger ontbreekt.

    Even weer een uitstapje.
    Als je plotseling besluit om een project te verplaatsen naar een andere map, dan doet ie het niet meer.
    Zoek voor je het project opstart de .res file van het project en delete die file.
    Als je nu je project runt dan wordt er een nieuwe .res gemaakt en hij doet het weer.

    Maak nu de Caption van de nieuwe Form leeg.
    De Form wil ik altijd in het midden van het scherm laten verschijnen.
    ObjectInspector>Position>poDeskTopCentre
    En ik wil dat de gebruiker niet aan dit venster kan veranderen.
    ObjectInspector>Constraints, klik op "+" en voer de volgende waarden in voor de maximale en minimale hoogte en breedte, onderelkaar: 122, 162, 122 en weer 162.
    Ik haal de knoppen minimaliseren en maximaliseren weg.
    ObjectInspector>BorderIcons>klik op +
    biSystemMenu >True
    biMinimize >False
    biMaximize >False
    biHelp >False

    Nu wil ik een speciale mooie OK knop plakken.
    In de componentbalk klik tab Additional.
    Klik de OKknop. de Hint van deze knop is BitBtn(Buttons).
    Plaats de knop rechts onderin de Form.
    Selecteer de knop.
    ObjectInsoector>Caption OK
    ObjectInspector>Glyps> dubbelklik de ellips>load
    Ga naar c:\program files\common files\borland shared\images\buttons en load check.bmp >ok.
    Als die check.bmp niet te vinden is in het pad hierboven dan moet je hem gaan zoeken met Verkenner, of in uiterste noodzaak Googlen.

    Nu nog een Label.
    Componentbalk>Standerd>A
    Klik op die A en klik daarna bovenin de Form.
    ObjectInspector>Alignment>taCentre
    ObjectInspector>AutoSize>False
    ObjectInspector>Caption leeg maken.
    Deze 3 aanpassingen zorgen ervoor dat de tekst die later vanuit het programma in de Label geschreven wordt gecentreerd wordt.
    En de volgende stap zorgt ervoor dat de tekst vet is.
    ObjectInspector>Font +>Style +>fsBold>True (+ betekent "klik op het plusje")
    Maak nu met slepen de Label bijna net zo breed als de Form.
    In dit Label komen korte berichten te staan.
    Width 184 is zo ongeveer (op de pixel nauwkeurig) de breedte.

    Op de Form Test 1, Form Test 2, en op de Form Test 3, plak ik nu knoppen (Buttons) onder de al aanwezige.
    Deze nieuwe knoppen geef ik dezelfde afmetingen als de andere.
    De nieuwe knoppen krijgen allemaal de Caption "Bericht".

    Ik ga programmeren.

    Ik pas eerst de regel aan na "uses".
    De unit Bericht moet toegevoegd worden.
    In alle 3 Test Forms gaat dit toevoegen hetzelfde, namelijk zo:

    Delphi Code:
    1. uses TestF2, TestF3, Bericht; // Welke Units er gebruikt worden

    In Unit Bericht komt deze regel onder een lege regel onder het woord implementation
    Delphi Code:
    1. implementation
    2.  
    3. uses Test1Unit1, Test2Unit2, Test3Unit3;

    Ik moet aan Form Bericht laten weten welke Form heeft aangeroepen.
    Immers alle Forms (Test 1, Test 2, test 3) hebben nu een knop Bericht.

    Ik heb dus een globale variabele nodig.
    Die komt alleen in Test1Unit1.
    Ik noem die FmNr. Klik in de editor de tab Test1Unit1
    Voor alle duidelijkheid ook de code er omheen.

    Delphi Code:
    1. var
    2.   Form1: TForm1;
    3.   FmNr:Integer; // Global variabele die aangeeft welke Form het Bericht heeft aangeroepen
    4.  
    5. implementation
    6.  
    7. uses TestF2, TestF3, Bericht; // Welke Units er gebruikt worden

    Nu nog een gebeurtenis (event) uitwerken als er op de knop Bericht wordt geklikt.
    Ga naar Form Test 1.
    Dubbelklik de knop Bericht.
    En schrijf deze regels.

    Delphi Code:
    1. procedure TForm1.Button3Click(Sender: TObject); // Bericht
    2. begin
    3. FmNr:=1; // Form1 geeft 1 aan de variabele FmNr, Form2 geeft 2, Form3 geeft 3
    4. Form1.Enabled:=False; // Form1 zichtbaar maar uitgeschakeld
    5. Form4.Show; // Bericht wordt getoond
    6. Form4.Caption:='Bericht';
    7. Form4.Label1.Caption:='Terug naar Form1'
    8. end;

    Even tussendoor: hier staan veel te veel verklarende teksten. Ik gebruik die alleen maar tijdens een leerfase. Later kan die hoeveelheid tekst drastisch verminderd worden. Beter is om alleen boven de procedure/functie tekst te zetten om jezelf, of een andere programmeur, te vertellen wat er gaat gebeuren.

    Dubbelklik in de Form Test 2 op de knop Bericht en codeer:

    Delphi Code:
    1. procedure TForm2.Button3Click(Sender: TObject);
    2. begin
    3. FmNr:=2; // Bericht wordt aangeroepen en Unit Bericht moet dus terug kunnen keren naar Form2
    4. Form2.Enabled:=False; // Form2 wordt uitgeschakeld
    5. Form4.Show; // Bericht wordt getoond
    6. Form4.Caption:='Informatie';
    7. Form4.Label1.Caption:='Terug naar Form2' // tekst in bericht
    8. end;

    Nu nog een keer voor de knop Bericht in Form Test 3.
    Delphi Code:
    1. procedure TForm3.Button3Click(Sender: TObject);
    2. begin
    3. FmNr:=3;
    4. Form3.Enabled:=False;
    5. Form4.Show;
    6. Form4.Caption:='Waarschuwing!';
    7. Form4.Label1.Caption:='Terug naar Form3'
    8. end;

    En dan moet de knop OK in Form Bericht nog wat doen.
    De "Case of" wordt hier gebruikt in plaats van "If Then Else" omdat dat netter is en nog wat meer mooie argumenten.
    Je ziet dat de globale variabel FmNr nu gebruikt wordt om naar het juiste venster terug te keren.
    Dubbelklik die knop en codeer:

    Delphi Code:
    1. // OK button
    2. { In de Form Events OnHide wordt deze procedure ook aangeroepen. Nu wordt dus niet
    3. OnClose gebruikt, omdat we het programma nu NIET willen beeindigen
    4.  }
    5. procedure TForm4.BitBtn1Click(Sender: TObject);
    6. begin
    7.   Form4.Hide;
    8.  
    9.   Case FmNr of
    10.     1:
    11.     begin
    12.       Form1.Enabled:=True;
    13.       Form1.Show
    14.     end;
    15.     2:
    16.     begin
    17.       Form2.Enabled:=True;
    18.       Form2.Show
    19.     end;
    20.     3:
    21.     Begin
    22.       Form3.Enabled:=True;
    23.       Form3.Show
    24.     end;
    25.  
    26.   end;
    27. end;

    En als ik dacht klaar te zijn, bedenk ik wat er zou gebeuren als ik in het Form Bericht op de kruis klik?
    Volg dit pad:
    klik in Form Bericht op de knop OK.
    ObjectInspector>tab Events>OnHide>klik in het lege venster en kies dan Btn1Click.
    Nu zal ongeacht hoe de Form Bericht gesloten wordt de OnClick event uitgevoerd worden.

    Ik doe mijn uiterste best geen typefouten te maken, maar mijn kijkdebugger kan mijn vingerbugger niet bijhouden.
    Ik heb deze bovenstaande code opnieuw volgens de leidraad in dit artikel gemaakt en bij mij werkt alles prima.

    Tot gauw,
    Ben

  12. #12
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Ik vind de artikelen best wel leuk, je moet niet teveel gaan herhalen. Dan gaat het onoverzichtelijk worden. Borduur met de applicatie waar je mee bezig was.
    Delphi is great. Lazarus is more powerfull

  13. #13
    Member bwzwart's Avatar
    Join Date
    Mar 2010
    Location
    Deventer
    Posts
    77
    Quote Originally Posted by jkuiper View Post
    Ik vind de artikelen best wel leuk, je moet niet teveel gaan herhalen. Dan gaat het onoverzichtelijk worden. Borduur met de applicatie waar je mee bezig was.
    Ik vind het inderdaad ook leuk, maar het kost waanzinnig veel tijd.
    En dan nog het risico dat ik onzin uitkraam.
    Herhalen was nu nodig om dat de Forms die ik in mijn voorbeeld gebruik sterk op elkaar lijken, maar net ietsepietsie anders zijn. Maar uiteraard, als ik dit volhou, gaan de instructies steeds korter worden en ga ik er vanuit dat de beginner net als ikzelf steeds minder tekst nodig heeft om het te snappen.

    Ik hoop dat iedere lezer begrijpt dat ik zelf nog maar een paar maanden in Delphi7 programmeer. Ik doe het voor de lol, voor een ander en voor mezelf om kennis te vergaren.

    Beste Henk, ik neem je opmerkingen zeer ter harte.
    Ik kan echter geen andere manier bedenken (ik echt niet weet!) om een andere Form dan Form1 te stoppen en het programma te verlaten.

    En ShowModal? Ik heb natuurlijk meteen in de Delphi Help gezocht.
    Pffffffffffft. Wat voel ik me dan weer dom. Zoveel moeilijk te begrijpen tekst en het voorbeeld dat er bij hoort daar snap ik ook niets van.

    Use ShowModal to show a form as a modal form. A modal form is one where the application canÔÇÖt continue to run until the form is closed. Thus, ShowModal does not return until the form closes. When the form closes, it returns the value of the ModalResult property.

    To close a modal form, set its ModalResult property to a nonzero value.

    Note: If the form contains buttons with a ModalResult property set to a value other than mrNone, the form automatically closes when the user clicks one of those buttons and returns the ModalResult value as the return value of ShowModal.
    Maar uiteindelijk doet ShowModal hetzelfde als Show in mijn geval, of niet?

  14. #14
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Nee. Dit is één van de vele redenen dat ik met Delphi aan de slag bent gegaan. TForm.Show toont wel het scherm, maar zorgt ervoor dat de procedure, waarin de form word opgeroepen verder gaat. Dat kan een nadeel zijn. Voorbeeld:
    delphi Code:
    1. var NewForm : TForm;
    2. begin
    3.   NewForm := TForm.Create(self);
    4.   try
    5.     Newform.show;
    6.   finally
    7.     NewForm.free;
    8.   end;
    9. end;
    Dit scherm zal nooit goed worden opgestart, omdat deze weer wordt vrijggegeven. Newform.show toont dus alleen de formulier. Newform.ShowModal start het formulier op en laat de procedure, die de formulier opstart, wachten tot deze klaar is.
    Delphi is great. Lazarus is more powerfull

  15. #15
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Persoonlijk denk ik (maar dit is mijn mening...) dat je je nog niet echt moet gaan bezighouden
    met meerdere forms; zet gewoon een aantal TButtons, TEdits, TLabels en andere componenten
    op je mainform en speel ermee.

    Deze (eerste drie) componenten zijn vrij basic, je gebruikt ze doorgaans het meest en je kunt
    snel kijken wat bepaalde properties doen (zoals Color, Font, Enabled, Visible) zonder "Schade"
    aan te brengen aan je project (in het ergste geval zie je ze @runtime gewoon niet meer)

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

Page 1 of 4 1 2 3 ... LastLast

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
  •