Page 4 of 4 FirstFirst ... 2 3 4
Results 46 to 56 of 56

Thread: Nieuw Project

  1. #46
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Gebruik Canvas.Pen.Mode = pmNotXor. Daarmee teken je een kleur die wordt samengesteld uit de ingestelde kleur en de aanwezige achtergrondkleur, en daar dan weer een xor bewerking op. Als je dat een tweede keer doet, dan is de lijn weer verdwenen en staat er weer het origineel:
    Delphi Code:
    1. procedure TForm1.RaaklijnPlotten(k: Char; i: Byte);
    2. begin
    3.   if x > dmin then
    4.   begin
    5.     Plotgebied.Canvas.MoveTo(conversiex(dmin), conversiey(r(dmin)));
    6.     Plotgebied.Canvas.LineTo(conversiex(dmax), conversiey(r(dmax)));
    7.   end;
    8.   if k = 'f' then
    9.   begin
    10.     aa := g(x);
    11.     bb := f(x) - (x * g(x));
    12.     Uit_9.Text := 'y = ' + conR(aa) + 'x ' + conR(bb);
    13.   end
    14.   else if k = 'p' then
    15.   begin
    16.     aa := f(x);
    17.     bb := p(x) - (x * f(x));
    18.     Uit_9.Text := 'y = ' + conR(aa) + 'x ' + conR(bb);
    19.   end;
    20.   if x < dmax then
    21.   begin
    22.     Plotgebied.Canvas.MoveTo(conversiex(dmin), conversiey(r(dmin)));
    23.     Plotgebied.Canvas.LineTo(conversiex(dmax), conversiey(r(dmax)));
    24.   end;
    25. end;
    26.  
    27. procedure TForm1.RaaklijnPlottenSerie(k: Char; i: Byte);
    28. var
    29.   Kleur: TColor;
    30. begin
    31.   Plotgebied.Canvas.Pen.Mode := pmNotXor;
    32.   if k = 'f' then
    33.     Kleur := clF
    34.   else if k = 'p' then
    35.     Kleur := clP;
    36.   x := dmin;
    37.   while (x <= dmax) and (not Stoppen) do
    38.   begin
    39.     if i = 0 then
    40.       RaaklijnPlotten(k, 0);
    41.     x := x + dx;
    42.     RaaklijnPlotten(k, 1);
    43.     Application.Processmessages;
    44.   end;
    45.   Plotgebied.Canvas.Pen.Mode := pmBlack;
    46. end;
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  2. #47
    .. ongelooflijk bedankt Albert. Je hebt je er echt in verdiept zie ik. Ik zal het morgen goed bekijken en proberen toe te passen. Ik heb eerst geprobeerd om met twee Image objecten te werken en die over elkaar te leggen. Op zich ging dat goed behalve dan dat alles flikkert. Dus die methode heb ik overboord gezet. Ik heb me nu beholpen met het gedeeltelijk opnieuw tekenen van de pixels die gewist worden. Het is niet onaardig maar het kan veel mooier. Bovendien moet ik alles oplappen met veel booleans om te definieren wat wanneer wel of niet opnieuw geplot moet worden. Dus hopelijk kan ik die booleans er straks uit gooien. Ook begint het programma rommelig te worden. Het werkt goed en ik weet hoe het werkt, maar er zijn denk ik veel te veel globale variabelen. Wiskundig klopt alles als een bus, maar programmatechnisch heb ik zo mijn twijfels. Maar ja, ik ben maar een amateur. Misschien wil je de laatste versie nog eens bekijken. Niet de code hoor, maar gewoon de werking, bediening en interface en zo. En in je achterhoofd moet je je natuurlijk een gebruiker voorstellen die een beetje enthousiast is over wiskunde en dan met name dit deel van de wiskunde. Nogmaals zeer bedankt
    Attached Files Attached Files

  3. #48
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Nu ben ik geen wiskundig wonder, maar ook weer geen leek, dus neem de volgende kritische noten ter harte:
    - Ik vind dat je te veel controls te klein weergeeft. Het gevolg is dat je diverse captions afkort of geheel weglaat wat de gebruiksvriendelijkheid niet ten goede komt. Ik snap wel dat je zoveel mogelijk ruimte van het venster voor de grafiekweergave wilt gebruiken, maar denk dan aan andere mogelijkheden om een groot aantal controls te beheren zoals bijvoorbeeld een PageControl.
    - Je plaatst de controls die bij elkaar horen prima in een GroupBox. Netjes.
    - De edits met het functievoorschrift zijn te bewerken, maar dat heeft niets tot gevolg. Maak die edits dus disabled, of beter: maak er Labels van.
    - De tab-order is werkelijk een drama.
    - Ik zou het venster niet automatisch maximizen, maar dat is misschien een kwestie van smaak.
    - Overigens heeft maximizen nu niet zo veel zin, want daarbij blijft een groot gedeelte van het venster ongebruikt. (Ik heb hier een res van 1920x1200). Maak meer gebruik van de Anchors property!
    - In de Captions gebruik je Nederlandse en Engelse termen door elkaar. Maak een keuze.

    Ik zie eerlijk gezegd nog wel meer dingetjes, maar dit zijn de eerste dingen die in het oog springen.

    Betreffende de code:
    - Die globals zijn op zich niet zo'n probleem, maar het is inderdaad wat netter om ze private te maken.
    - Probeer eens een klasse te maken waar je e.e.a. in opslaat/bijhoudt. Pak mijn TEquation als voorbeeld: daar stop je alle wiskundige dingetjes betreffende de formule in. De volgende stap is dan eventueel een TEquationPainter die de weergave van een TEquation verzorgt (op een arbitrair canvas).
    - En probeer je aan de gangbare coding-guidelines te houden (spatiëring, hoofdlettergebruik, één commando per regel, inspringing, etc...). 't Is dat dit onderwerp precies in mijn straatje past en ik het interessant vind, maar anders had ik het al lang opgegeven...

    Succes.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  4. #49
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Om ruimte in je venster te besparen ben ik zelf erg fan van in- en uitklapbare "panels" aan de zijkant van je venster. Ik weet niet wat de officiële naam voor zoiets is dus heb hem ooit eens SnapPanel genoemd, maar ik heb dat component onlangs aangepast en hem toen maar SideBar genoemd. Ongetwijfeld is een dergelijk component ook verkrijgbaar in andere componentensets, maar die ken ik niet.

    Voor de duidelijkheid: dit zijn componenten die je in je IDE moet installeren om ze designtime te kunnen gebruiken.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  5. #50
    Ik vind dat je te veel controls te klein weergeeft. Het gevolg is dat je diverse captions afkort of geheel weglaat wat de gebruiksvriendelijkheid niet ten goede komt. Ik snap wel dat je zoveel mogelijk ruimte van het venster voor de grafiekweergave wilt gebruiken, maar denk dan aan andere mogelijkheden om een groot aantal controls te beheren zoals bijvoorbeeld een PageControl.
    Dat ben ik met je eens. Het wordt allemaal te pietepeuterig. PageControl>zelfs nog nooit van gehoord, Maar bedankt voor de tip.

    Je plaatst de controls die bij elkaar horen prima in een GroupBox. Netjes.
    .. ja dat wel, maar ik heb telkens ruzie met die groupboxes. Volgens mij moet je eerst een groupbox plaatsen en pas daarna de objecten aanmaken die er in komen te staan. Heb je eenmaal objecten en wil je die achteraf in een box plaatsen dan worden ze niet aan elkaar gelinkt en moet je alles aanklikken om het te kunnen verplaatsen. Vaak verdwijen de objecten achter de box en moet ik de box weer verslepen, de objecten 'to front' brengen en daarna de box daar weer overheen zetten zodat alles een geheel wordt. Voor het oog ten minste. Ik heb het gevoel dat het wel anders kan, maar ik verdrink nog vaak in de enorme hoeveelheden properties.

    De tab-order is werkelijk een drama.
    Wat is een taborder en wat is de functie er van?

    Overigens heeft maximizen nu niet zo veel zin, want daarbij blijft een groot gedeelte van het venster ongebruikt. (Ik heb hier een res van 1920x1200). Maak meer gebruik van de Anchors property!
    Bij mij werkt maximizen dus wel, maar ik heb een res van 1366x768. Ik dacht altijd dat het effect van maximizen op elk scherm het zelfde zou zijn. Maar dat is dus niet zo? Die anchors moet ik nog eens beter bekijken, want ook daar is mijn notie maar vaag van.

    In de Captions gebruik je Nederlandse en Engelse termen door elkaar. Maak een keuze
    Ja, die was ik vergeten.

    Probeer eens een klasse te maken waar je e.e.a. in opslaat/bijhoudt. Pak mijn TEquation als voorbeeld: daar stop je alle wiskundige dingetjes betreffende de formule in. De volgende stap is dan eventueel een TEquationPainter die de weergave van een TEquation verzorgt (op een arbitrair canvas).
    .. ja, maar ik moet eerste voor mezelf duidelijk krijgen wat een class nu precies is. Is het zo dat als ik vroeger in TP een unit maakte met bijvoorbeeld de naam Tools en in die unit een procedure ToolX stond/staat dat ik nu een class Tool kan maken en als ik dan ToolX wil gebruiken dat ik dat dan moet formuleren als: Tool.ToolX (?).

    En probeer je aan de gangbare coding-guidelines te houden (spatiëring, hoofdlettergebruik, één commando per regel, inspringing, etc...).
    .. ja, goed dat je dat zegt. Ik zet veel op dezelfde regel zodat ik minder hoef te scrollen, maar dat is voor mij al een teken dat er iets niet klopt. Het kan veel compacter. Met Classes denk ik. Klopt dat?

    ... ik heb maar besloten me niet meer af te vragen of ik ook domme vragen stel

    't Is dat dit onderwerp precies in mijn straatje past en ik het interessant vind, maar anders had ik het al lang opgegeven...
    .. .. daar ben ik je ook zeer erkentelijk voor.

    Ook bedankt voor je sidebar tip. Ik heb een tijd geleden een sidebar voor windows7 gedownload. Geschreven in Java met de code er bij zodat je het geheel aan je eigen smaak kunt aanpassen. Allemaal een beetje bewerkelijk maar zeer mooi om te zien. Het heet Rainmeter.

    Ik ga me nu verdiepen in de canvas.pen mode. Ik hoop dat het lukt. Ik laat het je weten. Vr.Gr. Jan

  6. #51
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    ...maar ik heb telkens ruzie met die groupboxes. ... Heb je eenmaal objecten en wil je die achteraf in een box plaatsen dan worden ze niet aan elkaar gelinkt ...
    Inderdaad, dan hebben alle controls inclusief de GroupBox dezelfde parent, te weten het Form. De truuk is dat je de controls die je op de GroupBox wilt plaatsen van het Form knipt en daarna met de rechtermuis weer op de GroupBox plakt.
    Wat is een taborder en wat is de functie er van?
    De taborder bepaalt welke controls in welke volgorde worden geselecteerd als je met de Tab-toets door je applicatie heenwandelt. Rechtermuisklik op je Form > Taborder.
    Die anchors moet ik nog eens beter bekijken, want ook daar is mijn notie maar vaag van.
    Maak een testprogrammaatje (nieuwe applicatie) met wat controls, stel van enkele daarvan de Anchors property in, runnen, formaat van Form wijzigen en genieten maar...
    .. ja, maar ik moet eerste voor mezelf duidelijk krijgen wat een class nu precies is.
    Miniuitleg:
    - Variabelen:
    Delphi Code:
    1. var
    2.   A: Integer;
    3.   B: String;
    4. begin
    5.   A := 100;
    6.   B := 'Test';
    - Record:
    Delphi Code:
    1. type
    2.   TMyRecord = record
    3.     A: Integer;
    4.     B: String;
    5.   end;
    6. var
    7.   R: TMyRecord;
    8. begin
    9.   R.A := 100;
    10.   R.B := 'Test';
    - Klasse:
    Delphi Code:
    1. type
    2.   TMyObject = class(TObject)
    3.     A: Integer;
    4.     B: String;
    5.   end;
    6. var
    7.   O: TMyObject;
    8. begin
    9.   O := TMyObject.Create;
    10.   O.A := 100;
    11.   O.B := 'Test';
    12.   O.Free;
    Moeilijker dan dit is het eigenlijk niet. Zie ook de links waar ik al eerder naar verwees voor iets meer uitgebreide voorbeelden.
    Ik zet veel op dezelfde regel zodat ik minder hoef te scrollen, maar dat is voor mij al een teken dat er iets niet klopt. Het kan veel compacter. Met Classes denk ik. Klopt dat?
    Nee. In jouw geval zal het met gebruik van een objectklasse niet compacter worden. Integendeel.
    Er is niets mis met lange code, of een lange unit, of een lange procedure. De "standaard" coding-guideline garandeert min of meer, voor iedereen:
    - leesbare code,
    - overzichtelijke code,
    - herkenbare code.
    Sommigen stellen zichzelf richtlijnen/regels op betreffende de lengte van een routine, bijvoorbeeld maximaal één venster hoog met het oog op overzichtelijkheid. Dat mag, maar hoeft niet. Als je iets dergelijks wilt bewerkstelligen, dan moet je op een gegeven moment misschien beslissen om een routine (= procedure of functie) die te lang wordt op te delen in meerdere routines. Vaak is een (te) lange routine een signaal dat je code kunt vereenvoudigen door herhalingen te elimineren d.m.v. de introductie van een nieuwe subroutine, maar dat is net zo vaak niet het geval. Sommige routines zijn nu eenmaal gewoon lang.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  7. #52
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Overigens:

    Bij de HCC Pascal zit iemand (zijn voornaam was David, maar het bestuur kent hem wel) die een heel mooi functie onderzoek pakket had, dat ook in het middelbaar onderwijs gebruikt werd.

  8. #53
    marcov: dank voor de tip. Ik zal eens googelen.

    NGLN: het lukt me niet met die groupboxen. Als ik met cut en paste objecten in de box plaats zijn ze helemaal verdwenen

    Bedankt voor je class voorbeeld. Dat is helder.

    Ik heb de pen.mode gebruikt en dat is de oplossing. Ik snap alleen niet wat het verschil is tussen pen.mode:=clBlack en pen.color:=clBlack. Die laatste maakt het hele scherm zwart en interfereert heel vreemd met de procedure ClearScreen. Wil je eens kijken wat je er nu van vindt? Er zitten nogal wat gekke onvolkomenheden in waarvan ik niets begrijp. Soms wordt de x as groen en blijven er raaklijnen, die ook groen zijn, staan. Ik heb je code met pen.mode niet letterlijk overgenomen. Misschien was dat beter geweest? Nu goed; ik ben benieuwd. Vr.Gr. Jan
    Attached Files Attached Files

  9. #54
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    het lukt me niet met die groupboxen. Als ik met cut en paste objecten in de box plaats zijn ze helemaal verdwenen
    Alle controls die je paste behouden dezelfde property-instellingen, dus ook de Left en Top properties. Oftewel, als een component met Left = 1000 op het Form staat, dan staat dan component nu met Left = 1000 op de GroupBox. Als de GroupBox smaller dan 1000 is, dan zie je het component dus niet. Het component kun je altijd nog selecteren in de object inspector om de property's opnieuw in te stellen, maar je kan de componenten voordat je ze knipt ook eerst naar de linkerbovenhoek van je Form verplaatsen. Het allermakkelijkste is natuurlijk om ze meteen op een GroupBox te zetten...
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  10. #55
    .. dank je. Ik snap het. Hierbij de laatste versie
    Attached Files Attached Files

  11. #56
    .. en hierbij vervalt de vorige ZIPP. Ik heb een probleem waar ik denk ik toch al gauw een uur of zes mee bezig ben. Maar ik kom er niet uit.

    Code:

    Code:
    procedure TForm1.RaaklijnPlotten(k:char);
    var kleur:TColor;
    begin
     if x<dmax then if not FixTangents then
      begin
       Plotgebied.Canvas.Pen.Mode:=pmXor;
       Plotgebied.Canvas.MoveTo(conversiex(dmin),conversiey(r(dmin)));
       Plotgebied.Canvas.LineTo(conversiex(dmax),conversiey(r(dmax)));
      end; ..........................
    Met een clScreen=clWhite wordt de raaklijn vaag groen. En o zo irritant; hij begint met helemaal rechts een lijn te zetten. Met een zwarte achtergrond is de kleur wel goed; namelijk de kleur van de kromme. Maar als de kleur van de kromme verandert, wordt alles weer anders. Dat zit hem in de eigenschappen van al die Pen modes. Ik heb ze allemaal geprobeerd, op verschillende plekken etcetera, in de hoop dat ik de goede combinatie zou vinden. Geen goede methode maar ik weet niets beters te verzinnen.
    Attached Files Attached Files

Page 4 of 4 FirstFirst ... 2 3 4

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
  •