Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StringGrid Width mit Maus während Laufzeit verändern (https://www.delphipraxis.net/13410-stringgrid-width-mit-maus-waehrend-laufzeit-veraendern.html)

n00b_on_knees 17. Dez 2003 20:15


StringGrid Width mit Maus während Laufzeit verändern
 
Hallo miteinander!

Wie kann man mittels

Delphi-Quellcode:
sg1.DefaultColWidth:= ...;
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.

Wenn es mit einem anderem Befehl als dem obigen geht, natürlich bitte diesen.

Danke im Vorraus.
mfG.

Niels 17. Dez 2003 20:57

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]

Mamphil 2. Okt 2004 12:51

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

Sturmrider 8. Mai 2006 10:14

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

fkerber 8. Mai 2006 10:17

Re: StringGrid Width mit Maus während Laufzeit verändern
 
Hi!

Dann hilft dir vielleicht das hier weiter:

Delphi-Quellcode:
stringgrid1.ColWidths[1]:=250;

danku 9. Mai 2006 16:53

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?

Lannes 9. Mai 2006 19:27

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:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; Col, Row: Integer;
  var CanSelect: Boolean);
begin
  if Col = 2 then
    CanSelect := False
    else
      CanSelect := True;
end;
Und so können die Zellen der 3ten Spalte zwar selectiert werden,
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;

Sturmrider 9. Mai 2006 21:22

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!

danku 10. Mai 2006 14:58

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

danku 12. Mai 2006 14:01

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?

danku 14. Mai 2006 11:18

Re: StringGrid Width mit Maus während Laufzeit verändern
 
hat einer einen tipp für mich?

Hawkeye219 14. Mai 2006 11:25

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 Delphi-Referenz durchsuchenTStringGrid.ColWidths ermittelt werden, die Pixelbreite eines Textes über Delphi-Referenz durchsuchenTCanvas.TextWidth.

Gruß Hawkeye

danku 14. Mai 2006 14:41

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

danku 16. Mai 2006 11:27

Re: StringGrid Width mit Maus während Laufzeit verändern
 
hast du vll. noch einen anderen vorschlag?

Lannes 16. Mai 2006 13:33

Re: StringGrid Width mit Maus während Laufzeit verändern
 
Hallo,
Zitat:

Zitat von danku
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

Durch das Setzen von goRowSelect wird die Selection verändert und OnSelectCell erneut mit Col = 0 ausgelöst.
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.

danku 16. Mai 2006 17:27

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:
endung:=copy(fmformat.sgfiles.Cells[0,1],pos('.',fmformat.sgfiles.cells[0,1]),length('.')+3);
fmformat.sgfiles.cells[0,1]:= (rename.text)+endung;
aber statt der endung steht auf einmal '+Ja'.
kann mir einer sagen warum?

das problem tritt immer auf, sobald die filenames über die spaltenbreite hinausragen.

Lannes 16. Mai 2006 21:55

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 Delphi-Referenz durchsuchenExtractFileExt an.
Zitat:

Zitat von danku
aber statt der endung steht auf einmal '+Ja'.
kann mir einer sagen warum?
das problem tritt immer auf, sobald die filenames über die spaltenbreite hinausragen.

hat mit der Spaltenbreite wohl eher nichts zu tun. Das '+Ja' ist im Dateinamen enthalten, befindet sich davor eventuell auch ein Punkt(kann ich auf Deinem Bild nicht erkennen)?
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?

fkerber 16. Mai 2006 22:16

Re: StringGrid Width mit Maus während Laufzeit verändern
 
Hi!

Jepp, soweit ich den Screenshot richtig deute, steht da feat.+Jazz


Ciao Frederic

danku 17. Mai 2006 13:41

Re: StringGrid Width mit Maus während Laufzeit verändern
 
Zitat:

Zitat von fkerber
Hi!

Jepp, soweit ich den Screenshot richtig deute, steht da feat.+Jazz


Ciao Frederic

ja und? was wills du damit sagen?
das thema hat indirekt mit dem topic zutun, zumal es ja auch um stringgrid während laufzeit geht.


Zitat:

Zitat von Lannes
hat mit der Spaltenbreite wohl eher nichts zu tun. Das '+Ja' ist im Dateinamen enthalten, befindet sich davor eventuell auch ein Punkt(kann ich auf Deinem Bild nicht erkennen)?

das kann man doch sehen. :zwinker:
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 10:12 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