Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zwei zellen quer verbinden (https://www.delphipraxis.net/116368-zwei-zellen-quer-verbinden.html)

Razor90 27. Jun 2008 14:46


Zwei zellen quer verbinden
 
Hallo, ein neuer Tag, ein neues Problem.. :P
Ich möchte zwei zellen in einer stringgrid verbinden. Aber nur diese beiden Zellen, die nebeneinander sind [1,0] und [2,0].
Habe auch schon rumprobiert, aber leider mir dem ondrawcell keine erfahrung...vll könnt ihr mir weiterhelfen. hier mein ansatz
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var R:TRect;


begin

    if aRow=0 then
    if acol=2 then
   with sender as tstringgrid do begin

      rect.left:= Rect.left-ColWidths[ACol];
    Canvas.Brush.Color := clBtnFace;
    Canvas.Brush.Style := bsSolid;
    Canvas.FillRect( Rect );
  end;
  end;

end.

DeddyH 27. Jun 2008 14:52

Re: Zwei zellen quer verbinden
 
Schau nochmal im anderen Thread.

Razor90 27. Jun 2008 15:01

Re: Zwei zellen quer verbinden
 
ja tut mir leid wenn ich doppelposts mache, aber ich kann das nicht... :wall: Ich weiß gar nicht was überhaupt mit rect.left, rect.right gemacht wird...man zeichnet ja schließlich ein rechteck, aber wie das hier genau funzt versteh ich nicht....ich kenne nur rectangle(x1,y1,x2,y2);...könnt ihr mir vll schnell ne lösung sagen???

DeddyH 27. Jun 2008 15:10

Re: Zwei zellen quer verbinden
 
So schwer ist das ja nun auch wieder nicht. Da ich Deine Delphi-Version nicht kenne, hier mal die Online-Hilfe von Delphi 5 zum Ereignis OnDrawCell:
Zitat:

Das Ereignis OnDrawCell tritt ein, wenn eine Zelle des Gitters gezeichnet werden muß.

type
TDrawCellEvent = procedure (Sender: TObject; ACol, ARow: Longint; Rect: TRect; State: TGridDrawState) of object;
property OnDrawCell: TDrawCellEvent;

Beschreibung

Mit einer Ereignisbehandlungsroutine für OnDrawCell können Sie den Inhalt aller Zellen des Gitters anzeigen. Mit den Methoden der Eigenschaft Canvas können Sie die Zelle zeichnen. Der Parameter Rect beschreibt die Position der Zelle in der Zeichenfläche. Die Parameter Col und Row beschreiben den Zeilen- und Spaltenindex der Zelle, die gezeichnet werden soll. Der Parameter State gibt an, ob die Zelle den Eingabefokus hat, ob sie markiert ist und ob sie fixiert ist (in diesem Fall bleibt sie auch bei einem Bildlauf an ihrer Position).

Ist keine Ereignisbehandlungsroutine für OnDrawCell zugewiesen, werden alle Zellen des Gitters leer angezeigt. Hat die Eigenschaft DefaultDrawing den Wert True, wird der Hintergrund der Zelle angezeigt, bevor das Ereignis OnDrawCell eintritt. Nachdem die Ereignisbehandlungsroutine für OnDrawCell den Inhalt der Zelle gezeichnet hat, wird die markierte Zelle mit einem Fokusrechteck versehen. Wenn DefaultDrawing False ist, ist die Ereignisbehandlungsroutine für OnDrawCell für den Hintergrund der Zelle und für die visuelle Kennzeichnung von ausgewählten und fokussierten Zellen zuständig.

mkinzler 27. Jun 2008 15:14

Re: Zwei zellen quer verbinden
 
Ein TRect emthält die Koordinaten eines Rechteckes
Left ist also X1; Top Y1; Right X2; Bottom Y2

Razor90 27. Jun 2008 15:17

Re: Zwei zellen quer verbinden
 
und was würde das für mich bedeuten? hab die gleiche hilfe, kann damit aber nichts anfange...
rect:=rect.left[1],rect.right[2],rect.top[1],rect.bottom[1]....oda wie mach ich das???

mkinzler 27. Jun 2008 15:21

Re: Zwei zellen quer verbinden
 
Delphi-Quellcode:
Canvas.Rectangle( r.Left, r.Top, r.Right, r.Bottom);

Razor90 27. Jun 2008 15:23

Re: Zwei zellen quer verbinden
 
aber wo leg ich dann jetzt die koordinaten hin? oda bzw. wo geb ich die ein? habt ihr vll ein beispiel?

taaktaak 27. Jun 2008 15:29

Re: Zwei zellen quer verbinden
 
Moin, Moin.
Überlege doch einmal: Als Rect wird dir das "normale" Rechteck übergeben, das gezeichnet werden soll. Wenn du z.B. zur linken benachbarten Zelle verbinden willst, dann musst du Rect.Left also nach links verschieben. Genau um die Breite der linken Nachbarzelle und der Linienbreite zwischen den Zellen. Probier doch mal ein wenig ...

Razor90 27. Jun 2008 15:32

Re: Zwei zellen quer verbinden
 
so ein mist...ich kapier das nich...
Delphi-Quellcode:
begin

    if aRow=0 then
    if acol=2 then
   with sender as tstringgrid do begin

     rect:=rect.left+rect.right;
    Canvas.Brush.Color := clBtnFace;
    Canvas.Brush.Style := bsSolid;
    Canvas.FillRect( Rect );
  end;
  end;
falsche typen oda sowas meint er jetzt....was soll ich denn machen???

DeddyH 27. Jun 2008 15:35

Re: Zwei zellen quer verbinden
 
In Rect.Left steht die X-Position der linken oberen Ecke, in Rect.Right die der rechten unteren Ecke. Willst Du also die Breite verdoppeln, hieße das:
X2 = X2 + (X2 - X1)

Razor90 27. Jun 2008 15:45

Re: Zwei zellen quer verbinden
 
Also so klappt das jetzt schon, aber zwischen den Zellen is noch ein kleiner Strich, was hab ich noch fürn Fehler drin?
Delphi-Quellcode:
begin

    if aRow=0 then
    if acol=1 then
   with sender as tstringgrid do begin

     Rect.right := Rect.right + (Rect.right-rect.left);  
    Canvas.Brush.Color := clBtnFace;
    Canvas.Brush.Style := bsSolid;
    Canvas.FillRect( Rect );
  end;
  end;

Razor90 27. Jun 2008 16:02

Re: Zwei zellen quer verbinden
 
ich komm nicht weiter :wall: :x könnt ihr mir bitte weiterhelfen? nur schnell den code und das wars schon ^^

mkinzler 27. Jun 2008 16:09

Re: Zwei zellen quer verbinden
 
Wenn du 2 Spalten hast ist das linke Ecke, das der 1. Spalte und das Rechte Eck, das der 2. Spalte

Razor90 27. Jun 2008 16:21

Re: Zwei zellen quer verbinden
 
ja das weiß ich ja...wie die aufteilung ist oben links ist x1und y2 und unten rechts x2 und y2...aber wie mach ich daraus eine spalte??

mkinzler 27. Jun 2008 16:25

Re: Zwei zellen quer verbinden
 
Wie im Beispiel gestern, in dem du statt des übergebenen rechteck der 1. Spalte das erweiterte Rechteck über beide Spalten selbst zeichnest


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr.

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