Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi canvas vor stringgrid (https://www.delphipraxis.net/64529-canvas-vor-stringgrid.html)

bbBowser 4. Mär 2006 20:09


canvas vor stringgrid
 
hi leute, bräuchte mal wiedre hilfe. ich hab en stringgrid und hätte gern en paar linien dicker als andre. jetzt hab ich mit canvas moveto und lineto linien gezogen und die korrekte position errechnet. allerdings sind die linien hinter dem grid nichtmehr sichtbar;( wie kann ich bezwecken, dass die linien vor dem grid auftauchen und nich dahinter? danke im vorraus;)

konda 4. Mär 2006 20:18

Re: canvas vor stringgrid
 
Drück auf das Canvas mit rechts drauf und dann auf Position->Nach vorne setzen. :wink:

bbBowser 5. Mär 2006 12:32

Re: canvas vor stringgrid
 
sorry, aber ich versteh net wie du das meinst, das canvas is doch erst da, wenn ich das programm starte, und dann kann ichs so ja wohl nicht amchen? oder? :?:

und wenn ich grad schon hier bin: wie muss ich das canvas plazieren(welche procedure) damit es nicht weggeht wenn ich das fenster minimiere und dann wieder zurückspringe, oder irgendein andres fenster drüberzieh? brauch ich da ne while-schlöeife oder sowas?

danke im vorraus :wink:

JasonDX 5. Mär 2006 12:40

Re: canvas vor stringgrid
 
Ich bin mir nicht ganz sicher, ob du jetzt Canvas oder die Paintbox meinst, und diese dynamisch erstellst. Es gibt aber, um es auch zur Runtime machen zu können, eine Methode Namens Delphi-Referenz durchsuchenBringToFront, mit der dürfts gehn.

Bezüglich dass der Canvas nimmer neu zeichnet, wenn ein anderes Fenster davor im Vordergrund war... dafür musst du das OnPaint-Event nehmen und darin die fetten Linien neu zeichnen.

greetz
Mike

bbBowser 5. Mär 2006 12:52

Re: canvas vor stringgrid
 
vielen dank für die schnelle antwort, mein 2. problem is auch schon gelöst, danke;)
aber das erste, hab ich jetzt gesehn, dass es für canvas anscheinend kein bringToFront gibt :wall: . vieleicht is mein denkansatz ja einfach falsch. wie würdet ihr das lösen:
ich hab en stringgrid und möchte von dem jede 3. linie horizontal und vertikal etwas dicker haben als alle andren. lieg ich da mit canvas total falsch? gibts was einfacheres? und was hats mit der paintbox genau auf sich?

sind jetzt vieleicht en bisschen viel fragen aufeinmal, sorry :oops:

hoffe auf hilfe, danke

JasonDX 5. Mär 2006 13:04

Re: canvas vor stringgrid
 
Es gibt was einfacheres, das ich gerade gefunden hab, das aber immernoch mit dem Canvas arbeitet:
das OnDrawCell-Event. Das wird aufgerufen, wenn eine Zelle neu gezeichnet wird. d.h. du kannst dann abfragen (mit ACol und ARow), welche Zelle gerade neu gezeichnet wird, und kannst damit dann entscheiden, ob du die Zelle grafisch mit fetten Linien aufpeppeln willst oder nicht.
Mit dem Parameter Rect weißt du dann übrigens, wo du die Linie evt. zeichnen musst ;)

greetz
Mike

Lannes 5. Mär 2006 13:08

Re: canvas vor stringgrid
 
Hallo,

ich würde das auch mit einer Ereignisbehandlungs-Routine in OnDrawCell lösen.
Ein Beispiel zum ausbauen:
Delphi-Quellcode:
  if (ARow = 3) and (ACol >= StringGrid1.FixedCols) then
    begin
    StringGrid1.Canvas.Pen.Color := clRed;
    StringGrid1.Canvas.Pen.Width := 2;
    StringGrid1.Canvas.MoveTo(Rect.Left,Rect.Bottom);
    StringGrid1.Canvas.LineTo(Rect.Right,Rect.Bottom);
    end;

bbBowser 5. Mär 2006 13:22

Re: canvas vor stringgrid
 
nochma danke für die schnelle und kompetente antwort. nur scheint das wieder irgendwie mein vorstellungsvermögen zu übersteigen. :cry: wie muss ich das jetzt einbaun? wenn ichs in die ondrawcell mache sagt er "eigenschaft und methode showframe2 sind nicht kompatibel" :wall:

gruß carsten

Lannes 5. Mär 2006 16:05

Re: canvas vor stringgrid
 
Hallo,
was ist showframe2 ?

Zitat:

Zitat von bbBowser
... wie muss ich das jetzt einbaun?

im Objekt-Inspektor hinter dem Ereignis OnDrawCell einen Doppelklick ausführen, dann erstellt Dir Delphi den Prozedur-Rumpf für die Ereignisbehandlungs-Routine. Darin setzt Du den Code. Der wird immer dann ausgeführt wenn eine Zelle neu gezeichnet werden muss.
Eine Zelle wird neu gezeichnet:
- Bei der ersten Darstellung des Grids beim Programmstart
- beim Scrollen des Grids
- wenn ein Eintrag in eine Zelle gesetzt wird
- wenn die Eigenschaft Objects der Zelle geändert wird
- ...

bbBowser 5. Mär 2006 16:35

Re: canvas vor stringgrid
 
ok, das mit dem doppelklick wusst ich net, danke :) allerdings zeigt er mir jetzt an " es gibt keine überladene version von rect, die man mit diesn argumenten aufrufen kann". was hat das jetzt schon wieder zu bedeuten? sorry wenn ich mich en bissl doof anstell, bin in delphi nochnet so der checker :roll: . ich post am besten ma das was ich jetzt hab, vieleicht hab ich ja irgendwas verpatzt:

Delphi-Quellcode:
...
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
if (ARow = 3) and (ACol >= StringGrid1.FixedCols) then
    begin
    StringGrid1.Canvas.Pen.Color := clRed;
    StringGrid1.Canvas.Pen.Width := 2;
    StringGrid1.Canvas.MoveTo(Rect.Left,Rect.Bottom);
    StringGrid1.Canvas.LineTo(Rect.Right,Rect.Bottom);
    end;
end;
...
so denk net das vorher und nacher is relevant.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz