AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Quellcode Frage zu StringGrids und Logik
Thema durchsuchen
Ansicht
Themen-Optionen

Quellcode Frage zu StringGrids und Logik

Ein Thema von Barret · begonnen am 23. Jan 2005 · letzter Beitrag vom 23. Jan 2005
Antwort Antwort
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#1

Quellcode Frage zu StringGrids und Logik

  Alt 23. Jan 2005, 11:59
Hey Leute!
Ich komm grad nich mit der Logik klar.
Und zwar hab ich mehrere StringGrids die editierbar seien sollen. Aer nich, wenn ich in das Feld klicke sondern wenn ich in das feld klicke und dan F2 drücke. Gesagt getan .... Hab das schon mal für ein stringGrid gebastelt gehabt und hab das dan abgeändert. Dafür hab ich noch ein Edit benutzt das erst inviseble is.

Code bei dem es Funktioniert:
Code:
//neue Zeile hinzufügen bzw. löschen & mehr ------------------------------------
procedure TFKondensatorVoreinheiten.SGVoreinheitenKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_F2) then
    begin
      BrtBearbeiten.Click;
    end;
end;

//Bearbeiten von Zellen --------------------------------------------------------
procedure TFKondensatorVoreinheiten.BBearbeitenClick(Sender: TObject);
begin
    with SGVoreinheiten do
      begin
      //Größe des Editfensters an Größe des StringGrids anpassen
        EdtEditieren.Text := Cells[Col, Row];
        EdtEditieren.Left := CellRect(Col, Row).Left + Left + 2;
        EdtEditieren.Top := CellRect(Col, Row).Top + Top + 2;
        EdtEditieren.Height := CellRect(Col, Row).Bottom - CellRect(Col, Row).Top + 2;
        EdtEditieren.Width := CellRect(Col, Row).Right - CellRect(Col, Row).Left + 2;
      end;
    EdtEditieren.SetFocus;
  end;
end;

//schreiben in StringGrid ------------------------------------------------------
procedure TFKondensatorVoreinheiten.EdtEditierenExit(Sender: TObject);
begin
  EdtEditieren.Visible := false;
  with SGVoreinheiten do
    begin
      Cells[Col,Row] := EdtEditieren.Text; //auf Spalten Text blenden
    end;
end;

//aus Editfeld springen --------------------------------------------------------
procedure TFKondensatorVoreinheiten.EdtEditierenKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_RETURN) then
    begin
      SGVoreinheiten.SetFocus;
    end;
end;
Zu erläuterun: Edt = Editfeld & SG = StringGrid

jetzt mal der neue Code:
Code:
//Tastaturbedienung für StringGrids --------------------------------------------
procedure TFFVConfig.SGParameterKeyDown(Feld: TStringGrid;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_F2) then
    begin
      EdtEditieren.Visible := true;
      with Feld do
        begin
        //Größe des Editfensters an Größe des StringGrids anpassen
          EdtEditieren.Text := Cells[Col, Row];
          EdtEditieren.Left := CellRect(Col, Row).Left + Left + 21;
          EdtEditieren.Top := CellRect(Col, Row).Top + (Top * 2) + 37;
          EdtEditieren.Height := CellRect(Col, Row).Bottom - CellRect(Col, Row).Top + 2;
          EdtEditieren.Width := CellRect(Col, Row).Right - CellRect(Col, Row).Left + 2;
        end;
      EdtEditieren.SetFocus;
    end;
end;

//*****
procedure TFFVConfig.SGGlueckKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  SGParameterKeyDown(TStringGrid(Sender), Key, Shift);
end;

//Tastaturbedienung für EdtEditieren -------------------------------------------
procedure TFFVConfig.EdtEditierenKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_RETURN) then
    begin
      if (iStrindGrid_Enter = 1) then SGGlueck.SetFocus;
      if (iStrindGrid_Enter = 2) then SGKondition.SetFocus;
      if (iStrindGrid_Enter = 3) then SGPressing.SetFocus;
      if (iStrindGrid_Enter = 4) then SGRegen.SetFocus;
      if (iStrindGrid_Enter = 5) then SGStaedte.SetFocus;
      if (iStrindGrid_Enter = 6) then SGTemperatur.SetFocus;
    end;
end;

//asus EdtEditierenspringen ----------------------------------------------------
procedure TFFVConfig.EdtEditierenExit(Sender: TObject);
begin
  EdtEditieren.Visible := false;
  if (iStrindGrid_Enter = 1) then SGGlueck.Cells[iStringGrid_Col, iStringGrid_Row] := EdtEditieren.Text;
  if (iStrindGrid_Enter = 2) then SGKondition.Cells[iStringGrid_Col, iStringGrid_Row] := EdtEditieren.Text;
  if (iStrindGrid_Enter = 3) then SGPressing.Cells[iStringGrid_Col, iStringGrid_Row] := EdtEditieren.Text;
  if (iStrindGrid_Enter = 4) then SGRegen.Cells[iStringGrid_Col, iStringGrid_Row] := EdtEditieren.Text;
  if (iStrindGrid_Enter = 5) then SGStaedte.Cells[iStringGrid_Col, iStringGrid_Row] := EdtEditieren.Text;
  if (iStrindGrid_Enter = 6) then SGTemperatur.Cells[iStringGrid_Col, iStringGrid_Row] := EdtEditieren.Text;
end;

//festleegen der Zellen IDs für StringGrids ------------------------------------
procedure TFFVConfig.SGGlueckEnter(Sender: TObject);
begin
  iStrindGrid_Enter := 1;
  iStringGrid_Col := SGGlueck.Col;
  iStringGrid_Row := SGGlueck.Row;
end;

//*****
procedure TFFVConfig.SGKonditionEnter(Sender: TObject);
begin
  iStrindGrid_Enter := 2;
  iStringGrid_Col := SGKondition.Col;
  iStringGrid_Row := SGKondition.Row;
end;

//*****
procedure TFFVConfig.SGPressingEnter(Sender: TObject);
begin
  iStrindGrid_Enter := 3;
  iStringGrid_Col := SGPressing.Col;
  iStringGrid_Row := SGPressing.Row;
end;

//*****
procedure TFFVConfig.SGRegenEnter(Sender: TObject);
begin
  iStrindGrid_Enter := 4;
  iStringGrid_Col := SGRegen.Col;
  iStringGrid_Row := SGRegen.Row;
end;

//*****
procedure TFFVConfig.SGStaedteEnter(Sender: TObject);
begin
  iStrindGrid_Enter := 5;
  iStringGrid_Col := SGStaedte.Col;
  iStringGrid_Row := SGStaedte.Row;
end;

//*****
procedure TFFVConfig.SGTemperaturEnter(Sender: TObject);
begin
  iStrindGrid_Enter := 6;
  iStringGrid_Col := SGTemperatur.Col;
  iStringGrid_Row := SGTemperatur.Row;
end;
Die procedure:
Code:
procedure TFFVConfig.SGGlueckKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  SGParameterKeyDown(TStringGrid(Sender), Key, Shift);
end;
Die IntegerWerte die Ihr öfter seht sind global. Hir noch mal kurz zur Verdeutlichung:
Code:
  iStrindGrid_Enter : Integer = 1; //Definieren der ausgelösten Aktion im EdtEditieren (Keydown)
  iStringGrid_Col : Integer = 1; //Col Angabe für StringGrids
  iStringGrid_Row : Integer = 1; //Row Angabe für StringGrids
Funktioniert übergreifend für alle StringGrids.
Der Fehler im neuen Code ist der, dass er nie die richtige Zelle nimt in der er schreiben soll. Sondern immer die letzte.
Zur Verdeutlichung: letzte Zelle = 2, 2
neue Zelle in der F2 gedrückt ist = 2, 3
Er schreibt mir den Text jetzt aber in die 2, 2.

Der einzige unterschied zwischen den Grids vom alten zum neuen ist nur der, dass die neuen jetzt noch eine einzelne FixedRow haben. Das sollte aber normaler weise nichts ausmachen.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Quellcode Frage zu StringGrids und Logik

  Alt 23. Jan 2005, 12:12
Zitat von Barret:
Und zwar hab ich mehrere StringGrids die editierbar seien sollen. Aer nich, wenn ich in das Feld klicke sondern wenn ich in das feld klicke und dan F2 drücke.
Einfach mal in den Options des StringGrid goEditing auf true setzen.
  Mit Zitat antworten Zitat
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#3

Re: Quellcode Frage zu StringGrids und Logik

  Alt 23. Jan 2005, 12:16
Ja auf die Idee wär ich ja auch schon gekommen, wenn das so funktionieren sollte. Solls aber nich. Das soll verhindern, dass da son Dau kommt und irgendwo hinklickt und was verändert was er gar nich ändern will.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Quellcode Frage zu StringGrids und Logik

  Alt 23. Jan 2005, 12:22
Zitat von Barret:
Ja auf die Idee wär ich ja auch schon gekommen, wenn das so funktionieren sollte. Solls aber nich. Das soll verhindern, dass da son Dau kommt und irgendwo hinklickt und was verändert was er gar nich ändern will.
Er müsste dafür einen Doppelklick machen. Und das ist genau das Verhalten, das er aus dem Explorer und allen anderen Programmen kennt: Einfach klicken selektieren, Doppelklick/F2 editieren.
  Mit Zitat antworten Zitat
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#5

Re: Quellcode Frage zu StringGrids und Logik

  Alt 23. Jan 2005, 13:37
ja... Ich weiss worauf du hinauswillst. Aber ich würd trotzdem erst mal geklärt haben warum das so nicht funktioniert. Irgendwo muss doch da ein Fehler sein.

Wenn das noch irgendwie relewand is, die StringGrids sind auf einem TaSheet verteilt.

So wie ich das geplant hab wär das schon ein bissel professioneller oder nich??? Auserdem hab ich für das Programm noch ein Jahr Zeit. Das wird eine Simulation für die Berufsschule die jeder im dritten Lehrjahr abgeben muss. Nur für den den es interressiert natürlich.
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:41 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