Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   ich hab eine art Rätsel (.txt wird zweimal angezeigt) (https://www.delphipraxis.net/176037-ich-hab-eine-art-raetsel-txt-wird-zweimal-angezeigt.html)

Finki 8. Aug 2013 06:55

ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Hey ich sitz jetzt schon zwei tage an dem bug und ich komm nicht drauf (ist auch eine sache wo mir das internet nicht helfen kann)

und zwar gibt es den button btnSave und über den kann man eine Memo speichern, das problem ist das die erstellte datei am beispiel vorgegebenem Speichername ist text ausgewähltes dateiformat ist Text(*.txt) dann heist die datei im explorer nachher Text.txt.txt. warum

ist die unit für das MainFrame

Delphi-Quellcode:
unit MainFrame;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, StdCtrls, Buttons, ComCtrls, Library_U, types;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton; //button zum probieren
    Edit1: TEdit;    //Edit Feld zum sachen testen
    Edit2: TEdit;    //Edit Feld zum sachen testen
    Image1: TImage;
    btnNew: TSpeedButton;
    btnOpen: TSpeedButton;
    btnSave: TSpeedButton;
    btnSaveAs: TSpeedButton;
    btnDrucken: TSpeedButton;
    btnFormular: TSpeedButton;
    Memo1: TMemo;
    Aktuelloffen: TMemo;
    Memo3: TMemo;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    btnExit: TSpeedButton;
    StatusBar: TStatusBar;
    TabCon: TTabControl;
    TBar: TToolBar;
    procedure btnExitClick(Sender: TObject);
    procedure btnFormularClick(Sender: TObject);
    procedure btnNewClick(Sender: TObject);
    procedure btnOpenClick(Sender: TObject);
    procedure btnSaveAsClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormChangeBounds(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
      MousePos: TPoint; var Handled: Boolean);
    procedure Memo1Change(Sender: TObject);
    procedure TabConChange(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

  //INTEGER
  btnbreit : integer;
  btnhoch : integer;
  tabindex01 : integer;

  //BOOLEAN
  change : boolean;            // change gibt an ob der Text nach dem Speichern noch bearbeitet wurde
  save01 : boolean;

  //STRING
  savepath : string;           // savepath ist eine zwischen Variable und den save Pfad abzuspeichern
  hist : string;               // hist ist die variable die gebraucht wird um eine "History" also die letzte offene Datei zu begin anzuzeigen :D


implementation
uses
  FormularFrame;

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin

  btnbreit:=70;
  btnhoch:=62;
  change:=true;
  save01:=true;

   //     Memo3

   if FileExists('history')=true then
   begin
     Memo3.Lines.Delete(0);
     Memo3.Lines.LoadFromFile('history');
     hist:=Memo3.Lines[0] + '.txt';
     Edit1.Text:=hist;   // Controlle
   end;

   //     Memo1

   if FileExists(hist)=true then
   begin
     Memo1.Lines.LoadFromFile(hist);
   end;
   Memo1.Focused;

   //     TabCon

   TabCon.SetBounds(0,0,Form1.Width,42+TBar.Height);

   //     btnNew

   btnNew.SetBounds(0,0,btnbreit,btnhoch);
   btnNew.Font.Size:=09;
   btnNew.Font.Name:='Calibri';

   //     btnOpen

   btnOpen.SetBounds(btnNew.BoundsRect.Right+5,0,btnbreit,btnhoch);
   btnOpen.Font.Size:=09;
   btnOpen.Font.Name:='Calibri';

   //     btnSave

   btnSave.SetBounds(btnOpen.BoundsRect.Right+5,0,btnbreit,btnhoch);
   btnSave.Font.Size:=09;
   btnSave.Font.Name:='Calibri';

   //     btnSaveAs

   btnSaveAs.SetBounds(btnSave.BoundsRect.Right+5,0,btnbreit,btnhoch);
   btnSaveAs.Font.Size:=08;
   btnSaveAs.Caption:='Sichern Unter';
   btnSaveAs.Font.Name:='Calibri';

   //     btnDrucken

   btnFormat(btnDrucken,btnSaveAs.BoundsRect.Right+5,0,btnbreit,btnhoch,09,'Calibri',true);

   //     btnFormular

   btnFormat(btnFormular,0,0,btnbreit,btnhoch,09,'Calibri',false);

   //     btnExit

   btnFormat(btnExit,TBar.Width,0,btnbreit,btnhoch,09,'Calibri',true);
   btnExit.Caption:='Schließen';

   //     StatusBar
   if FileExists(hist)=true then
   begin
     StatusBar.Panels.Items[0].Text:=hist;
   end;


end;


procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  tabindex01:=TabCon.TabIndex;

  If (TabCon.TabIndex<2) then
  begin

    TabCon.TabIndex:=tabindex01+1;

  end;

end;

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  tabindex01:=TabCon.TabIndex;

  If (TabCon.TabIndex>0) then
  begin

    TabCon.TabIndex:=tabindex01-1;

  end;
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  change:=true;
  button1.Caption:=booltostr(change); // TEST :D :D :D :D :D
end;

procedure TForm1.FormChangeBounds(Sender: TObject);
begin

  TabCon.SetBounds(0,0,Form1.Width,42+TBar.Height);

end;


//   SICHERN

//btnSave
procedure TForm1.btnSaveClick(Sender: TObject);
begin

  if save01=true then
  begin
  Save(btnSave);
  end
  else
  begin
      Memo1.Lines.SaveToFile(savepath);
  end;

  Aktuelloffen.Lines.Delete(0);
  Aktuelloffen.Lines.Add('1');
  Aktuelloffen.Lines.Text := SysToUTF8(savepath);
  Aktuelloffen.Lines.SaveToFile('History');

end;

//    ÖFFNEN


//btnOpen
procedure TForm1.btnOpenClick(Sender: TObject);
var
  open : string;
begin
  If OpenDialog.Execute then
  begin
  open:= OpenDialog.FileName;
  Memo1.Lines.LoadFromFile(open);


  Aktuelloffen.Lines.Delete(0);
  Aktuelloffen.Lines.Add('1');
  Aktuelloffen.Lines.Text := SysToUTF8(open);
  Aktuelloffen.Lines.SaveToFile('History');


  change:=false;
  end;
end;

procedure TForm1.btnExitClick(Sender: TObject);
begin
  Close;
end;

procedure TForm1.btnFormularClick(Sender: TObject);
begin
Form2 := TForm2.Create(Self);
Form2.ShowOnTop;
//Form1.Enabled:=false;

end;

procedure TForm1.btnNewClick(Sender: TObject);
begin
  Memo1.Lines.Clear;
end;

procedure TForm1.btnSaveAsClick(Sender: TObject);
begin
  Save(btnSaveAs);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  textb : boolean;
  texts : string;
  long, long01, i : integer;
begin
  long:= length(Edit1.Text);
  textb:=false;
  i:=1;
  repeat
    begin
        texts:=copy(Edit1.Text,long,i);
        long:= long-1;
        i:=i+1;
        if texts[1]='\' then
        begin
          long01:= length(texts);
          texts:=copy(texts,2,long01-1);

          textb:=true;
        end;
    end;
  until textb=true;
  Edit2.Text:=texts;
end;


//   REGISTER


procedure TForm1.TabConChange(Sender: TObject);
begin
  case TabCon.TabIndex of

    0: begin

      btnNew.Visible:=true;
      btnOpen.Visible:=true;
      btnSave.Visible:=true;
      btnSaveAs.Visible:=true;
      btnDrucken.Visible:=true;

      btnFormular.Visible:=false;

      btnExit.SetBounds(TBar.Width,0,btnbreit,btnhoch);

       end;

    1: begin

      btnNew.Visible:=false;
      btnOpen.Visible:=false;
      btnSave.Visible:=false;
      btnSaveAs.Visible:=false;
      btnDrucken.Visible:=false;

      btnFormular.Visible:=true;

      btnFormular.SetBounds(0,0,btnbreit,btnhoch);
      btnExit.SetBounds(TBar.Width,0,btnbreit,btnhoch);

       end;

    2: begin

     { btnNew.
      btnOpen
      btnSave
      btnSaveAs
      btnDrucken

      btnFormular
      btnNewFormular
      btnExit }


       end;

  end;
end;

end.
und hier die Library Unit

Delphi-Quellcode:
unit Library_U;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Buttons, Dialogs;

procedure btnFormat(AButton: TSpeedButton;
  posx, posy, btnbreite, btnhoehe: integer; sizeint : integer; fontname : string; sichtbar: Boolean);
procedure Save(Sender: TObject);

implementation

uses
  MainFrame;

procedure btnFormat(AButton: TSpeedButton;
  posx, posy, btnbreite, btnhoehe: integer; sizeint : integer; fontname : string; sichtbar: Boolean);
begin
  if AButton <> nil then
  begin
    AButton.SetBounds(posx,posy,btnbreite,btnhoehe);
    AButton.Caption := copy(AButton.Name, 4, MaxInt);
    AButton.Visible := sichtbar;
    AButton.Font.Size:=sizeint;
    AButton.Font.Name:=fontname;
  end;
end;

procedure Save(Sender: TObject);
var
  textb : boolean;
  texts : string;
  long, long01, i : integer;
begin
  case Form1.SaveDialog.FilterIndex of

    2: begin
        if Form1.SaveDialog.Execute then
        begin
        Form1.Memo1.Lines.SaveToFile(Form1.SaveDialog.Filename + '.docx');
        savepath := Form1.SaveDialog.FileName;
          long:= length(Form1.SaveDialog.FileName);
          textb:=false;
          i:=1;
          repeat
            begin
                texts:=copy(Form1.SaveDialog.FileName,long,i);
                long:= long-1;
                i:=i+1;
                if texts[1]='\' then
                begin
                  long01:= length(texts);
                  texts:=copy(texts,2,long01-1);
                  textb:=true;
                end;
            end;
          until textb=true;
          Form1.Caption:=texts;
          Form1.StatusBar.Panels.Items[0].Text:=Form1.SaveDialog.Filename + '.docx';
          texts:='';
          change:=false;
          save01:=false;
       end;

       end;

    1: begin
        if Form1.SaveDialog.Execute then
        begin
        Form1.Memo1.Lines.SaveToFile(Form1.SaveDialog.Filename + '.txt');
        savepath := Form1.SaveDialog.FileName;
          long:= length(Form1.SaveDialog.FileName);
          textb:=false;
          i:=1;
          repeat
            begin
                texts:=copy(Form1.SaveDialog.FileName,long,i);
                long:= long-1;
                i:=i+1;
                if texts[1]='\' then
                begin
                  long01:= length(texts);
                  texts:=copy(texts,2,long01-1);

                  textb:=true;
                end;
            end;
          until textb=true;
          Form1.Caption:=texts;
          Form1.StatusBar.Panels.Items[0].Text:=Form1.SaveDialog.Filename+ '.txt';
          texts:='';
          change:=false;
          save01:=false;
          Form1.Button1.Caption:=booltostr(change); // TEST :D : D: D: D: D: D: D: D: D

        end;

       end;

  end;
end;

end.
ich bin euch für eure hilfe echt dankbar :roll:

bcvs 8. Aug 2013 07:10

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Hier hängst du doch selbst explizit ein .txt an den Dateinamen ran:

Delphi-Quellcode:
Form1.Memo1.Lines.SaveToFile(Form1.SaveDialog.Filename + '.txt');

Finki 8. Aug 2013 07:38

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Zitat:

Zitat von bcvs (Beitrag 1223964)
Hier hängst du doch selbst explizit ein .txt an den Dateinamen ran:

Delphi-Quellcode:
Form1.Memo1.Lines.SaveToFile(Form1.SaveDialog.Filename + '.txt');

ja aber des ist weil man in des speichereingabe feld nur hallo rein schreibt und nicht hallo.txt des wegen brauch ich doch des .txt (oder?)

@alle ich sollte vielleicht noch sagen das ich grade win 7 (ich meine fast sicher 64bit) benutze

vagtler 8. Aug 2013 07:42

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Dann schau Dir doch einfach den Inhalt der FileName-Eigenschaft im Debugger an. Was siehst Du?

Und wenn Du verschiedene Fälle wie z.B. eine nicht angegebene Extension unterschiedlich behandeln willst, dann musst Du das halt programmieren. :wall:

Sir Rufo 8. Aug 2013 07:48

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Statt die Erweiterung stumpf dranzuhängen nimmt man auch Delphi-Referenz durchsuchenChangeFileExtension

Delphi-Quellcode:

MyFilename := ChangeFileExtension( MyFilename, '.txt' );
Jetzt hat der Dateiname gesichert die Erweiterung ".txt", egal ob da vorher eine andere Erweiterung war oder nicht ;)

Finki 8. Aug 2013 07:50

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Zitat:

Zitat von vagtler (Beitrag 1223967)
Und wenn Du verschiedene Fälle wie z.B. eine nicht angegebene Extension unterschiedlich behandeln willst, dann musst Du das halt programmieren. :wall:

Reicht das nicht wenn ich des im Objekt inspektor bei dem Savedialog bei filter angebe????

Finki 8. Aug 2013 07:51

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Zitat:

Zitat von Sir Rufo (Beitrag 1223968)
Statt die Erweiterung stumpf dranzuhängen nimmt man auch Delphi-Referenz durchsuchenChangeFileExtension

Delphi-Quellcode:

MyFilename := ChangeFileExtension( MyFilename, '.txt' );
Jetzt hat der Dateiname gesichert die Erweiterung ".txt", egal ob da vorher eine andere Erweiterung war oder nicht ;)


:thumb: hammer :thumb:

vielen vielen dank

v2afrank 8. Aug 2013 09:31

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Obwohl genau für Dein Problem genau die Eigenschaft DefaultExt des Savedialogs da ist

Finki 8. Aug 2013 09:43

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
also sieht des dann zum beispiel so aus
Delphi-Quellcode:
 saveDialog.DefaultExt := 'txt';
vielen dank dafür

Bjoerk 8. Aug 2013 13:40

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
BTW, für deinen Algo in Button1Click gibt’s ExtractFileName (könnte man dann auch gleich mit Edit1Change verknüpfen?)

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  Edit2.Text := ExtractFileName(Edit1.Text);
end;

Finki 8. Aug 2013 17:47

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Danke, aber der Button ist ein Witz Button der ist für nix da

Finki 9. Aug 2013 12:26

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
(das ist komisch)

bei Windows XP funktioniert das Speichern einwandfrei, nur bei Windows 7 macht es (die SaveFunktion) zusätzlich noch ein .txt dran.

p80286 9. Aug 2013 13:25

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
Also Du hast da ein Rätsel?

Ich könnte mir denken wie mein Sourcecode aussehen würde wenn ich an Deiner Stelle gewesen wäre.
War ich aber nicht!
Und wenn ich in Deinem Code zweimal ein
Delphi-Quellcode:
.SavetoFile
finde, dann kann ich nur mit den Schulern zucken, denn Hellsehen kann ich nicht.

Also zeig noch einmal was Du hast,(lies es Dir vorher noch einmal durch)
und dann sehen wir weiter.

Gruß
K-H

Finki 9. Aug 2013 15:59

AW: ich hab eine art Rätsel (.txt wird zweimal angezeigt)
 
es gibt einen button, btnSave, über den kann man eine Memo speichern, das Problem ist, das die erstellte Datei, bei zum beispiel vorgegebenem Speichername 'Text', das ausgewähltes dateiformat ist Text(*.txt), dann heißt die datei im WINDOWS Explorer nachher Text.txt.txt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 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