Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 146
Erhaltene Danke: 5



BeitragVerfasst: So 14.10.18 15:55 
Hallo zusammen,
es fällt mir jetzt erst auf. Habe mehrere Anwendungen mit StringGrid-Anzeigen. Die erste Zeile enthält meist die Überschriften. Definiert habe ich FixedRow=1.
Erwartet habe ich, dass diese Zeile immer sichtbar ist. Tatsächlich rollt sie beim Scrollen wie jede andere Zeile weg.
Habe ich da falsche Erwartungen bzw. wie bleiben Fixed-Zeilen immer sichtbar?
Danke hRb
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2088
Erhaltene Danke: 381

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 14.10.18 22:03 
Guten Abend hRb,

sowohl unter Delphi 7, 2006 und 10.1 ist die erste / oberste Zeile (die standardmäßig ausgegraut ist) durch die Eigenschaft .FixedRows := 1 fixiert und scrollt nicht mit.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 146
Erhaltene Danke: 5



BeitragVerfasst: Do 01.11.18 20:49 
Hallo Frühlingsrolle,
habe ich ja auch geglaubt. Aber sie mal die beiden beigefügten Bilder an. FixedRow = 1 !
Beim Scrollen verschwindet Zeile 0 (Fixzeile). Keine Ahnung warum? Oder doch?
Gruß hRb
Einloggen, um Attachments anzusehen!
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2088
Erhaltene Danke: 381

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 02.11.18 03:18 
Falls du das OnDrawCell-Ereignis benutzt, könnte es den Effekt hervorrufen.
Ansonsten, lege ein neues Projekt an, benutze ein neues TStringGrid und schau, ob es auch dann eintritt.
Wenn nicht, vergleiche die Eigenschaftswerte deines Projektes mit dem "Dummy-Projekt", und wenn doch, lade es hier hoch, dann kann man es besser nachvollziehen.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 146
Erhaltene Danke: 5



BeitragVerfasst: Mo 05.11.18 23:13 
Hallo Frühlingsrolle (und alle mit dem gleichen Problem),
1. OnDrawCell-Ereignis nutze ich nicht
2. bei "neuem" StringGrid gleicher Effekt,
3. Jetzt habe ich das Problem nach langer Suche gefunden, stecke jedoch in einem Dilemma.

Von der Aufgabenstellung her fülle ich das StringGrid mit den Dateinamen eines Ordners. Da kann es vorkommen, dass keine Dateien einzutragen sind, bzw., die Anzeige leer wird durch Selektion auf bestimmte Dateiendungen. Das bedeutet, man sieht dann nur die Fix-Zeile. Damit erreicht RowCount=FixedRow (keine Nutzzeile). Dies jedoch ist per Definition beim StrinGrid-Object offenbar nicht erlaubt.
Auch zum Leeren eines StringGrid habe ich den Befehl
StringGrid1.RowCount:=FixedRows;
verwendet. Wie sich nun zeigt, wird FixedRows hierbei automatisch um eins unter RowCount gesetzt. Bei RowCount=1 wird FixedRows also =0. Danach ist klar, dass beim Scrollen die Überschrift nicht sichtbar bleibt. Ist RowCount erst einmal =1, verpufft der "Wiederherstell-Befehl" FixedRows:=1.

Nun meine Frage: wie zeigt man eine leere StringGrid an ohne danach das Problem mit Scroll zu haben?
Danke für hilfreiche Antworten.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2088
Erhaltene Danke: 381

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 06.11.18 22:16 
Das automatische Anpassen Werte erklärt sich durch die Setter-Methoder der z.B. ColCount-Eigenschaft:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TCustomGrid.SetColCount(Value: Longint);
begin
  if FColCount <> Value then
  begin
    if Value < 1 then Value := 1;
    if Value <= FixedCols then FixedCols := Value - 1;
    ChangeSize(Value, RowCount);
    if goRowSelect in Options then
    begin
      FAnchor.X := ColCount - 1;
      Invalidate;
    end;
  end;
end;

Gleiches wird auch für die RowCount-Eigenschaft gelten.
Was du dagegen tun kannst, wäre zumindest auf: StringGrid1.RowCount:=FixedRows;
zu verzichten.
Erzeuge so viele Zeilen, wie deine Anwendung an Dateien ausliest, die du wahrscheinlich in eine StringList o.ä. hinterlegt haben wirst.
Die Spaltenanzahl sollte konstant bleiben, oder nicht?!

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 146
Erhaltene Danke: 5



BeitragVerfasst: Mi 07.11.18 17:11 
Hallo Frühlingsrolle,
danke für die Erklärung! Wie Du recht vermutet hast, lege ich StringGrid.Count in Anhängigkeit der Anzahl darzustellender Dateien fest. Wenn es natürlich keine "Nutzzeilen" gibt, bleibt nur die Fix-Zeile. Das Scrollproblem habe ich inzwischen programm-intern an zwei Stellen abgefangen, was leicht möglich war, denn kommt die Anzahl der Nutzzeilen unter VisibleColCount, verschwindet der Scroolbalken und die Fix-Zeile bleibt immer sichtbar. Werden Nutzzeilen wieder > Null, so "restauriere" ich den Wert von FixedRows. Das "Scroll-Problem" ist damit behoben.

Nun interessiert mich aber Deine Procedure. Zunächst habe ich Deine Ausführung als Erklärung zum Effekt der autom. Werte-Korrektur verstanden. Hier wird ja deutlich, dass FixedCols (FixedRows) immer Value-1 sein muss. Würde dies jedoch bedeuten, dass durch Anpassung dieser Procedure die autom. Korrektur deaktiviert werden könnte?

PS: nicht zuletzt durch Deine Hilfe stehe ich kurz vor Abschluss der Programmentwicklung: "Listview mit StringGrid optisch synchronisieren"
www.entwickler-ecke....nisieren_117091.html (noch offener Punkt)
Werde in den nächsten Tagen Ergebnis veröffentlichen.
Dank und Gruß hRb
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2088
Erhaltene Danke: 381

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Do 08.11.18 17:04 
Wenn, dann müssen die genannten Eigenschaften komplett überschrieben werden, also jeweils neue Getter und Setter Methoden zu Row- und ColCount.
Vergiss dabei nicht auf das Neuzeichnen, .Invalidate(), und, je nachdem, wenn du etwas vom Vorgänger übernehmen möchtest, inherited ... vor der Eigenschaft oder der Methode setzen.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)