Results 1 to 15 of 15

Thread: Selecteren tekst en spaties

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747

    Selecteren tekst en spaties

    Ik maak een mail op in memo met de volgende gegevens:

    Click image for larger version. 

Name:	vaste spaties.png 
Views:	133 
Size:	19.5 KB 
ID:	8059

    Deze tekst is zo gepositioneerd dat het aantal spaties ervoor zorgt dat alles netjes is uitgelijnd.
    Maar als ik deze tekst selecteer, ziet het er zo uit:

    Aantal ingeschreven cavia's : 9
    - Aantal ras (incl vrije klasse): 9

    Het bedrag wat U moet overmaken : 43,50
    specificatie :
    - ras : 36,00
    - knuffel : 0,00
    - administratie : 2,50
    - catalogus : 2,50
    - donatie : 2,50
    - extra (geen lid): 0,00
    - korting : 0,00

    Gegevens inschrijving cavia:

    Rassenkeuring:

    nummer 1
    naam : Cs Skinny Pride's Haunild
    leeftijd : 0j08
    geslacht : Vrouw
    ras : Skinny
    klasse : Klasse B
    collectie : Nee
    koppel : geen
    kleur : Rood


    Ook als ik een non-proportioneel lettertype selecteer, staat er niets meer uitgelijnd.
    Blijkbaar doet tekst selecteren iets met spaties. Als ik deze tekst selecteer en plakt in een een browser met online mail, ziet het er zo uit:

    Aantal ingeschreven cavia's : 9
    - Aantal ras (incl vrije klasse): 9
    Het bedrag wat U moet overmaken : 43,50
    specificatie :
    - ras : 36,00
    - knuffel : 0,00
    - administratie : 2,50
    - catalogus : 2,50
    - donatie : 2,50
    - extra (geen lid): 0,00
    - korting : 0,00
    Gegevens inschrijving cavia:
    Rassenkeuring:
    nummer 1
    naam : Cs Skinny Pride's Haunild
    leeftijd : 0j08
    geslacht : Vrouw
    ras : Skinny
    klasse : Klasse B
    collectie : Nee
    koppel : geen
    kleur : Rood

    Mijn lege regels zijn allemaal weg.

    Is er een oplossing voor dit probleem. Mail met indy versturen is geen optie met dit programma. Ik kan wel met openurl() de mail versturen, maar dan heb ik nog steeds problemen met de spaties.
    Delphi is great. Lazarus is more powerfull

  2. #2
    In HTML telt opvolgende witruimte, zowel spaties als tabs en enters, als een enkele spatie. Als er dus ergens een stap is die je tekst als zodanig behandelt, dan krijg je dit effect.

    Je zegt 'als ik deze tekst selecteer', maar daarmee bedoel je denk ik niet dat dit gebeurt in de memo, zodra je tekst selecteert in de memo, of wel?

    Als je mail stuurt als platte tekst (expliciet kiezen voor het juiste content type), dan zullen de meeste mail clients je tekst met een monospaced font weergeven, al is dat geen garantie. En zelfs de clients die dat niet doen, zouden wel de spaties moeten respecteren, al kan dat met een ander font alsnog een rommeltje worden.

    Hoe je dit met je online mail moet oplossen hangt er helemaal van af welke mail provider/client het is.

    Neem nu bijvoorbeeld GMail. Daarin kan je de mail editor expliciet in 'plain text mode' zetten, maar de editor gebruikt dan geen monospaced lettertype, en dus lijkt je tekst scheef te staan. Dat geldt ook voor lezers van die mail. De tekst van de mail wordt verzonden, met spaties en al, maar zonder indicatie van de opmaak. De source van de ontvangen mail ziet er dan zo uit. Lijkt goed, maar wordt bij mij weergegeven in Tahoma o.i.d. dus is het een zooitje:

    Code:
    MIME-Version: 1.0
    Date: Wed, 29 Jan 2020 14:59:59 +0100
    Message-ID: xxxxxx
    Subject: 
    From: xxxxxx
    To: xxxxxx
    Content-Type: text/plain; charset="UTF-8"
    
    Aantal ingeschreven cavia's     : 9
    - Aantal ras (incl vrije klasse): 9
    
    Het bedrag wat U moet overmaken : 43,50
    
    specificatie :
    - ras             : 36,00
    - knuffel         :  0,00
    - administratie   :  2,50
    - catalogus       :  2,50
    - donatie         :  2,50
    - extra (geen lid):  0,00
    - korting         :  0,00
    Als je daarna weer expliciet een mono-spaced font kiest, dan zal de mail in feite een mail met opmaak worden. De mail heeft een plain text variant, maar heeft ook een tweede blok met de HTML variant, met -zo te zien- non-breaking spaces erin en een hoop font tags. Super lelijk, maar zo komt het in ieder geval wel goed aan. De source van de ontvangen mail ziet er dan zo uit:

    Code:
    MIME-Version: 1.0
    Date: Wed, 29 Jan 2020 14:59:59 +0100
    Message-ID: xxxxxx
    Subject: 
    From: xxxxxx
    To: xxxxxx
    Content-Type: multipart/alternative; boundary="00000000000063bb82059d47b60f"
    
    --00000000000063bb82059d47b60f
    Content-Type: text/plain; charset="UTF-8"
    
    Aantal ingeschreven cavia's     : 9
    - Aantal ras (incl vrije klasse): 9
    
    Het bedrag wat U moet overmaken : 43,50
    
    specificatie :
    - ras             : 36,00
    - knuffel         :  0,00
    - administratie   :  2,50
    - catalogus       :  2,50
    - donatie         :  2,50
    - extra (geen lid):  0,00
    - korting         :  0,00
    
    --00000000000063bb82059d47b60f
    Content-Type: text/html; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    
    <div dir=3D"ltr"><div class=3D"gmail_default" style=3D""><font face=3D"mono=
    space">Aantal ingeschreven cavia's =C2=A0 =C2=A0 : 9</font></div><font =
    face=3D"monospace">- Aantal ras (incl vrije klasse): 9<br><br>Het bedrag wa=
    t U moet overmaken : 43,50<br><br>specificatie :<br>- ras =C2=A0 =C2=A0 =C2=
    =A0 =C2=A0 =C2=A0 =C2=A0 : 36,00<br>- knuffel =C2=A0 =C2=A0 =C2=A0 =C2=A0 :=
     =C2=A00,00<br>- administratie =C2=A0 : =C2=A02,50<br>- catalogus =C2=A0 =
    =C2=A0 =C2=A0 : =C2=A02,50<br>- donatie =C2=A0 =C2=A0 =C2=A0 =C2=A0 : =C2=
    =A02,50<br>- extra (geen lid): =C2=A00,00<br></font><div class=3D"gmail_def=
    ault" style=3D""><font face=3D"monospace">- korting =C2=A0 =C2=A0 =C2=A0 =
    =C2=A0 : =C2=A00,00</font></div><div class=3D"gmail_default" style=3D""><fo=
    nt face=3D"monospace"></font></div><br></div>
    
    --00000000000063bb82059d47b60f--
    Wat je eventueel in je programma zou kunnen doen, is een soortgelijke HTML-formatting toepassen, en de tekst als HTML naar het clipboard kopiëren (dus met het juiste clipboard format). Je webmail is dan hopelijk slim genoeg om die HTML formatting over te nemen. Zodoende kan je vanuit je programma de opmaak bepalen, en heb je zelfs de mogelijkeheid om nog eens een woordje vet te maken als je zou willen.
    Last edited by GolezTrol; 29-Jan-20 at 16:10.
    1+1=b

  3. #3
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Ik heb gemerkt dat als ik de tekst opsla in een txt bestand (platte tekst) en deze verstuur het wel netjes uitgelijnd staat.
    Je zegt 'als ik deze tekst selecteer', maar daarmee bedoel je denk ik niet dat dit gebeurt in de memo, zodra je tekst selecteert in de memo, of wel?
    Ja, een selectie vanuit memo.

    Als ik openurl() gebruikt om naar een mailclient te sturen, maak ik een string aan met elk uiteinde '%0D%0A'. Die toont in de client wel de lege regel, maar de spaties lijken wel gecomprimeerd. Als ik dan 'vaste tekst' of 'courier new' selecteer staat het nog steeds niet uitgelijnd.

    Het probleem zit ook in de ontvanger.
    Last edited by jkuiper; 29-Jan-20 at 16:00.
    Delphi is great. Lazarus is more powerfull

  4. #4
    Jup, dus nog even recappend:
    - Het kopiëren uit de memo is niet de stap die de spaties eruit haalt. De client doet dat bij het ontvangen van de tekst.
    - Als die spaties er eenmaal uit zijn, dan zijn ze weg. Daarna nog 'courier new' selecteren verandert daar niets aan, je krijgt alleen een ander font.

    Met openurl geef je een url-encoded tekst mee. Wellicht kan je daarin de spaties (deels) vervangen door non breaking spaces, zoals in de HTML die ik hierboven stuurde. `=C2=A0` (%C2%A0 in urls) is de UTF-8 weergave van een non-breaking space.

    Je had het eerder over plakken, maar nu heb je het over openurl. Ik denk dat het echt wel helpt als je een representatief stukje code post, en vertelt om welke mail client het gaat (en bijvoorkeur kijkt of je het kan reproduceren met een veelgebruikte, zoals Outlook.com of gmail).

    Het is belangrijk om te beseffen dat verschillende mail clients verschillend werken. Dat geldt zowel voor de verzender als voor de ontvanger. En zeker als je plain text verstuurt, betekent dat dus ook dat je geen controle hebt over wat voor font er gebruikt wordt.
    Last edited by GolezTrol; 29-Jan-20 at 18:52.
    1+1=b

  5. #5
    In ieder geval ga je dit met geen mogelijkheid redden met plaintext.
    Plaintext mail wordt op elke mail-client weergegeven naar de voorkeur van de gebruiker.
    En dat kan dus Arial, Courier New maar ook elk willekeurig ander lettertype zijn.
    En dan werkt het nooit (rekening houdend met al deze mogelijkheden) om kolommen uit te lijnen met spaties.

    De enige mogelijkheid die enige zekerheid biedt is HTML.
    (of het werken met kolommen los te laten)

  6. #6
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Het gaat puur om dat het netjes wordt getoond. Ik kan er mee leven (in ieder geval) zolang de tekst maar wordt weergegen. Maar geef toe, het is netter als je iets verstuurd wat netjes 'in balans' is

    Ik ga wel iets proberen.
    Delphi is great. Lazarus is more powerfull

  7. #7
    waarom niet als image of pdf versturen dan ben je niet afhankelijk van de settings van de ontvanger.

  8. #8
    Als tabel in HTML, lijnt in ieder geval correct uit?

    Bart

  9. #9
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Quote Originally Posted by Bart B View Post
    Als tabel in HTML, lijnt in ieder geval correct uit?
    Bart
    Dat kan alleen als je een geheel eigen body maakt en deze stuurt via indy o.i.d. tool vanuit het programma.
    Quote Originally Posted by Miep
    waarom niet als image of pdf versturen dan ben je niet afhankelijk van de settings van de ontvanger.
    Is veel te veel werk.

    Als ik openurl() van Lazarus / FPC gebruik, dan open ik een mailclient, zet ik een ontvanger, een onderwerp en een body (gegevens vanuit de memo) naar een bericht toe (zoiets als OLE naar word of excel). Dan wordt HTML niet meer geaccepteerd.

    Misschien dat ik in de toekomst met indySMTP iets maakt. Dat heb ik al in een ander programma, dus dat voorbeeld is beschikbaar. Nu moet ik het doen met de middelen die beschikbaar zijn.
    Delphi is great. Lazarus is more powerfull

  10. #10
    Quote Originally Posted by jkuiper View Post
    Als ik openurl() van Lazarus / FPC gebruik, <...snip...>. Dan wordt HTML niet meer geaccepteerd.
    Dan kan het ook, maar moet je wel de URL die je doorgeeft in zijn geheel URL encoderen

    Zelf gebruik ik in Lazarus/FPC de Synapse functie EncodeURL, maar dit zou ook moeten werken (geen ervaring mee)
    https://www.tweaking4all.com/forums/...ple-functions/

  11. #11
    Quote Originally Posted by havezet View Post
    Dan kan het ook, maar moet je wel de URL die je doorgeeft in zijn geheel URL encoderen
    Nee, dat zal niet werken. Ik ken geen enkele mail-client die via de mailto-api HTML accepteert.

  12. #12
    Quote Originally Posted by rvk View Post
    Nee, dat zal niet werken. Ik ken geen enkele mail-client die via de mailto-api HTML accepteert.
    Daar heb ik niet bij stilgestaan, maar je hebt gelijk. Na wat online zoeken blijkt dat de body voor een "mailto" link volgens de specs altijd de text body moet zijn.

  13. #13
    We zijn inmiddels 12 antwoorden verder. Laat ik m'n subtiele hints dan maar wat duidelijker verwoorden:

    Post alsjeblieft een stukje code en om welke client het gaat, zodat we je misschien gewoon snel en goed kunnen helpen i.p.v. een hoop te moeten gissen. Tot die tijd ga ik er in ieder geval niet meer over nadenken.
    1+1=b

  14. #14
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Er is zo weinig aan te posten, Jos.
    Maar hier een stukje code:
    Delphi Code:
    1. procedure TFrmDlMail.Button1Click(Sender: TObject);
    2. var MailTo  : string;
    3.     Subject : string;
    4.     Body    : string;
    5.     index   : integer;
    6. begin
    7.   try
    8.   Mailto  := EEmail.text;
    9.   Subject := format('%s %s', [uGlobal.GetVar('STARTSHOW'),DateToStr(uGlobal.GetVarDate('STARTDATUM'))]);
    10.   Body := '';
    11.   for index := 0 to memo1.lines.count - 1 do
    12.     Body := Body + memo1.lines[index] + '%0D%0A';
    13.   if uGlobal.GetVar('DEF_DESIGNER') = 'J' then
    14.     showmessage(format('mailto:%s?subject=%s&body=%s',[Mailto,Subject,Body]));
    15.   if not OpenUrl(format('mailto:%s?subject=%s&body=%s',[Mailto,Subject,Body])) then
    16.     showmessage('fout in openen mail');
    17.   except
    18.     Showmessage('(mail) fout in opmaak');
    19.   end;
    20. end;
    Delphi is great. Lazarus is more powerfull

  15. #15
    Mijn email client geeft standaard geen html weer en er zullen er wel meer zijn die het zo hebben ingesteld.

    Memo naar image is niet zo heel moeilijk en als je de html route wilt volgen dan is extended mapi de route (imho) mits dat ondersteund wordt door je eigen email client

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
  •