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:
procedure TForm1.PutText(const aText : string; const aTextPosition : byte);
var TmpImg : TImage;
Rect : TRect;
begin
TmpImg := TImage.Create(Self);
TmpImg.Parent := scrollbox1;
Rect := scrollbox1.ClientRect;
createballoon(TmpImg,aText,Rect, aTextPosition);
if image1.Height <= fTopPosition then
begin
image1.Height := fTopPosition;
image1.Repaint;
end;
end;
procedure TForm1.CreateBalloon(var aImg : TImage; const aTekst : string; var aRect : TRect; const aTextPosition : byte);
var
MaxWidth, RectWidth: integer;
r, r2: TRect;
begin
MaxWidth := Image1.ClientWidth div 2;
Image1.Canvas.Brush.Color := Colors[Odd(aTextPosition)];
r := Rect(aRect.Left + 10, fTopPosition, MaxWidth, aRect.Height);
DrawText(image1.Canvas.Handle, PChar(aTekst), Length(aTekst), r,
Aligns[Odd(aTextPosition)] or DT_WORDBREAK or DT_CALCRECT);
if not Odd(aTextPosition) then
begin
RectWidth := r.Right - r.Left;
r.Right := Image1.ClientWidth - 10;
r.Left := r.Right - RectWidth;
end;
r2 := Rect(r.Left - 4, r.Top - 4, r.Right + 4, r.Bottom + 4);
Image1.Canvas.RoundRect(r2, 5, 5);
DrawText(image1.Canvas.Handle, PChar(aTekst), Length(aTekst), r,
Aligns[Odd(aTextPosition)] or DT_WORDBREAK);
fTopPosition := r.Bottom + 10;
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.
Bookmarks