|
|
||||||||
|
|||||||||
![]() |
|
|
#31 |
|
Fornicatorus Formicidae™
Geregistreerd op: Mar 2005
Locatie: Eastwood City
Berichten: 3.829
|
Je kunt ook nooit van jezelf eisen dat je eerste experimenten op het gebied van programmeren
in Delphi (of welke taal ook) meteen uitblinken in flitsende, goed doordachte en foutvrije code ![]() Zoals met alles in het leven leer je ook dit met vallen, uitproberen en opstaan. Gewoon lekker doorgaan zo, dan komt het vanzelf goed. ![]() Greetz, Peter.
__________________
"Is this Delphi which I see before me, The keyboard toward my hand?" [MacPeter]
|
|
|
|
|
|
#32 |
|
Member
Geregistreerd op: Nov 2010
Berichten: 27
|
Dank je Peter. Ik ga zeker door
Laatst aangepast door Marcel : 03-Dec-10 om 08:20 |
|
|
|
|
|
#34 | |
|
mov rax,marcov; push rax
Geregistreerd op: Apr 2004
Locatie: Ehv, Nl
Berichten: 7.984
|
Citaat:
Embarcadero/Delphi heeft al jaren niks aan evangelisatie naar nieuwe gebruikers gedaan, of het is mislukt (de ene na de andere school is naar Java overgestapt), en dus zijjn de gemiddelde developers wat ouder en duurder. Dat is de reden waarom de bulk van de goedkope webapps niet in Delphi gemaakt worden. Ik zit echter in mijn 3/4e (afhankelijk van hoe je het ziet) Delphi gerelateerde baan, en dit is de eerste waar ik NIET een webapp in Delphi heb gemaakt. |
|
|
|
|
|
|
#35 | ||
|
Registered User
Geregistreerd op: Aug 2004
Locatie: Werkendam
Berichten: 4.614
|
Citaat:
Citaat:
__________________
(Sender as TNLDUser).Signature := 'Groeten van Albert'; Laatst aangepast door NGLN : 03-Dec-10 om 22:15 Reden: typo |
||
|
|
|
|
|
#36 |
|
Member
Geregistreerd op: Nov 2010
Berichten: 27
|
Nou, je bericht sluit heel mooi aan bij mijn probleem! Ik ben er na veel ploeteren idd achter gekomen dat de snelheid inderdaad zit in de move en line properties ten opzichte van de pixels property. Ik heb het hele bitmap gebeuren gelaten voor wat het was en de snelheidswinst is verbazingwekkend. Maar ... de raaklijnen worden niet goed getekend, ze lijken te worden afgebroken en gaan verder waar ze niet verder moeten gaan. Net alsof er ergens een rare discontinuiteit optreedt. Dit is de code:
Code:
procedure TForm1.RaaklijnenPlotten;
const dxx=0.1;
var xx: real;
begin
xx:=dmin;
while ((xx<=dmax) and (not stoppen)) do
begin
aa:=g(xx); bb:=f(xx)-(xx*g(xx));
Canvas.MoveTo(conversiex(dmin),conversiey(r(dmin)));
Canvas.LineTo(conversiex(dmax),conversiey(r(dmax)));
sleep(5);
xx:=xx+dxx;
application.processmessages;
end;
end;
Ik heb je code uitgeprint en goed bekeken. Ik heb er heel veel vragen over, maar dan zit ik hier de hele nacht nog te schrijven Nee ik vind OOP zeer interessant. Ik kan er niet tegen als ik iets niet begrijp. Je bent goed in je opzet geslagd om te laten zien hoe het anders kan. Zeer bedankt voor je bijlage en de link. Hoe is zoiets ontstaan? Die omslag van procedureel naar OOP? Slimme denkers en/of de toegenomen snelheid van processoren? Anyway.. die lijn is andere koek; basaler kun je het bijna niet maken. Ik ben daar uren mee bezig geweest en heb telkens de fout in mijn eigen code gezocht, maar volgens mij is het dat toch niet. Ik ben heel benieuwd.
|
|
|
|
|
|
#37 | |
|
Fornicatorus Formicidae™
Geregistreerd op: Mar 2005
Locatie: Eastwood City
Berichten: 3.829
|
Citaat:
Het is alleen op een andere manier aankijken tegen een probleem: het opdelen van één groot probleem in kleine sub-probleempjes, waarbij ieder sub-probleem z'n eigen "Object" is. Je moet het ook niet te ingewikkeld zien: toen ik de overstap maakte van procedureel naar object geörienteerd (met Turbo Vision onder DOS), begreep ik er eerste instantie ook de ballen van ![]() Onder "Ouderwets" Pascal schreef je iets als: Pascal Code:
bepaalde voorwaarde was voldaan en je stopte weer. Onder een grafische omgeving, zoals bij Windows, is het eigenlijk heel onhandig om te werken met een enkel scherm waar tekst van boven naar beneden geprint wordt en waar je in datzelfde scherm ook in een bepaalde volgorde input van jou verwacht wordt. Het mooiste zou dus zijn wanneer je, afgaande op bovenstaande Pascal-code, de beschikking zou hebben tot "Iets" wat een tekst kan weergeven en een ander "Iets" waar een gebruiker weer tekst in kwijt kan. Een derde "Iets" geeft de code de opdracht om dan iets te doen wanneer de gebruiker dat pas wilt (de klant is tenslotte koning, niet de software). Deze "Ietsen" noemen we dan "Objecten" en deze objecten zijn zelf verantwoordelijk voor hetgeen ze geschreven zijn. Het zouden dan bijvoorbeeld in dit geval een TLabel, TEdit en een TButton kunnen zijn. Een TLabel zorgt ervoor dat tekst weergegeven kan worden in een apart venstertje, een TEdit geeft de gebruiker de mogelijkheid om tekst in te voeren en op een TButton kan de gebruiker drukken wanneer hij dit wilt. Je kunt dit dan vergelijken met een team: je hebt een manager ("De baas" - jij dus) die alle zaken overziet en die tegen Pietje (TLabel) zegt: "Ga daar in het kantoor staan en hou dit A4'tje vast met deze tekst". Klaas (TEdit) moet als luisterend oor dienen voor inkomende teksten en Jan (TButton) moet de manager een gil geven wanneer er iemand bij hem aanbelt. Als manager hoef je je dus helemaal geen zorgen meer te maken over de werking van deze "Werknemers": zolang je ze goed aanstuurt (positie op een formulier, de kleur, afmetingen, ...), kun je ze gewoon aansturen door eerst hun naam te roepen, daar een punt achter te zetten, gevolgd door hetgeen je wilt instellen of uitlezen. Delphi Code:
code wordt nog steeds van "Begin" tot "End." uitgevoerd, alleen het verloop van de code is van te voren niet voorspelbaar en is geheel afhankelijk van de input van de gebruiker (alles is "Event-driven"). Het grote voordeel van OOP is dat jij, als programmeur (of manager), niet alles zelf hoeft bij te houden, maar dat alle objecten dit voor je doen. Slechts (of pas) als jij dat wilt, kun je dingen instellen, opvragen en uit laten voeren zonder dat je je er zorgen over hoeft te maken of het wel goed gebeurt. ![]() Greetz, Peter.
__________________
"Is this Delphi which I see before me, The keyboard toward my hand?" [MacPeter]
|
|
|
|
|
|
|
#38 |
|
Registered User
Geregistreerd op: Aug 2004
Locatie: Werkendam
Berichten: 4.614
|
Dit is very weird! 'k Snap het ook niet, ben echt verbaasd. Het enige wat ik kan bedenken is dat het met het tekenen op het Canvas van het Form zelf te maken heeft. Als je tekent op een TPaintBox of TImage, dan gaat het wel goed.
__________________
(Sender as TNLDUser).Signature := 'Groeten van Albert'; |
|
|
|
|
|
#39 |
|
Member
Geregistreerd op: Nov 2010
Berichten: 27
|
Peter: Bedankt voor je uiteenzetting. Dat wat jij beschrijft had ik zelf ook al een beetje bedacht
Ik heb het ook zo wel eens gezien; als je nu een opdracht geeft en na de punt een subopdracht dan roep je een procedure aan die op zijn beurt weer een subprocedure aanroept. Dit alles staat dan ergen in een unit. Maar dat zal te simpel zijn. Als ik de code van Bart lees dan gaat het toch dieper. Pointers en Dynamische Arrays schijnen erg belangrijk te zijn. Dat is van voor de tijd van TP. Het is begrip class is voor mij ook vaag. Maar ik kom er wel achter. De boeken voor beginners die ik heb gaan daar niet diep op in. Albert: Dus voor jou is het ook een raadsel. Dat had ik niet gedacht Maar inderdaad, het heeft iets te maken met het alleen op het form zelf te tekenen. Ik heb het ook met een TImage geprobeerd maar dan krijg ik heel gekke verschijnselen. Het scherm gaar flikkeren en alles wordt zeer langzaam getekend. Maar ik zal die kant toch weer op moeten. Wat is het verschil tussen Image en Paintbox?.. ik meld me later wel weer
|
|
|
|
|
|
#40 |
|
Member
Geregistreerd op: Nov 2010
Berichten: 27
|
.. ik ben benieuwd wat jullie er van vinden!
|
|
|
|
|
|
#41 |
|
Senior Member
Geregistreerd op: May 2006
Berichten: 362
|
Het verschil in gebruik (om het heel simpel te houden) is dat alles wat je op een image tekent er ook blijft staan (of liever gezegd weer opnieuw getekend wordt) als de image tijdelijk geheel of gedeeltelijk onzichtbaar was op het scherm (verborgen achter een ander venster bijv.), terwijl de paintbox dat niet doet.
E.e.a kost overhead en is daardoor (als je daar niets aan doet) trager dan een paintbox. Dat geflikker kun je waarschijnlijk reduceren door de property DoubleBuffered van de TImage op True te zetten. Een gebruikelijke manier om snelheid te winnen en gelikker te voorkomen is om het hele (of deel van het) plaatje eerst in een bitmap in het geheugen te tekenen (een soort scratch-pad a.h.w.), en deze dan in zijn geheel te kopieren naar je image op het scherm. Bart |
|
|
|
|
|
#42 |
|
Registered User
Geregistreerd op: Aug 2004
Locatie: Werkendam
Berichten: 4.614
|
TImage is een component waarmee je heel gemakkelijk afbeeldingen van diverse formaten (jpg, bmp, ico, wmf, etc...) kunt weergeven. Een TImage heeft tevens een eigen Canvas, maar wat je daar op tekent blijft niet zondermeer automatisch staan.
TPaintBox is een component waarop je kunt tekenen. Dit component is een stuk "lichter" dan een TImage. Ook hierop blijft de tekening niet vanzelf staan, teken daarom in de OnPaint eventhandler. Bart_B: DoubleBuffered is een property van TWinControl, dus die zou je van de Parent van de Image (of PaintBox) kunnen instellen om flikkering te voorkomen. Slauerhoff: Leuk, ziet er goed uit!
__________________
(Sender as TNLDUser).Signature := 'Groeten van Albert'; |
|
|
|
|
|
#43 |
|
Member
Geregistreerd op: Nov 2010
Berichten: 27
|
ok. Bedankt voor jullie reacties. Ik weet dat ik vervelend ben maar ik voeg nogmaals het programma toe vanwege uitbreidingen/verbeteringen. Maar er is nog iets wat ik nbiet voor elkaar krijg; dat de schuifjes van de scrollbars op de goede posities worden gezet. Als ik fixed op true zet in de controls groupbox kan ik door een schuifje te verplaatsen de functie meteen laten tekenen zodat het effect van d, a, b, en c duidelijk wordt. Eerder met de zetpixel methode was dat uberhaupt niet mogelijk. Nu met de moveto/lineto wel, maar het gaat nog steeds traag. Wat ik ook niet begrijp is het snelheidsverschil. Een lijn moet zo ie zo getekend worden en ook die lijn is opgebouwd uit pixels. Maar ik vermoed dat het iets te maken heeft met jullie opmerkingen betreffende eerst een afbeelding naar het (video?) geheugen schrijven en pas dan op het scherm zetten. Die pixels worden denk ik rechtstreeks naar het scherm gestuurd. Enfin .. zonder jullie en deze site was dit me nooit gelukt. Of ik had er in ieder geval veel langer over gedaan. Trouwens .. waar vind ik door jullie geschreven programmatuur?
|
|
|
|
|
|
#44 |
|
Member
Geregistreerd op: Nov 2010
Berichten: 27
|
.. hiermee vervalt de vorige ZIP. 't Is nu wel klaar denk ik. Probeer dit eens: laat functies genereren en stel het domein dan in op 2 of 3. Zelf vind ik dit erg mooi.
|
|
|
|
|
|
#45 |
|
Member
Geregistreerd op: Nov 2010
Berichten: 27
|
.. ik meende dat ik klaar was maar het blijft me bezig houden. Met checkboxes en scrollbars kan ik het plotten van de raaklijnen als het ware finetunen. Het enige probleem dat overblijft is dat als ik hem instel op het plotten van enkele lijnen dan wissen (overschrijven) de lijnen de functies (pixels). Ik heb dat proberen te ondervangen door wat gewist wordt weer opnieuw te plotten. Maar dat werkt niet goed en bovendien wordt het programma er duidelijk trager door. De informatie in TEdit moet dus opgeslagen worden en later tijdens het plotten van de raaklijnen vanuit het videogeheugen op het canvas worden geprojecteerd. Althans, als dit kan. En zo ja, hoe. Dank alvast
|
|
|
|
![]() |
| Bookmarks |
| Momenteel bekijken: 1 (0 leden en 1 gasten en/of zoekmachine bots) actieve gebruikers dit onderwerp | |
| Onderwerpopties | Zoek in onderwerp |
| Weergavemodus | Stem op dit onderwerp: |
|
|