AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi StringGrid aus Form2 in Form1 abspeichern
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid aus Form2 in Form1 abspeichern

Ein Thema von strom · begonnen am 6. Sep 2016 · letzter Beitrag vom 7. Sep 2016
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#11

AW: StringGrid aus Form2 in Form1 abspeichern

  Alt 6. Sep 2016, 16:07
Hallo,

möchte gerne, wenn das Hauptformular(Form1) beendet wird, dass das StringGrid von Form2 abgespeichert wird.

Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
   DeleteFile(ExtractFilePath(ParamStr(0)) + 'Ereignisprotokoll.dat');
  SaveStringGrid(Form2.StringGrid1, ExtractFilePath(ParamStr(0)) + 'Ereignisprotokoll.dat');
end;
Es scheint sich um einen typischen Fall von das eine sagen, etwas anderes machen zu handeln.
Ausgehend vom Sourcecode soll es wohl heißen
"Das Stringgrid auf Form2 (Form2.Stringgrid1)(?) soll gespeichert werden, wenn Form1 geschlossen wird."

@Strom
Und wo ist das Problem?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: StringGrid aus Form2 in Form1 abspeichern

  Alt 6. Sep 2016, 21:03
Hallo,
das Problem ist, dass der Thread-Ersteller (TE) noch ziemlich neu in Delphi ist.
Das Konzept der Units und des uses muss man erst mal verstehen.

Und das meine ich Ernst.

Für jemand, der seit 10 Jahren mit Pascal entwickelt, ist das sowas von trivial.

Aber:
Ich habe mal einen ASP.Net-Kurs mitgemacht,
da gab es sowas ähnliches wie x-Datei und y-Datei und hängen zusammen,
das habe ich leider (oder zum Glück) wieder vergessen.

Bitte denkt an Eure Anfänge zurück und denkt "einfach" (TE, nicht bös gemeint).
Heiko

Geändert von hoika ( 7. Sep 2016 um 07:24 Uhr)
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#13

AW: StringGrid aus Form2 in Form1 abspeichern

  Alt 6. Sep 2016, 21:14
Der TE muss aber auch entgegenkommen und vernünftige Fragen stellen. Das ist doch drin =)

Er scheint wohl von der von mir verlinkten Webseite den Code kopiert zu haben. Das ist doch schonmal was.
Die Prozeduren zum Speichern und Laden hat er demnach ja.
  Mit Zitat antworten Zitat
strom

Registriert seit: 23. Aug 2008
Ort: Keine Ergebnisse gefunden
290 Beiträge
 
#14

AW: StringGrid aus Form2 in Form1 abspeichern

  Alt 7. Sep 2016, 07:42
Hallo,

jetzt nochmal zurück zu meiner Frage.
Habe eine Unit Ereignisprotokoll mit dem Type "StringGrid1: TStringGrid"

Habe aber auch ein Unit Hauptformular, wenn ich jetzt zum Beispiel über das "MainMenu1 Hauptformular" im StringGrid was suchen möchte!
Wie binde ich TStrinGrid im Hauptformular mit ein???


Richtig wieder ein Quelltext aus Delphi Treff
Code:
function SeekRecord(Grid: TStringGrid; ColOrder: array of integer;
  StrList: array of String): Boolean;
var
  I, J : Integer;
begin
  result := false;
  for I := 1 to Grid.RowCount - 1 Do
  begin
    for J := low(ColOrder) to high(ColOrder) do
    begin
      if (Grid.Cells[ColOrder[J],I]=StrList[J]) then
         result := true
      else
         result := false;
      if result = false then break;
    end;
    if result = true then break;
  end;

  if result = true then
     Grid.Row := I
  else
     ShowMessage('Datensatz nicht gefunden!' +#13#13+ 'Record not Found!');
end;
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  //Suche Zeile nach Column 0 mit Suchbegriff
  SeekRecord(Grid,[0],['Suchbegriff']);
  //Suche Zeile nach Column 0 und 1 mit Suchbegriffen 1 und 2
  SeekRecord(Grid,[0,1],['Suchbegriff1','Suchbegriff2']);
  //Suche Zeile nach Column 1, 5 und 2 mit Suchbegriffen 1, 2 und 3
  SeekRecord(Grid,[1,5,2],['Suchbegriff1','Suchbegriff2','Suchbegriff3']);
  //usw.
end;

Delphi-Quellcode:
unit Ereignisprotokoll;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls,
  Vcl.Grids;

type
  TForm2 = class(TForm)
    StringGrid1: TStringGrid;
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
implementation

{$R *.dfm}

uses Hauptformular;

procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
var
 f: TextFile;
 i, k: Integer;
begin
  AssignFile(f, FileName);
  Rewrite(f);
 with StringGrid do
  begin
   Writeln(f, ColCount);
   Writeln(f, RowCount);
    for i := 0 to ColCount - 1 do
      for k := 0 to RowCount - 1 do
    Writeln(F, Trim(Cells[i, k]));
  end;
  CloseFile(F);
end;

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
var
 f: TextFile;
 iTmp,i,k: Integer;
 strTemp: String;
begin
  AssignFile(f, FileName);
  Reset(f);
 with StringGrid do
  begin
    Readln(f, iTmp);
    ColCount := iTmp;
    Readln(f, iTmp);
    RowCount := iTmp;
     for i := 0 to ColCount - 1 do
      for k := 0 to RowCount - 1 do
      begin
        Readln(f, strTemp);
        Cells[i, k] := strTemp;
      end;
  end;
  CloseFile(f);
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
 Form2.Visible := false;
 Form1.Bearbeiten1.Enabled := false;
end;

procedure TForm2.FormCreate(Sender: TObject);
var
 i, j :integer;
begin
 Stringgrid1.ColWidths[0] := 5;
 Stringgrid1.ColWidths[1] := 25;
 Stringgrid1.ColWidths[2] := 70;
 Stringgrid1.ColWidths[3] := 70;
 Stringgrid1.ColWidths[4] := 100;
 StringGrid1.ColWidths[5] := 1000;
 StringGrid1.Cells [1,0] := ' ';
 StringGrid1.Cells [2,0] := 'Date';
 StringGrid1.Cells [3,0] := 'Time';
 StringGrid1.Cells [4,0] := 'ID';
 StringGrid1.Cells [5,0] := 'Event';
 for i := StringGrid1.FixedCols to StringGrid1.ColCount - 1 do
  begin
   for j :=StringGrid1.FixedRows to StringGrid1.RowCount - 1 do
    begin
     StringGrid1.Cells[i,j] := '';
    end;
   end;
    LoadStringGrid(StringGrid1, ExtractFilePath(ParamStr(0)) + 'Ereignisprotokoll.dat');
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
    DeleteFile(ExtractFilePath(ParamStr(0)) + 'Ereignisprotokoll.dat');
     SaveStringGrid(StringGrid1, ExtractFilePath(ParamStr(0)) + 'Ereignisprotokoll.dat');
end;

end
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#15

AW: StringGrid aus Form2 in Form1 abspeichern

  Alt 7. Sep 2016, 08:54
Füg in der Ereignisprotokoll-Unit diese Zeile vor der implementation-Zeile ein:
procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#16

AW: StringGrid aus Form2 in Form1 abspeichern

  Alt 7. Sep 2016, 12:13
Bischen OT aber:

Delphi-Quellcode:
if result = true then // Info 1
 Grid.Row := I
else
 ShowMessage('Datensatz nicht gefunden!' +#13#13+ 'Record not Found!'); // Info 2
Gewöhn dir am besten gleich zu Anfang ab, auf True oder False zu vergleichen (Info 1).
Schreib lieber: "if Result then" und "if not Result then".

Benutz besser "sLineBreak" statt #13#13 bzw #13#10.

Und immer schön auf Groß- und Kleinschreibung achten. Delphi ist da relativ entspannt. Aber solltest du später mal zu einer anderen Sprache wechseln oder sie nur kurzeitig verwenden, wird nichts funktionieren, wenn du die Groß- und Kleinschreibung nicht beachtest.

Die Deklaration von sLineBreak sieht so aus (ist nur eine Info und soll nicht kopiert werden oder so):
Delphi-Quellcode:
const
 sLineBreak = {$IFDEF POSIX} AnsiChar(#10) {$ENDIF}
 {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF};
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 16:51 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