![]() |
Zelle teilen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi und zwar habe ich mal ne kompizeirte frage hoffe das geht mit dem StringGrid
undzwar habe ich eine StringGrid jetzt soll irgend eine zelle mit der Rechten Maustaste angeklickt werden können, dort soll ein PopupMenü aufgehen in dem drinsteht zelle teilen. Wenn ich diesen Eintrag anklicke soll sich die ausgewählte zelle in zwei teilen sodas man oben und unten in die zellen was schreiben kann. so wie auf dem bild geht das ???? |
Re: Zelle teilen
Geht imho nicht.
(Ausfühliche Antwort :stupid: ) |
Re: Zelle teilen
Mit OwnerDraw dürfte es gehen ;-)
|
Re: Zelle teilen
Moin, Moin,
vielleicht aus der entgegengesetzten Richtung ansetzen: In der Standarddarstellung werden 2 Zeilen zu einer optischen Zeile verbunden. Nach dem Befehl "Zelle teilen", wird die optische "Verbindung" der Zelle im OnDraw aufgehoben und du kannst die "obere" und "untere" Zeile ganz normal benutzen - ist nur so 'ne spontane Idee... Gruß Ralph |
Re: Zelle teilen
Vielleicht sollte ich sagen das ich noch diesen code habe der was drüber zeichnet könnte es dadurch schwerder werden
Delphi-Quellcode:
procedure TForm7.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var Celltext :string; Farbe :boolean; Textformat :cardinal; n :integer; begin Textformat:= DT_SINGLELINE; with (Sender as TStringGrid) do begin Celltext:= Cells[ACol, ARow]; Farbe:= True; //Standardeinstellung der Zellen ist einfarbig if (Cells[ACol,ARow] = 'fa') or (Cells[ACol,ARow] = 'FA')then begin Canvas.Brush.Color:= ClRed; //Zellenfarbe Canvas.Font.Color:= ClWhite; //Schriftfarbe Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; //Text fett end; if (Cells[ACol,ARow] = 'np') or (Cells[ACol,ARow] = 'NP')then begin Canvas.Brush.Color:= ClBlue; //Zellenfarbe Canvas.Font.Color:= ClWhite; //Schriftfarbe Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; //Text fett end; if (Cells[ACol,ARow] = 'aa') or (Cells[ACol,ARow] = 'AA')then begin Canvas.Brush.Color:= ClGreen; //Zellenfarbe Canvas.Font.Color:= ClWhite; //Schriftfarbe Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; //Text fett end; if (Farbe) then begin //Hintergrund überschreiben SetBkMode(StringGrid1.Canvas.Handle, OPAQUE); Canvas.FillRect(Rect) end; if (ACol = 1) or (ACol = 0) then begin //Text wird zentriert Textformat:= Textformat or DT_CENTER or DT_VCENTER ; Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; //Text fett end; if (ACol > 1) then //Zentrieren für alle Zellen begin //Text wird zentriert Textformat:= Textformat or DT_CENTER or DT_VCENTER; end; //Hier wird nun der Text ausgegeben DrawText(Canvas.Handle, PChar(Celltext), Length(celltext), Rect,Textformat); end; begin //Linien zwischen Zellen erzeugen n:=0 ; repeat n:=n+4; if (ARow = n) and (ACol >= StringGrid1.FixedCols) then begin StringGrid1.Canvas.Pen.Color := clBlack; // Linienfarbe StringGrid1.Canvas.Pen.Width := 2; // Stärkt der Linie StringGrid1.Canvas.MoveTo(Rect.Left,Rect.Bottom); StringGrid1.Canvas.LineTo(Rect.Right,Rect.Bottom); end; until n= 24; end; end; |
Re: Zelle teilen
Geht es darum, dei Zelle nur "optisch" zu teilen, sodass sie sich weiterhin so verhält wie eine Zelle?
Oder soll die wirklich in zwei Zellen geteilt werden wie z.B. bei Excel? Ich hatte zweiteres verstanden. das erste soltle mit OwenrDraw möglich sein. |
Re: Zelle teilen
Sie soll sich eigentlich so verhalten wie eine normalle zelle Sie darf aber nicht größer werden, sondern nur teilen so das man oben und unten was reinschreiben kann, also muss auch gleichzeitig die schriftart kleiner werden
|
Re: Zelle teilen
HI
kann mir vielleicht irgenwie einen ansatz geben hab jetzt mal die letzten Tag mal versucht das hinzubekommen ab ich bin am verzeweifeln |
Re: Zelle teilen
Moin hier mal in stichworten:
- die zelle mit mousetocell merken in der du den befehl gibst. - stringgrid um eine spalte erweitern - den inhalt aller felder nach der zelle einen weiter schieben, evt auch die breite etc... - die spaltenbreite in der die zu teilene zelle ist halbieren, das selbe mit der spalte rechts daneben. - im oncelldraw event der stringgrid das rect der beiden spalten addieren. (bis auf die zelle die "geteilt" werden soll) (rect.right := rect.right*2) oder ähnlich So das sollte als ansatz dienen |
Re: Zelle teilen
Hi nochmal ich
also hab jetzt mal den anfang gemacht das ging ja schon :-D
Delphi-Quellcode:
aber wieso die zelle verschieben und die spalte um 1 erweitern ich möchte doch nur die ausgewählte zelle in zwei teilen so das ich oben und unten was schreiben kann.
procedure TForm7.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var col, row: integer; begin StringGrid1.MouseToCell(x, y, col, row); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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