Autor Beitrag
Super_M
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 08.09.03 22:23 
Hallo zusammen, das Thema Stringgrid ist nun schon oft diskutiert worden. Eine Lösung zu meinen Problemem habe ich aber noch nicht gefunden: 3 an der Zahl:

1)
Mit dem Event OnSelectCell will ich in der ersten Zeile alle Zellen einzeln markieren oder auswählen können, und mit den Zellen 2-... will ich nur die ganze Zeile markieren können.

In der Form:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TfrmForm1.BlaSelectCell(Sender: TObject; ACol: Integer;
  ARow: Integer; var CanSelect: Boolean);
...
  if ARow = 0 then    
    begin
      sgrQuerSuchErg.Options := sgrQuerSuchErg.Options - [goRowSelect];
    end;
else
    begin
     sgrQuerSuchErg.Options := sgrQuerSuchErg.Options + [goRowSelect];
    end;

Das klappt auch wunderbar. Allerdings wird die Funktion wenn ich eine Zelle in der ersten Spalte anklicke und danach in der zweiten (oder folgenden Zeile) ein zweites mal aufgerufen. So habe ich in der zweiten Zeile auch nur eine Zelle markiert. Klicke ich diese Zeile ein weiteres mal an, wird die komplette Zeile wie erwüncht markiert.

Woher kommt der zweite Aufruf, und wie kann ich ihn verhindern?

2)
Wie kann ich zur Laufzeit weitere Zeilen einfügen? Z.B. Um soviele Zeilen zu erhalten wie Datensätze in DB vorhanden sind?

3)
Wie kann ich ohne mit fixedRows,FixedCols zu arbeiten in der ersten Zeile eines StringGrids die Zellenbreite verändern? Dabei ist zu beachten, dass ich auf die einzelnen Zellen durch einen Mausklick die Spalten sortiern will.
Oder ist es möglich ein Event hinter fixedRows,FixedCols-Zellen zu setzten?
Vielen Dank für eure Antworten,
Mario

Moderiert von user profile iconUGrohne: Delphi-Tags eingefügt
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Di 09.09.03 08:53 
1.
Zitat:

Das klappt auch wunderbar. Allerdings wird die Funktion wenn ich eine Zelle in der ersten Spalte anklicke und danach in der zweiten (oder folgenden Zeile) ein zweites mal aufgerufen. So habe ich in der zweiten Zeile auch nur eine Zelle markiert. Klicke ich diese Zeile ein weiteres mal an, wird die komplette Zeile wie erwüncht markiert.


Ich denke mal, ARow hat noch den Wert von der vorherigen Zelle, der ersten Spalte.
Das Grid müßte die Funtkion MouseToCell haben, damit könntest den richtigen Wert rausfinden, od. du benutzt die die Ereignisse OnChangeRow (sofern es die gibt).

2.
Grid.Count := (Grid.Count + 1); //erhöhen der Zeilenanzahl

3.
Da versteh ich deine Frage nicht richtig.
Inwiefern Zeilenbreite ändern? DefaultColWidth?
Bei OnClick kannst ja auf die Spalte/ Zeile abfragen und dementsprechend deine Sortierroutine aufrufen.

Hoffe, daß dir das n bißchen hilft.

_________________
Stellen Sie sich bitte Zirkusmusik vor.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 09.09.03 09:51 
Zu 1.)
Das Ereignis wird einmal mit der neuen Zelle aufgerufen und danach mit der alten, weiß der Geier warum.

zu 2.)
Es heißt: Grid.RowCount=Grid.RowCount+1;

zu 3.)
@opfer: Er will keine FixedRow nehmen, also so eine Titelleiste, aber trotzdem die Möglichkeit haben, die Zellenbreite zu ändern, das geht aber nur zwischen den FixedRows.
Kannst Du nicht irgendwie doch mit FixedRows arbeiten?
Super_M
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 09.09.03 10:25 
Titel: Problem StringGrid
Vielen Dank zunächst einmal. Problem 1 und 2 hätten sich geklärt.
UGrohne du hast es richtig verstanden. Ich würde auch mit FixedRows arbeiten, brauche aber dringend die Funktion des sortierens, wenn ich auf die erste Zelle einer Spalte klicke.
Ist das auch möglich mit fixedRows? Glaube nicht, oder?

Vielen Dank,
Mario
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 09.09.03 11:58 
Da musst Du dann ein bisschen tricksen:
Nimm das Event OnMouseDown oder OnMouseUp, da kriegst Du die Koordinaten, an denen mit der Maus geklickt wurde. Das StringGrid hat die Methode MouseToCell, mit denen Du die Zelle herausfinden kannst, auf die geklickt wurde.

Mit einem case-Switch kannst Du dann eben auf die verschiedenen Titelzellen abfragen und dementsprechend sortieren lassen.

Noch Fragen? Wenn Du brauchst, kann ich Dir auch noch später nen Beispiel-Code tippen.
Super_M
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 09.09.03 13:41 
Titel: Problem Stringgrid
Hi UGrohne, super klapt

Kannst du mir evtl. noch sagen wie Zelleninhalte rechtsbündig ausgegeben werden können?

Vielen Dank,
mario
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 09.09.03 13:50 
Titel: Re: Problem Stringgrid
Super_M hat folgendes geschrieben:
Kannst du mir evtl. noch sagen wie Zelleninhalte rechtsbündig ausgegeben werden können?

Neue Frage = Neues Topic!

Also bitte ein neues Topic erstellen... aber bitte vorher die Suche probieren... es gibt nämlich schon ein paar Beiträge über dieses Thema.

Gruß
Tino
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.