AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

edit position für stringgrid

Ein Thema von MondoShiva · begonnen am 27. Aug 2007 · letzter Beitrag vom 27. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
MondoShiva

Registriert seit: 14. Aug 2007
Ort: Mönchengladbach
63 Beiträge
 
Delphi XE2 Professional
 
#1

edit position für stringgrid

  Alt 27. Aug 2007, 08:28
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.
Veritas et Aequitas
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: edit position für stringgrid

  Alt 27. Aug 2007, 08:45
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.
  Mit Zitat antworten Zitat
MondoShiva

Registriert seit: 14. Aug 2007
Ort: Mönchengladbach
63 Beiträge
 
Delphi XE2 Professional
 
#3

Re: edit position für stringgrid

  Alt 27. Aug 2007, 09:03
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
Veritas et Aequitas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: edit position für stringgrid

  Alt 27. Aug 2007, 09:21
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
  Mit Zitat antworten Zitat
MondoShiva

Registriert seit: 14. Aug 2007
Ort: Mönchengladbach
63 Beiträge
 
Delphi XE2 Professional
 
#5

Re: edit position für stringgrid

  Alt 27. Aug 2007, 10:04
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!
Veritas et Aequitas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: edit position für stringgrid

  Alt 27. Aug 2007, 10:43
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
  Mit Zitat antworten Zitat
MondoShiva

Registriert seit: 14. Aug 2007
Ort: Mönchengladbach
63 Beiträge
 
Delphi XE2 Professional
 
#7

Re: edit position für stringgrid

  Alt 27. Aug 2007, 10:57
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 edit1hall) 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);
Veritas et Aequitas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: edit position für stringgrid

  Alt 27. Aug 2007, 11:11
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;
  Mit Zitat antworten Zitat
27. Aug 2007, 11:39
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
MondoShiva

Registriert seit: 14. Aug 2007
Ort: Mönchengladbach
63 Beiträge
 
Delphi XE2 Professional
 
#10

Re: edit position für stringgrid

  Alt 27. Aug 2007, 11:48
habs grade getestet aber es läuft leider nicht!
ich weiss nich mehr weiter ^^
Veritas et Aequitas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:50 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