AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringgrid Problem

Ein Thema von zack0r · begonnen am 20. Feb 2005 · letzter Beitrag vom 21. Feb 2005
Antwort Antwort
zack0r

Registriert seit: 5. Jan 2005
Ort: Rosenheim
25 Beiträge
 
#1

TStringgrid Problem

  Alt 20. Feb 2005, 22:09
Hallo!

Also ich habe folgendes Problem mit einem TStringGrid: ich bin dabei eine Software für Zeiterfassung zu programmieren. Die Software ist für den kleinen Betrieb von meinem Vatter bestimmt. Also ich will eigentlich nur das die verschiedenen Felder von dem jeweiligen Mitarbeiter markiert werden und dann bei klick auf einen Button oder bei enter die Zeilen entweder zu einer Zelle verbunden werden sollen oder ein Rahmen um die Zellen gezogen werden soll. Ersteres währe zwar besser aber ich habe es mal mit der zweiten möglichkeit versucht:

Delphi-Quellcode:
procedure TForm1.strgrdDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  with (sender as TStringGrid).Canvas do
  begin
    Pen.Color := clBlack;
    Pen.Width := 2;
    Pen.Style := psSolid;
    MoveTo(strgrd.selection.left, strgrd.selection.top );
    Lineto(strgrd.selection.right, strgrd.selection.top );
    Lineto(strgrd.selection.right, strgrd.selection.bottom );
    Lineto(strgrd.selection.left, strgrd.selection.bottom );
    Lineto(strgrd.selection.left, strgrd.selection.top );
  end;
end;
Damit habe ichs erfolglos versucht wenn ich damit eine Selektion mache und ein strgrd.repaint dann kommt ein ganz kleiner rahmen in die oberste linke Zelle. Wenn ich ein
if (aRow = 10) and (aCol = 5) and not (gdFixed In State) then voransetze und die strgrd.selection's durch rect ersetze klappts. Ich bekomms aber net hin, dass der die Zellen einfach so Excel-like mit dem Rahmen umschließt.
Kann mir vielleicht jemand helfen? Danke!
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 17. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TStringgrid Problem

  Alt 21. Feb 2005, 11:03
Top, Bottom, Left und Right von TStringGrid.Selection sind keine Pixelangaben. Sie geben die Zeilen- und Spaltennummern des selektierten Bereiches an.

Nachtrag:
Mit der Funktion TStringGrid.CellRect() solltest du daraus aber die Pixel-Koordinaten gewinnen können.
  Mit Zitat antworten Zitat
zack0r

Registriert seit: 5. Jan 2005
Ort: Rosenheim
25 Beiträge
 
#3

Re: TStringgrid Problem

  Alt 21. Feb 2005, 18:12
versteh ich nicht. MoveTo & LineTo erwarten doch integer-zeilenangaben und TStringgrid.selection.top etc. geben doch welche zurück, oder nicht? Also mit CellRect bin ich nicht weiter gekommen. Kannst du mir vielleicht nochmal helfen? danke

MFG
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: TStringgrid Problem

  Alt 21. Feb 2005, 18:37
zum zeichnen innerhalb einer Zelle mußt du das übergebene rect verwenden. Zum Zusammenfügen gibt es ein paar Ansätze, allerdings ist das auch recht kompliziert. http://www.delphipraxis.net/internal...983&highlight=
ein paar Probleme werden dort auch angesprochen.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 17. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: TStringgrid Problem

  Alt 21. Feb 2005, 19:58
Zitat von zack0r:
versteh ich nicht. MoveTo & LineTo erwarten doch integer-zeilenangaben und TStringgrid.selection.top etc. geben doch welche zurück, oder nicht? Also mit CellRect bin ich nicht weiter gekommen. Kannst du mir vielleicht nochmal helfen? danke
Bei den von dir angesprochenen Methoden geht es um Punkte (Pixel), bei Selection geht es um Zellen.
Wenn in der dritten Zeile eines StringGrids, die ersten 8 Zellen markiert sind, dann wird von Selection Zeilen- und Spaltennummern zurückgeliefert:
Top = 2 (3. Zeile)
Bottom = 2
Left = 0 (1. Zelle in Zeile)
Right = 7 (8. Zelle in Zeile)

Das heißt: Deine Markierung geht von Zelle(0/2) bis Zelle(7/2)

Wenn du diese Werte in deinen Canvas-Methoden benutzt, zeichnest du einen Strich von Pixelkoordinate 0/2 (links oben) nach Pixelkoordinate 7/2 (rechts unten).

Lies genau die Online-Hilfe zu Selection und den Canvas-Methoden durch.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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