Results 1 to 7 of 7

Thread: TImage hoogte verhogen en alles tonen i.c.m. scrollbox

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

    TImage hoogte verhogen en alles tonen i.c.m. scrollbox

    Dat ik niet zo handig ben in de grafische wereld van Delphi, is mij geheel wel duidelijk. Ik probeer iets, maar kom met google er niet 1 2 3 uit.

    Ik heb een procedure, die net zoals een whatsapp scherm berichtjes toont. Mijn probleem is dat de ballonntjes wel worden gemaakt, maar niet worden getoond als deze buiten het 'scherm' valt. De scrollbox reageert wel, maar de 'mainimage', die ik wel telkens langer maakt, wordt niet opnieuw getekend op scherm. Ik heb het geprobeerd met invalidate, repaint en refresh zonder resultaat.

    Ik heb dit stukje code daarvoor:
    Delphi Code:
    1. procedure TForm1.PutText(const aText : string; const aTextPosition : byte);
    2. var TmpImg : TImage;
    3.     Rect   : TRect;
    4. begin
    5.   TmpImg := TImage.Create(Self);
    6.   TmpImg.Parent := scrollbox1;
    7.   Rect := scrollbox1.ClientRect;
    8.   createballoon(TmpImg,aText,Rect, aTextPosition);
    9.   if image1.Height <= fTopPosition then
    10.   begin
    11.     image1.Height := fTopPosition;
    12.     image1.Repaint;
    13.   end;
    14. end;
    15.  
    16. procedure TForm1.CreateBalloon(var aImg : TImage; const aTekst : string; var aRect : TRect; const aTextPosition : byte);
    17. var
    18.   MaxWidth, RectWidth: integer;
    19.   r, r2: TRect;
    20. begin
    21.   MaxWidth := Image1.ClientWidth div 2;
    22.   Image1.Canvas.Brush.Color := Colors[Odd(aTextPosition)];
    23.   r := Rect(aRect.Left + 10, fTopPosition, MaxWidth, aRect.Height);
    24.   DrawText(image1.Canvas.Handle, PChar(aTekst), Length(aTekst), r,
    25.      Aligns[Odd(aTextPosition)] or DT_WORDBREAK or DT_CALCRECT);
    26.   if not Odd(aTextPosition) then
    27.   begin
    28.     RectWidth := r.Right - r.Left;
    29.     r.Right := Image1.ClientWidth - 10;
    30.     r.Left := r.Right - RectWidth;
    31.   end;
    32.   r2 := Rect(r.Left - 4, r.Top - 4, r.Right + 4, r.Bottom + 4);
    33.   Image1.Canvas.RoundRect(r2, 5, 5);
    34.   DrawText(image1.Canvas.Handle, PChar(aTekst), Length(aTekst), r,
    35.       Aligns[Odd(aTextPosition)] or DT_WORDBREAK);
    36.   fTopPosition := r.Bottom + 10;
    37. end;

    Dit is het resultaat:
    Attachment 8220

    Hoe zorg ik ervoor dat ik alles zie.
    Mijn manier zal zijn om telkens een copie van de hoofdimage te maken en die doorsturen naar een nieuwe image met een langere hoogte.
    Delphi is great. Lazarus is more powerfull

  2. #2
    Ik weet het niet zeker meer, maar volgens mij moet je bij een TImage ook het canvas vergroten. Ik heb er zelf ook mee gezeten dat een plaatje niet goed zichtbaar was. Maar door:
    Delphi Code:
    1. Image1.Picture.bitmap.Width := Image1.Width;
    2. Image1.Picture.bitmap.Height := Image1.Height;
    toe te voegen ging het wel goed.

    (na even googelen...)
    Ja dus, zie het antwoord hier.
    Niemand houdt meer van hard werken dan diegene die ervoor betaalt.

  3. #3
    Vraagje - is het niet beter/makkelijker om hiervoor een TCustomControl te gebruiken, en direct op dat canvas te gaan tekenen? Zo heb je meer controle - en het afhandelen van de scrollbars is redelijk simpel. Als je wilt kan ik je wel wat code sturen van een aantal van mijn eigen components waar ik ook een CustomControl gebruik met scrollbars.

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Quote Originally Posted by AppY View Post
    Ik weet het niet zeker meer, maar volgens mij moet je bij een TImage ook het canvas vergroten. Ik heb er zelf ook mee gezeten dat een plaatje niet goed zichtbaar was. Maar door:
    Delphi Code:
    1. Image1.Picture.bitmap.Width := Image1.Width;
    2. Image1.Picture.bitmap.Height := Image1.Height;
    toe te voegen ging het wel goed.

    (na even googelen...)
    Ja dus, zie het antwoord hier.
    Dank je. Niet goed gegoogled, dus

    Maar je hebt soms zoveel steekwoorden, dat je wel de juiste moet kiezen.
    Delphi is great. Lazarus is more powerfull

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Quote Originally Posted by Reidinga View Post
    Vraagje - is het niet beter/makkelijker om hiervoor een TCustomControl te gebruiken, en direct op dat canvas te gaan tekenen? Zo heb je meer controle - en het afhandelen van de scrollbars is redelijk simpel. Als je wilt kan ik je wel wat code sturen van een aantal van mijn eigen components waar ik ook een CustomControl gebruik met scrollbars.
    Dat zal mooi zijn.
    Mijn eigenlijke doel is om zo'n soort berichtenbox te maken, maar dat je wel de controle hebt over het bericht. Als er een link wordt meegegeven, deze kunnen selecteren en per bericht een referentie aanhangen, zodat je een bericht kan selecteren als een reply. Het nadeel is, dat ik met mijn eerste poging alleen maar berichtjes teken op een canvas. Je kan er verder niets mee. Ik zat te denken om gebruik te maken van een tlabel of tstatictext om focus te krijgen op een bericht. Dan heb je wat meer gereedschap om mee te stoeien.

    Ik heb liever 10 projecten als database applicatie dan 1 project met grafische dingen. Maar ja, het hoort bij de job en ga er wel vol in (zover ik kan met een beetje hulp )
    Delphi is great. Lazarus is more powerfull

  6. #6
    Je kan inderdaad een TImage, of een eigen message-componentje, afgeleid van TGraphicControl, of zelfs TCustomControl maken. Die kan je dan onder elkaar positioneren op de scrollbox. De scrollbox gaat dan vanzelf mee. TCustomControl-afgeleiden kunnen ook keyboard-focus ontvangen, dus zo zou je zelfs iets kunnen maken om met de pijltjes o.i.d. door je messages te bladeren.

    Natuurlijk kan zoiets ook als je één control hebt waarop je alles tekent. Het control kan zelf een lijst van berichten bijhouden, en bijhouden welk bericht bijvoorbeeld geselecteerd is om wat mee te doen.
    1+1=b

  7. #7
    Je bijlage is niet zichtbaar: Ongeldig(e) Bijlage opgegeven. Neem contact op met de webmaster als je een geldige koppeling hebt gevolgd.
    Ik ben nu even bezig met een customcontrol voor chat berichten, ik zal deze hier ook posten zodra deze werkend/klaar is.

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
  •