Results 1 to 10 of 10

Thread: GDI+ TGPTextureBrush

  1. #1

    Exclamation GDI+ TGPTextureBrush

    Ik gebruik GDI+ voor het tekenen van een aantal components, en bij een ervan wil ik een grid/lines tekenen. Ik maak hiervoor een bitmap, die zet ik in een TGPTextureBrush en deze tekent netjes de grid in de rectangle die ik teken. Ik teken de rectangle in het midden (hcenter, vcenter) van de component, zodat als ik de component resize de rectangle in het midden blijft.
    Delphi Code:
    1. GBrush := TGPTextureBrush.Create(TGPBitmap.FromHBitmap(FGridBuf.Handle, FGridBuf.Palette), WrapModeTile)

    het vreemde is dat als ik de component resize de rectangle netjes in het midden getekend wordt, maar de grid blijft de positie behouden ten op zichte van de component, en niet van de rectangle. Met als gevolg dat ik hiermee dus een grid heb dat niet goed gepositioneerd staat:

    Click image for larger version. 

Name:	1.png 
Views:	31 
Size:	18.4 KB 
ID:	8081
    Click image for larger version. 

Name:	2.png 
Views:	31 
Size:	18.8 KB 
ID:	8082
    Click image for larger version. 

Name:	3.png 
Views:	30 
Size:	18.1 KB 
ID:	8083

    Ik heb dit al opgezocht, maar kan geen delphi voorbeeld vinden hoe ik kan zorgen dat de texture getekend wordt naar verhouding van de positie van de rectangle, en niet van de component. Iemand die hier een oplossing weet?

  2. #2
    I7 7700K 32Gb Win10 Pro Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    1,969
    Een vector image gaan maken, en de coordinaten goed op elkaar zetten.

    Bij een bitmap is dat veel lastiger. tenzij je in lagen gaat werken en dan de lagen zo verschuiven dat de plaats overeen komt.
    10.3.3, Delphi2010, of Lazarus 2.0.8

  3. #3
    Wat bedoel je? Ik gebruik gewoon een brush om de rectangle een vulling te geven, en dat werkt op zich prima - ik wil alleen dat de brush (bitmap) getekend wordt dat deze op dezelfde positie blijft ten op zichte van de rectangle.

  4. #4
    I7 7700K 32Gb Win10 Pro Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    1,969
    Nu snap ik wat je bedoeld, dat de inhoud altijd gelijk blijft met de rand

    zoiets:
    Click image for larger version. 

Name:	hatch.PNG 
Views:	19 
Size:	9.7 KB 
ID:	8085

    Ik ben bang dat ik je dan teleur moet stellen, een bmp voorziet hierin niet.
    Je kom dan echt in een hoger segment van tekenen.

    In b.v. Autocad kan je een hatch en een origin meegeven.
    Waar en hoe je 'vulling' moet beginnen en in welke richting,

    Gr. Peter
    10.3.3, Delphi2010, of Lazarus 2.0.8

  5. #5
    Ja ik heb wel een stukje op MSDN gevonden waarmee dit zou moeten kunnen - maar denk dat ik beter gewoon het grid rechtstreeks teken op de rect zelf. Dacht hiermee wat tijd te besparen haha, vind dit eigenlijk ook best "vreemd" gedrag, wat dus standaard is maar ik vind wel een oplossing

  6. #6
    Weet iemand misschien hoe ik aan de Pixels kan komen? Want ik gebruikte in de bitmap canvas de Pixels om een puntje te tekenen:

    Delphi Code:
    1. if Style = gsDots then
    2.       begin
    3.         X := Rect.Left + ColSZ;
    4.         while X <= Rect.Right do
    5.         begin
    6.           Y := Rect.Top + RowSZ;
    7.           while Y <= Rect.Bottom do
    8.           begin
    9.             Pixels[X, Y] := Grid.Color; // Dit werkt niet in GDI+
    10.             Inc(Y, ColSZ);
    11.           end;
    12.           Inc(X, RowSZ);
    13.         end;
    14.       end;

  7. #7

  8. #8
    Die heb je inderdaad op een "gewone" TCanvas (GDI) wel zoals je ziet in de bovenstaande code - werkt dit wel op een TCanvas, maar dit werkt niet op een TGPGraphics (GDI+)

  9. #9

  10. #10
    Dankje ga ik die eens proberen

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
  •