Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi stringGrid dynamisch erweitern/sichtbarer Bereich (https://www.delphipraxis.net/31016-stringgrid-dynamisch-erweitern-sichtbarer-bereich.html)

Tigger 2. Okt 2004 20:09


stringGrid dynamisch erweitern/sichtbarer Bereich
 
Es geht um ein (dreizeiliges) StringGrid.

a)
  • Die mittlere Zeile dient zur Darstellung des Bandes einer Turing-Maschine,
    das ja theoretisch unendlich ist.

    Ein Zeiger fährt in der oberen Zeile über das Band und schreibt neue Zeichen
    in die Zellen darunter. Dieser Zeiger soll sich nun unendlich nach links oder
    rechts bewegen können.

    Ich habe ColCount momentan auf 16 eingestellt. Wenn dieser Bereich überschritten wird,
    wie kann ich dynamisch weitere Spalten erzeugen? Dies müßte wie gesagt in beide Richtung
    möglich sein.


b)
  • Die Bewegung des Zeigers und das Schreiben der Zeichen passiert ausschließlich programmseitig,
    der Benutzer kann der Simulation nur zusehen.

    Wie kann ich nun erreichen, daß der Scrollbalken den Zeiger verfolgt? Daß der Benutzer also
    immer den Bereich des StringGrids sehen kann, in dem gerade etwas passiert?

    Ich hoffe, das ist so verständlich. Auf Wunsch könnte ich sonst such das Programm zur Verfügung
    stellen, das läuft eigentlich schon so, wie es soll.

Grüße, Tigger

supermuckl 2. Okt 2004 20:15

Re: stringGrid dynamisch erweitern/sichtbarer Bereich
 
ich weis zwar net ganz was das soll und wovon du redest *g*

aber:

a) die propertys gridcount und rowcount verändern damit du mehr spalten/zeilen bekommst (geht auch zur laufzeit)

b) eventuell gehts wenn du die eigenschaft "selected" der enstsprechenden zelle setzt und hoffst das dann die scollleisten mitscrollen
oder halt irgendwie mit messages das grid zum scrollen bringen ( sowas hab ich hier schonmal gesehen als thread )

grayfox 2. Okt 2004 20:18

Re: stringGrid dynamisch erweitern/sichtbarer Bereich
 
hallo tigger!

Zitat:

Die mittlere Zeile dient zur Darstellung des Bandes einer Turing-Maschine,
:?:

Zitat:

Ich habe ColCount momentan auf 16 eingestellt. Wenn dieser Bereich überschritten wird,
wie kann ich dynamisch weitere Spalten erzeugen? Dies müßte wie gesagt in beide Richtung
möglich sein.
nachdem du 'ColCount' schon gefunden hast, kann ja das dynamische erhöhen und erniedrigen auch kein problem mehr sein. richtig? :roll:

Zitat:

Wie kann ich nun erreichen, daß der Scrollbalken den Zeiger verfolgt? Daß der Benutzer also
immer den Bereich des StringGrids sehen kann, in dem gerade etwas passiert?
bist du dir sicher, dass ein stringgrid die richtige komponente für dein vorhaben ist? wäre nicht ein progressbar besser dafür geeignet :gruebel:

{$UNTESTED}
du könntest row & col auf jene zelle setzen, die du anzeigen willst

mfg, stefan

Tigger 2. Okt 2004 21:31

Re: stringGrid dynamisch erweitern/sichtbarer Bereich
 
(Turing-Maschine: das Ganze läuft so, daß ich das Zeichen an der aktuellen
Pfeilposition auslese, intern in einer Tabelle nachschaue und dort dann
steht, welches Zeichen auf das Band geschrieben werden soll und in welche
Richtung sich der Pfeil bewegen soll. Von daher ist ein ProgressBar hier
absolut nicht das Richtige ;).)

Zitat:

nachdem du 'ColCount' schon gefunden hast, kann ja das dynamische erhöhen und erniedrigen auch kein problem mehr sein. richtig? Rolling Eyes
Ich gebe zu, das war keine so intelligente Frage...

Zitat:

{$UNTESTED}
du könntest row & col auf jene zelle setzen, die du anzeigen willst
Das funktioniert leider nicht. Noch andere Ideen?

Christian Seehase 2. Okt 2004 21:43

Re: stringGrid dynamisch erweitern/sichtbarer Bereich
 
Moin Tigger,

Zitat:

Zitat von grayfox
du könntest row & col auf jene zelle setzen, die du anzeigen willst

also bei mir schon :gruebel:

Tigger 2. Okt 2004 21:53

Re: stringGrid dynamisch erweitern/sichtbarer Bereich
 
Ich muß mich entschuldigen, habe das Ganze an einer falschen Stelle im Code eingesetzt.
Also 'stringGrid.Col := gewünschtePosition' funktioniert.

Danke erstmal, Tigger

Tigger 3. Okt 2004 11:03

Re: stringGrid dynamisch erweitern/sichtbarer Bereich
 
Ist jetzt eigentlich nur eine Schönheitssache, aber extrem störend.
Wenn ich stringGrid.Col auf eine bestimmt Spalte setze ist diese
Spalte am rechten Rand sichtbar (bei Scrollbalken).

Da ich sie natürlich etwas mittiger sichtbar haben möchte, könnte
ich Col jetzt einfach auf (gewünschte Spalte + 5) setzen. Das
Problem ist, daß dabei diese Zelle blau unterlegt wird. Kann ich
das irgendwie verhindern?

Hatte mir überlegt, dieser Zelle einen string zuzuweisen, damit sie
neu gezeichnet wird, Hintergrundfarbe dabei umstellen und string
dann wieder löschen.

Aber das muß doch auch irgendwie einfacher gehen. Also ungefähr so
stelle ich mir das vor:

<Pseudocode>
stringGrid.Col := Fokus + 5;
stringGrid.Cells[Col, 0] := Hintergrundfarbe;
</Pseudocode>

(edit: cols auf col geändert)

Tigger 3. Okt 2004 14:49

Re: stringGrid dynamisch erweitern/sichtbarer Bereich
 
So, habe jetzt folgende Lösung gefunden:

Code:
procedure fokusVersetzen(position : integer);
begin
  frm_simulation.sg_simulation.Col := position;
  flagFokus := true;
  frm_simulation.sg_simulation.Update;
  flagFokus := false;
end; //fokusVersetzen
im OnDrawCell-Ereignis des stringGrids wird dann, wenn flag gesetzt, die
Hintergrundfarbe auf weiß gesetzt und die Zelle nochmal neu gefuellt.

Falls jemand eine schönere Lösung hat, immer her damit!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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