![]() |
edit position für stringgrid
Wie kann ich in ein edit(edit) feld eine position für einen stringgrid angeben und ihn durch ein 2tes edit (edit1) feld worauf er zu greifen muss einen text in zelle [i,j] schreiben.
edit = position edit1 = einzugebener text der in zelle i,j dargestellt werden soll ich bedanke mich im vorraus für antworten. |
Re: edit position für stringgrid
Hallo,
eine Position (Zelle) besteht hier aus Zeilen- und Spaltenangabe. Wenn Du ein TEdit nutzen willst, müsstest Du dessen Text-Eigenschaft bzgl. der Position auf jeden Fall parsen, also auseinander nehmen, um die einzelnen Werte zu erhalten. Dazu gibt es unterschiedliche Code-Beispiele, welche Du sicherlich hier im Forum finden wirst. Edit: Unter Delphi 2006 findet sich in der Kategorie 'Beispiele' eine Komponente namens 'SpinEdit'. Wäre vielleichtr etwas schicker und spart Dir das parsen. |
Re: edit position für stringgrid
also kann ich mein bisheriges vorhaben verwerfen und mich anderweitig informieren dachte ich könnte es über copy machen
Delphi-Quellcode:
zuweilen nur ein testx:=''; if not (copy(edit.Text,1,1)=',')then x:=x+copy(edit.Text,1,1); |
Re: edit position für stringgrid
Hallo,
wenn du die Zelle über deren Index-Werte in einem Edit-Feld adressieren willst, dann hast du dich doch für einen interaktiven Weg entschieden. Warum nicht gleich im StringGrid eingeben? Dazu musst du es nur editierbar machen - einfach im Object Inspector bei den Options goEditing einschalten. Grüße vom marabu |
Re: edit position für stringgrid
habs jetzt glaub ich gelöst durch einige komplikationen,
gibts dafür nicht noch einen kürzeren weg??
Delphi-Quellcode:
nur meine probleme nehmen kein ende es sind mir nicht mehr die editfelder sondern soll es über das OnChange / OnChanging von dem pagecontroll gehen.
procedure TForm1.EditChange(Sender: TObject);
var tmp:integer; komma: Boolean; begin if length(edit.text)>2 then begin x:=''; y:=''; tmp:= 0; komma:= false; while tmp< Length(edit.Text) do begin if not (copy(edit.Text,tmp+1,1)=',')then if komma then y:=y+copy(edit.Text,tmp+1,1) else x:=x+copy(edit.Text,tmp+1,1) else komma:= true; inc(tmp); end; end; end; procedure TForm1.Edit1Change(Sender: TObject); begin if not (x= '') or (y= '') then begin if StringGrid.ColCount< strtoint(x) then StringGrid.ColCount := strtoint (x); if StringGrid.RowCount< strtoint (y) then StringGrid.RowCount := strtoint (y); end; StringGrid.Cells[strtoint(x),strtoint(y)]:= edit1.Text; end; d.h. sobald ich den reiter wechsel soll er die eingaben von edit und edit1 auf den stringgrid reiter übernehmen :) bin dankbar für eure hilfe! |
Re: edit position für stringgrid
Hallo,
hier mein Vorschlag für deine Koordinateneingabe:
Delphi-Quellcode:
Was deine anderen Probleme angeht, so weiß ich zu wenig über deine Benutzerschnittstelle. Wo kommt plötzlich das PageControl her?
function ParseCoord(const s: string; var x, y: Integer; separator: Char = ','): Boolean;
var iSep: Integer; begin iSep := Pos(separator, s); x := StrToIntDef(Trim(Copy(s, 1, Pred(iSep))), -1); y := StrToIntDef(Trim(Copy(s, Succ(iSep), MaxInt)), -1); Result := (x >= 0) and (y >= 0); end; procedure TMainForm.EditChange(Sender: TObject); var x, y: Integer; // bei dir sind das Form-Variablen begin with Sender as TEdit do if ParseCoord(Text, x, y) then Caption := Format('%d, %d', [x, y]) // nur zur Kontrolle else Caption := '???'; end; Freundliche Grüße |
Re: edit position für stringgrid
so sieht der ganze spass zuzeit aus und ich versuche momentan , edit und edit1 über den reiter PosText / Onchange zu setzten das dieser dann auf den stringgrid schreibt quasi ist ziemlich dumm zu erklären was da geamcht werden soll^^
quasi ich schreibe in edit :( 4,4) als position und in edit1:(hall) als einzugebener text in den stringgrid nun wechsele ich den reiter postext zu dem reiter Grid in dem sich der stringgrid befindet und möchte das er es quasi automatisch aktualisiert! ohne onchange bei den editfelder oder sonst etwas ;)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Grids, ComCtrls; type TForm1 = class(TForm) pageControl: TPageControl; PosText: TTabSheet; Grid: TTabSheet; TabSheet2: TTabSheet; Search: TTabSheet; Edit: TEdit; Edit1: TEdit; StringGrid: TStringGrid; Panel: TPanel; Edit2: TEdit; Button1: TButton; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; Load: TButton; Save: TButton; StringGrid2: TStringGrid; Edit3: TEdit; Suchengrid2: TButton; CopyToGrid2: TButton; Clear: TButton; Trennzeichen: TEdit; procedure Button1Click(Sender: TObject); procedure LoadClick(Sender: TObject); procedure Suchengrid2Click(Sender: TObject); procedure CopyToGrid2Click(Sender: TObject); procedure ClearClick(Sender: TObject); procedure EditChange(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure pageControlChange(Sender: TObject); private mylist:TStringList; x,y: string; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var j: Integer; i: Integer; begin for j:=0 to stringgrid.colCount-1 do begin for i:=0 to StringGrid.rowCount-1 do begin if pos(lowercase(edit2.text),lowercase(stringgrid.Cells[j,i]))>0 then begin StringGrid.Row := i; StringGrid.Col := j; ShowMessage(edit2.Text+' wurde in Zeile '+intToStr(i)+ ' in Spalte ' + inttostr(j)+' gefunden'); end; end; end; end; procedure TForm1.LoadClick(Sender: TObject); var i,count:Integer; delimiter:char; mylist:TStringList; begin OpenDialog.Execute; mylist:= TStringList.Create; mylist.LoadFromFile(OpenDialog.FileName); for i := 0 to mylist.Count-1 do mylist.Strings[i] := ';'+mylist.Strings[i]; for i:=0 to mylist.count-1 do begin Stringgrid.Rows[i+1].delimiter := ';'; StringGrid.Rows[i+1].DelimitedText := mylist[i]; end; end; procedure TForm1.Suchengrid2Click(Sender: TObject); var i: Integer; j: Integer; begin for j:=0 to stringgrid2.colCount-1 do begin for i:=0 to StringGrid2.rowCount-1 do begin if pos(lowercase(edit3.text),lowercase(stringgrid2.Cells[j,i]))>0 then begin StringGrid2.Row := i; StringGrid2.Col := j; ShowMessage(edit3.Text+' wurde in Zeile '+intToStr(i)+ ' in Spalte ' + inttostr(j)+' gefunden'); end; end; end; end; procedure TForm1.CopyToGrid2Click(Sender: TObject); begin StringGrid:= StringGrid2; end; procedure TForm1.ClearClick(Sender: TObject); var mylist: TStringList; begin // StringGrid2 end; procedure TForm1.EditChange(Sender: TObject); var tmp:integer; komma: Boolean; begin if length(edit.text)>2 then begin x:=''; y:=''; tmp:= 0; komma:= false; while tmp< Length(edit.Text) do begin if not (copy(edit.Text,tmp+1,1)=',')then if komma then y:=y+copy(edit.Text,tmp+1,1) else x:=x+copy(edit.Text,tmp+1,1) else komma:= true; inc(tmp); end; end; end; procedure TForm1.Edit1Change(Sender: TObject); begin if not (x= '') or (y= '') then begin if StringGrid.ColCount< strtoint(x) then StringGrid.ColCount := strtoint (x); if StringGrid.RowCount< strtoint (y) then StringGrid.RowCount := strtoint (y); end; StringGrid.Cells[strtoint(x),strtoint(y)]:= edit1.Text; end; procedure TForm1.pageControlChange(Sender: TObject); |
Re: edit position für stringgrid
Ich weiß nicht ob du damit am Ende glücklich wirst, aber nimm einfach die Behandlungsroutinen für OnChange() bei deinen Edit-Komponenten weg und probiere es so:
Delphi-Quellcode:
procedure TDemoForm.PageControlChange(Sender: TObject);
var x, y: Integer; begin with Sender as TPageControl do if (TabIndex = 1) and ParseCoord(PosEdit.Text, x, y) then StringGrid.Cells[x, y] := CellEdit.Text; end; |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
|
Re: edit position für stringgrid
habs grade getestet aber es läuft leider nicht!
ich weiss nich mehr weiter ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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