![]() |
Quellcode Frage zu StringGrids und Logik
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:
Zu erläuterun: Edt = Editfeld & SG = StringGrid
//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; jetzt mal der neue Code:
Code:
Die procedure:
//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;
Code:
Die IntegerWerte die Ihr öfter seht sind global. Hir noch mal kurz zur Verdeutlichung:
procedure TFFVConfig.SGGlueckKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin SGParameterKeyDown(TStringGrid(Sender), Key, Shift); end;
Code:
Funktioniert übergreifend für alle StringGrids.
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 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. |
Re: Quellcode Frage zu StringGrids und Logik
Zitat:
|
Re: Quellcode Frage zu StringGrids und Logik
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.
|
Re: Quellcode Frage zu StringGrids und Logik
Zitat:
|
Re: Quellcode Frage zu StringGrids und Logik
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 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