![]() |
StringGrid Width mit Maus während Laufzeit verändern
Hallo miteinander!
Wie kann man mittels
Delphi-Quellcode:
während das Programm läuft, die Breite der Spalte des StringGrid verändern? Das ganze sollte mittels Mausklick passieren wie man es bei Programmen wie Excel gewohnt ist.
sg1.DefaultColWidth:= ...;
Wenn es mit einem anderem Befehl als dem obigen geht, natürlich bitte diesen. Danke im Vorraus. mfG. |
Re: StringGrid Width mit Maus während Laufzeit verändern
Moin!
Du klickst auf das "+" im OI vor Options. Danach stellst du goColSizing auf TRUE und du kannst im Programm die Breite der Zellen ändern. MfG Niels [edit] PS: wenn du goRowSizing auch auf TRUE machst kannste auch die Zeilenhöhe verändern. [/edit] |
Re: StringGrid Width mit Maus während Laufzeit verändern
Hi!
Ich wärme das hier mal auf mit einem kleinen Zusatz-Tipp: Mit goRowSizing = true / goColSizing = true kann man nur die Spaltenbreiten über die "FixedRows" / "FixedCols" ändern (das sind die grauen Spalten- / Zeilenüberschriften. Ich bin darüber gestolpert, weil ich die Breite durch Klick und Ziehen auf die Trennlinien der einfachen Felder ändern wollte - das funktioniert nicht. Also: Mindestens Fixed[Rows|Cols] = 1 einstellen, damit man darüber die Breite bzw. Höhe verändern kann! Mamphil |
Re: StringGrid Width mit Maus während Laufzeit verändern
Hallo
Kann mir vielleicht nocheinmal jemand weiter helfen wie ich jetzt genau die Zellengröße für eine Spalte ändern kann? Ich habe lediglich Spalten mit Daten, keine Kopfzeile mit Überschriften. Und nur mit goRowSizing = true / goColSizing = true lässt sich da leider nichts bewirken. Zumal ich die Zellspalten ja nicht von Hand verschieben möchte (was übrigens auch nicht geht), sondern sie von anfang an in einer gewissen Größe anzeigen. Wie geht das :cry: ? Gruß Sturmrider |
Re: StringGrid Width mit Maus während Laufzeit verändern
Hi!
Dann hilft dir vielleicht das hier weiter:
Delphi-Quellcode:
stringgrid1.ColWidths[1]:=250;
|
Re: StringGrid Width mit Maus während Laufzeit verändern
kann man erreichen das bei 3spalten die letzten 2 enabled:=false gesetzt werden und die erste im editiermodus vorliegt?
|
Re: StringGrid Width mit Maus während Laufzeit verändern
Hallo,
beispielsweise kann man so keine Zellen in der 3ten Spalte(Index = 2) selectieren, also auch nichts eintragen:
Delphi-Quellcode:
Und so können die Zellen der 3ten Spalte zwar selectiert werden,
procedure TForm1.StringGrid1SelectCell(Sender: TObject; Col, Row: Integer;
var CanSelect: Boolean); begin if Col = 2 then CanSelect := False else CanSelect := True; end; aber es kann nichts eingegeben werden:
Delphi-Quellcode:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; Col, Row: Integer;
var CanSelect: Boolean); begin if Col = 2 then StringGrid1.Options := StringGrid1.Options-[goEditing] else StringGrid1.Options := StringGrid1.Options+[goEditing]; end; |
Re: StringGrid Width mit Maus während Laufzeit verändern
@fkerber
Vielen Dank :-D funktioniert einwandfrei. Ich habe es in eine FormActivate-procedure gepackt ^^ so, dass beim Starten des Progs. die Tabellen sofort angepasst werden. War nur etwas schwehr mit den Überschriften der Spalten, die ich extra, also nicht im StringGrid hatte...aber mit ein bischen herumprobieren hat auch das hinterher funktioniert ^^ DANKE nocheinmal! |
Re: StringGrid Width mit Maus während Laufzeit verändern
wenn man in spalte 1 eine zelle editiert und dann in eine zelle in der 2.spalte klickt ist diese auch editierbar. warum?
Delphi-Quellcode:
if ACol = 0 then begin
sgfiles.Options := sgfiles.Options+[goEditing]; sgfiles.Options := sgfiles.Options-[goRowSelect]; end else begin sgfiles.Options := sgfiles.Options-[goEditing]; sgfiles.Options := sgfiles.Options+[goRowSelect]; end |
Re: Automatisches Anpassen anhand Stringgrid weite
gehört indirekt zum topic:
ich will die länge eines tedit automatisch anhand einer tstringgrid text anpassen: rename.Width:= length(fmformat.sgfiles.Cells[0,1]); fmrename.width:= length(rename.text) + 200; warum wird das tedit (rename.text) zur laufzeit zusammengeschoben? |
Re: StringGrid Width mit Maus während Laufzeit verändern
hat einer einen tipp für mich?
|
Re: StringGrid Width mit Maus während Laufzeit verändern
Hallo danku,
Mit Length erfragst du die Länge des Textes in Zeichen, d.h. die Anzahl Zeichen im Text. Möchtest du die Breite des Edit-Controls ändern, benötigst du die Breite in Pixel. Die Breite einer Spalte kann über ![]() ![]() Gruß Hawkeye |
Re: StringGrid Width mit Maus während Laufzeit verändern
habs mal getestet:
aber ganz so gehts nicht:
Delphi-Quellcode:
//Editfeld rename.Width:= (fmformat.sgfiles.Canvas.TextWidth(fmformat.sgfiles.cells[0,1])); // funzt nicht 100% da die width des tstringgrids nicht immer übernommen wird //Formularwidth fmrename.width:= (canvas.TextWidth(rename.text)); // problem: die voreingestellte width des tedit wird zur laufzeit angezeigt, aber eben nicht die virtuelle width, d.h. die width von der länge des textes aus der tstringgrid |
Re: StringGrid Width mit Maus während Laufzeit verändern
hast du vll. noch einen anderen vorschlag?
|
Re: StringGrid Width mit Maus während Laufzeit verändern
Hallo,
Zitat:
Eine Lösung für die Kombination goEditing/goRowSelect fällt mir dazu nicht ein. :| Darin könnten auch Deine Probleme mit TextWidth begründet sein. Hast Du mal überprüft ob Dein TextWidth-Code auf die richtige Zelle zugreift? Und hat Dein Edit die gleiche Font-Einstellung wie das StringGrid? Denn sgfiles.Canvas.TextWidth berechnet auf der Grundlage von StringGrid.Font. |
Re: StringGrid Width mit Maus während Laufzeit verändern
Liste der Anhänge anzeigen (Anzahl: 1)
jo die stringgrid und das editfeld haben beide die gleichen fonts.
endungsproblem bei spaltenbreite: --------------------------------- sobald man doppelclickt auf die stringgrid öffnet sich ja das formular, indem dann der inhalt der angeklickten zelle im tedit steht. (der komplette name, weil die filenames bedingt durch die spaltenbreite gekürzt werden) wenn es ein kurzer name des filenames ist, kann man das ja ohne probs ändern, aber bei längeren gibts stress. bspw. ändert man einen filename per doppelclicken auf die stringgrid, wobei man in dem tedit im geöffneten formular die letzten 3zeichen bspw. löscht. es wird zwar der eintrag von tedit übernommen und in die stringgrid (angeklickte zelle) geschrieben
Delphi-Quellcode:
aber statt der endung steht auf einmal '+Ja'.
endung:=copy(fmformat.sgfiles.Cells[0,1],pos('.',fmformat.sgfiles.cells[0,1]),length('.')+3);
fmformat.sgfiles.cells[0,1]:= (rename.text)+endung; kann mir einer sagen warum? das problem tritt immer auf, sobald die filenames über die spaltenbreite hinausragen. |
Re: StringGrid Width mit Maus während Laufzeit verändern
Hallo,
hat length('.') in Deinem Code einen tieferen Sinn :roll: der '.' hat immer die Länge 1, oder? Bzgl. Endung einer Datei, schau Dir mal die Funktion ![]() Zitat:
Innerhalb Deines Codes suchst Du mit Pos nach dem ersten Punkt und kopierst dann 4 Zeichen als Endung ---> '.+ja' Ps.: Deine Fragen weichen immer mehr vom Thema ab, wäre besser wenn Du in solchen Fällen dafür einen neuen Thread eröffnest. Mods: Eventuell können ja die letzten Beiträge abgetrennt werden? |
Re: StringGrid Width mit Maus während Laufzeit verändern
Hi!
Jepp, soweit ich den Screenshot richtig deute, steht da feat.+Jazz Ciao Frederic |
Re: StringGrid Width mit Maus während Laufzeit verändern
Zitat:
das thema hat indirekt mit dem topic zutun, zumal es ja auch um stringgrid während laufzeit geht. Zitat:
ja da ist einer. wie gesagt der setzt anstatt der endung(.mp3) eben das 'Ja' hab das problem mit extractfileext gelöst :thumb: :pale: was es in delphi alles gibt :cyclops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 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