Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   edit position für stringgrid (https://www.delphipraxis.net/98417-edit-position-fuer-stringgrid.html)

MondoShiva 27. Aug 2007 08:28


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.

s-off 27. Aug 2007 08:45

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.

MondoShiva 27. Aug 2007 09:03

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:

   x:='';
   if not (copy(edit.Text,1,1)=',')then
   x:=x+copy(edit.Text,1,1);
zuweilen nur ein test

marabu 27. Aug 2007 09:21

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

MondoShiva 27. Aug 2007 10:04

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:
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;
nur meine probleme nehmen kein ende es sind mir nicht mehr die editfelder sondern soll es über das OnChange / OnChanging von dem pagecontroll gehen.
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!

marabu 27. Aug 2007 10:43

Re: edit position für stringgrid
 
Hallo,

hier mein Vorschlag für deine Koordinateneingabe:

Delphi-Quellcode:
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;
Was deine anderen Probleme angeht, so weiß ich zu wenig über deine Benutzerschnittstelle. Wo kommt plötzlich das PageControl her?

Freundliche Grüße

MondoShiva 27. Aug 2007 10:57

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);

marabu 27. Aug 2007 11:11

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 27. Aug 2007 11:39

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.

MondoShiva 27. Aug 2007 11:48

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 18:53 Uhr.
Seite 1 von 2  1 2      

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