![]() |
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;)
|
Re: canvas vor stringgrid
Drück auf das Canvas mit rechts drauf und dann auf Position->Nach vorne setzen. :wink:
|
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: |
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
![]() 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 |
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 |
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 |
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; |
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 |
Re: canvas vor stringgrid
Hallo,
was ist showframe2 ? Zitat:
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 - ... |
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:
so denk net das vorher und nacher is relevant.
...
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; ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr. |
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