Einzelnen Beitrag anzeigen

Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Suchen und ersetzen

  Alt 2. Jul 2016, 21:01
Zitat von Uwe Raabe:
Wie berücksichtigt das Tool denn die aktuell im Editor geöffneten und eventuell gegenüber der Version auf Platte geänderten Dateien?
Gar nicht. Daran habe ich gar nicht gedacht. Man sollte also vorher alles speichern.

EDIT:

Hier mal der Quelltext, ist ja nicht viel. Wer will, kann ihn ruhig verbessern:

Delphi-Quellcode:
unit Unit_Haupt;

interface

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

type
  TForm_GUI = class(TForm)
    Edit_Suchen: TLabeledEdit;
    Edit_Ersetzen: TLabeledEdit;
    Label_Überschrift: TLabel;
    ListBox_Dateien: TListBox;
    Button_Starten: TButton;
    Button_Hinzufügen: TButton;
    Button_Löschen: TButton;
    OpenDialog: TOpenDialog;
    Label_Verarbeite: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button_HinzufügenClick(Sender: TObject);
    procedure ListBox_DateienDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure Button_LöschenClick(Sender: TObject);
    procedure Button_StartenClick(Sender: TObject);
  private
    { Private-Deklarationen }
    flbHorzScrollWidth: Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form_GUI: TForm_GUI;
  Projektpfad: String;

const
  Pfadkürzel = '$PROJECT';

implementation

{$R *.dfm}

////////////////////
//Initialisierung://
////////////////////

procedure TForm_GUI.FormCreate(Sender: TObject);
var
  Datei: String;
  Inhalt: TStringList;
  Stelle, i: Integer;
begin
  if ParamCount > 0 then
  begin
    Datei := ParamStr(1);
    if ExtractFileExt(Datei) = '.dprojthen Delete(Datei, Length(Datei) -1, 2); //Lösche "oj" aus "dproj", um "dpr" zu erhalten.
    if ExtractFileExt(Datei) = '.dprthen //Wenn nicht .dpr, dann verwerfen.
    begin
      Inhalt := TStringList.Create;
      try
        Inhalt.LoadFromFile(Datei);
        Stelle := Pos('.pas', Inhalt.Text);
        while Stelle > 0 do
        begin
          for i := Stelle -2 downto 1 do //#39 = '
            if Inhalt.Text[i] = #39 then
            begin
              ListBox_Dateien.Items.Add(Pfadkürzel + '\' + Copy(Inhalt.Text, i +1, Stelle + 3 - i)); //Pfade mit Pfadkürzel abkürzen.
              Break;
            end;
          Stelle := Pos('.pas', Inhalt.Text, Stelle +1);
        end;
      finally
        Inhalt.Free;
      end;
    end;
    Projektpfad := ExtractFilePath(Datei);
  end;
end;

////////////
//Buttons://
////////////

procedure TForm_GUI.Button_HinzufügenClick(Sender: TObject);
var
  i: Integer;
begin
  if OpenDialog.Execute then
  begin
    if Projektpfad = 'then ListBox_Dateien.Items.AddStrings(OpenDialog.Files)
    else
      for i := 0 to OpenDialog.Files.Count -1 do
        ListBox_Dateien.Items.Add(StringReplace(OpenDialog.Files[i], Projektpfad, Pfadkürzel, []));
      //Wenn sich die Datei unterhalb des Projektverzeichnisses befindet, wird dieses verkürzt dargestellt.
  end;
end;

procedure TForm_GUI.Button_LöschenClick(Sender: TObject);
begin
  Listbox_Dateien.DeleteSelected;
end;

procedure TForm_GUI.Button_StartenClick(Sender: TObject);
var
  i: Integer;
  Inhalt: TStringList;
  Datei: String;
begin
  Label_Verarbeite.Visible := true;
  Application.ProcessMessages;

  Inhalt := TStringList.Create;
  try
    for i := 0 to ListBox_Dateien.Items.Count -1 do
    begin
      Datei := StringReplace(ListBox_Dateien.Items[i], Pfadkürzel, Projektpfad, []); //Pfadkürzel durch richtigen Pfad ersetzen.
      Inhalt.LoadFromFile(Datei);
      Inhalt.Text := StringReplace(Inhalt.Text, Edit_Suchen.Text, Edit_Ersetzen.Text, [rfReplaceAll]);
      Inhalt.SaveToFile(Datei);
    end;
  finally
    Inhalt.Free;
  end;

  Label_Verarbeite.Visible := false;
  Application.ProcessMessages;

  ShowMessage('Alles ersetzt!');
end;

//////////////
//Sonstiges://
//////////////

//Für die horizontale Scrollbox:
procedure TForm_GUI.ListBox_DateienDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
 Len: Integer;
 NewText: String;
begin
  NewText := Listbox_Dateien.Items[Index];

  with Listbox_Dateien.Canvas do
  begin
    FillRect(Rect);
    TextOut(Rect.Left +1, Rect.Top, NewText);
    Len := TextWidth(NewText) + Rect.Left + 10;
    if Len > flbHorzScrollWidth then
    begin
      flbHorzScrollWidth := Len;
      Listbox_Dateien.Perform(LB_SETHORIZONTALEXTENT, flbHorzScrollWidth, 0);
    end;
  end;
end;

end.
Angehängte Dateien
Dateityp: zip Quelltext.zip (60,6 KB, 9x aufgerufen)

Geändert von Benedikt Magnus ( 2. Jul 2016 um 21:10 Uhr)
  Mit Zitat antworten Zitat