Autor Beitrag
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Do 28.01.10 14:28 
Wir sollten vielleicht warten bis er sich meldet!? dann wissen wir genaueres 8)
Sein Buttonclick gibt dies aber so wie er da steht, nicht her. So wie ich es sehe hatt er nur die Reienfolge der Abfrage Falsch. Zum schluss kommt bei ihm, sonst evtl. die 2.Meldung nach der ersten, und dies ist ja sicherlich nicht was er will!

Warten wir also biss er sich meldet!?
Befor durch missverständnisse ein Disput ausbricht :wink:
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Do 28.01.10 17:49 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DeleteFile('Anzahl.xml');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  XMLParser: TXMLParser;
  XMLAttribut: TXMLAttribute;
  WieOftGeklickt: Integer;
begin
  WieOftGeklickt := 0;
  try
    XMLParser := TXMLParser.Create('Anzahl.xml');
    try
      XMLAttribut := XML.Parser.GetAttributeByXPath('/settings/@count');
      try
        WieOftGeklickt := StrToIntDef(XMLAttribut.Value);
      finally
        XMLAttribut.Free;
      end;
    finally
      XMLParser.Free;
    end;
  except
  end;

  case WieOftGeklickt of
    0// ...
    1// ...
    else ShowMessage('Zu oft geklickt!');
  end;

  Inc(WieOftGeklickt);

  try
    XMLParser := TXMLParser.Create('Anzahl.xml');
    try
      XMLAttribut := XML.Parser.GetAttributeByXPath('/settings/@count');
      try
        XMLAttribut.Value := WieOftGeklickt;
      finally
        XMLAttribut.Free;
      end;
      XMLParser.Save;
    finally
      XMLParser.Free;
    end;
  except
  end;

end;


SCNR :D
fritz_07 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Do 28.01.10 22:29 
Hallo an alle,

danke für die zahlreiche Unterstützung.

Korrekt erfast hat es elundril

Zitat:
falsch, er will zwei unterschiedliche prozeduren je nach buttonklick. beim ersten klick soll die prozedur1 ausgeführt werden, beim zweiten mal klicken prozedur2.

lg elundril



Es ist jetzt erst mal unwichtig welche von beiden Prozeduren zuerst gestartet wird, es dreht sich um die Auswertung vom dem Klick.
An die Verarbeitung von Tag, oder Sender hatte ich auch schon gedacht.
Das Tag wird ja eindeutig einem Button zugewiesen (Tag0 = Button1, Tag1 = Button2, usw.),würde in meinem Fall nichts bringen.
Dann wäre noch das Verarbeiten des Sender's. Muß ich mir erst noch genauer durchlesen.

Ich hätte an so etwas gedacht.
Eine Variable z.B. klick : Integer; und in dieser wird dann der erste Klick gespeichert.

Gruß fritz_07
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 28.01.10 22:43 
user profile iconfritz_07 hat folgendes geschrieben Zum zitierten Posting springen:
An die Verarbeitung von Tag, oder Sender hatte ich auch schon gedacht.
Das Tag wird ja eindeutig einem Button zugewiesen (Tag0 = Button1, Tag1 = Button2, usw.),würde in meinem Fall nichts bringen.
Doch, denn beim ersten Klick ist Tag z.B. 0, daraufhin führst du die Aktion für den ersten Klick durch und setzt Tag auf 1. Beim nächsten Klick siehst du dann Tag ist 1, also führst du die Aktion für den zweiten Klick durch.

Analog geht das eben mit einem Boolean-Wert unter private oder einem Integer-Wert dort.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 28.01.10 22:53 
Ansonsten kann man auch einfach zwei Buttons übereinander setzen und den oberen nach dem ersten klick auf visible=false stellen. Ist vielleicht nicht die sauberste Lösung, aber funktioniert und ist einfach. :)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 28.01.10 22:55 
:shock: wollen wir nur funktionierende Lösungen bieten oder auch gute?

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 28.01.10 23:03 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
:shock: wollen wir nur funktionierende Lösungen bieten oder auch gute?

Na ich denke am besten alle oder? ;)

So ginge es auch, klick1 ist im Objektinspektor gesetzt:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure klick1(Sender: TObject);
    procedure klick2(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.klick1(Sender: TObject);
begin
  ShowMessage('Eins');
  button1.OnClick := klick2;
end;

procedure TForm1.klick2(Sender: TObject);
begin
  ShowMessage('Zwei');
end;


wobei ich mir nicht 100% sicher bin ob das ändern des Eventhandlers im Handler selbst legal ist, aber scheint zu funzen.

Btw: wenn Tag schon gesetzt ist, man aber weitere Propertys an eine Komponente hängen möchte, kann man diese entweder ableiten (was den Nachteil hat dass man sie zur Entwurfszeit nicht verwenden kann, es sei denn man installiert sie auch ordnungsgemäß), oder man hängt an Tag einen Record an. Dann kann man in Tag so viele Daten reinzwängen wie man will. Dazu kann man Tag als Pointer verwenden.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Fr 29.01.10 19:05 
Hi, ich misch mich noch mal ein, in der Hoffnung das ich was dazu lerne! :wink:
user profile iconelundril
Zitat:
wollen wir nur funktionierende Lösungen bieten oder auch gute?


Meine Frage dazu. Was ist zur Laufzeit? Welchen Zustand hatt der Button gerade?
(Erkennbar doch nur am Ergebnis oder?)
Ist nicht das Ergebnis der Prozeduren wichtiger?
Kleines praktisches Beispiel aus dem Leben :)
Du kommst in Dein Zimmer, drückst auf den Lichtschalter, nix passiert. Frage: Welchen Zustand hat der Schalter
?

Sollte man nicht lieber, wegen der Übersichtlichkeit im Programmcode, in den Prozedureergebnis überprüfen welcher Zustand ist?
Was ist, wenn noch eine 3. oder 4. Prozedur rein soll, als Beispiel.
Einfach den Tag erhöhen oder zusätzliche Clickprocedures schreiben, um das event des Buttons zu ändern!?
Ich weis also nicht, welches die gute Lösung ist!
Aber ich gehe davon aus, das mein Denkansatz falsch ist :roll:

Korregiert mich wenn ich Falsch bin!
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
fritz_07 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Sa 30.01.10 00:01 
Hallo,

Ich habe den Quellcode von Tilman mal ausprobiert und es hat nicht funktioniert.
Ich kann aber auch nicht sagen,wo der Fehler liegt.


Könnte man so etwas als Zähler verwenden?
ausblenden Delphi-Quelltext
1:
2:
 with (Sender as TButton) do
            Tag := Tag + 1;



Alf, dein Denkansatz ist nicht falsch,ich würde es auch so sehen.


Gruß fritz_07
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.01.10 00:13 
Das funktioniert zwar, aber das with solltest du dir gar nicht erst angewöhnen. Spätestens wenn du das erste Mal stundenlang einen dadurch verursachten Fehler gejagt hast, wirst du es bereuen, wenn du das oft einsetzt...
ausblenden Delphi-Quelltext
1:
2:
  if Sender is TButton then
    TButton(Sender).Tag := TButton(Sender).Tag + 1;
Denn um bei deinem Beispiel zu bleiben:
Wenn man das with übersieht, dann würde man denken man würde das Tag des Formulars ansprechen. Und wundert sich dann, dass sich das gar nicht ändert.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Sa 30.01.10 07:59 
user profile iconfritz_07
Zitat:
Alf, dein Denkansatz ist nicht falsch,ich würde es auch so sehen.

Halt, halt, halt, nicht so schnell! Weil Du mit den Button.Tag nicht bescheid weisst, heist es noch lange nicht das es nicht geht!
Alles hat seine Vor- und Nachteile!

Beispiel 1: die Abfrage über den Button.Tag, hat hier durchaus seine Berechtigung :!:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.Button1Click(Sender: TObject);
begin
      if Button2.Tag < 2 then
         MessageDlg('Du hast die Infos noch nicht gelesen. Bitte klicke Button2', mtInformation, [mbOK], 0)
     else
         MessageDlg('Alle Infos gelesen', mtInformation, [mbOK], 0)

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     case Button2.Tag  of
          0begin
               MessageDlg('Das war der erste Klick',mtInformation, [mbOK], 0);
               Button2.Tag := 1;
             end;
          1begin
               MessageDlg('Das war der zweite Klick',mtInformation, [mbOK], 0);
               Button2.Tag := 2;
             end;
          2begin
               MessageDlg('Nun gibt es keinen mehr',mtInformation, [mbOK], 0);
               Button2.Enabled := false;
             end;
      end;
end;


Grund, Du erzeugst keine globalen Ergebnisse, die Du weiter verwenden willst. Mal so ausgedrückt :wink:

Beispiel 2: Hier könntest Du auch mit Button.Tag arbeiten
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
begin
     if not passwd or (passwdindex < 3then  {if (Button3.Tag = 0) or (i < 3) then}
     begin
         if edit1.Text = '' then exit
         else
         if passwdmd5(Edit1.Text) then
            passwd := true                    {Button3.Tag := 1}
         else
         begin
                                              {if i > 3 then Button3.Tag := 3} 
                                              {inc(i)}
            inc(passwdindex);
            MessageDlg('Falsche Passworteingabe', mtInformation, [mbOK], 0);
         end
     end
     else
     if  passwdindex > 3 then                 {if Button3.Tag > 1 then}
     begin
         MessageDlg('3 falsche Eingaben. Der Login wird gesperrt!'+#10#13+' Melde dich beim Superadmin', mtInformation, [mbOK], 0);
         Button3.Enabled := False;
     end;

end;


HINWEIS: Die Beispiele sollen nur als Vergleich dienen!!!!!
Damit würdest Du aber keine Sicherheit haben ob die Ergebnisse so sind, wie du sie haben willst. Schlimmer noch. Bei komplexeren Proceduren wüsstest Du auch nicht mehr, was wie wo und warum, das so ist!

Es sei, das user profile iconelundril
Zitat:
.... (einmal erstellt, was dann damit passiert ist wurscht)?
damit recht hatt :shock:

Ich habe nicht in Abrede gestellt, das man dies so nicht machen kann. Ich will nur Hinweisen das es nicht gut ist!
Es währe ein schlechtes Forum, wenn man nicht darauf Hinweisen würde! :wink:

Auch auf die Gefahr eines Disput
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!


Zuletzt bearbeitet von ALF am Sa 30.01.10 08:21, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 30.01.10 08:18 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:

Es sei, das user profile iconelundril
Zitat:
.... (einmal erstellt, was dann damit passiert ist wurscht)?
damit recht hatt :shock:

Ich habe nicht in Abrede gestellt, das man dies so nicht machen kann. Ich will nr Hinweisen das es nicht gut ist!


ich hab nie gesagt das es gut ist wenn man das so macht. ;) es war lediglich eine konkrete Lösung auf das Problem das fritz_07 geschildert hat. Weil es ja sein könnte das er den code den er gepostet hat nur als Beispiel sieht und mit unserer Lösung ganz was anderes machen will, so wie zb du in deinen Beispielen gezeigt hast. ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Sa 30.01.10 08:32 
Hi, user profile iconelundril moin.

Gebs dem Coder drum das Du recht hast. :zustimm:
Nur glauben mag ich es nicht :flehan: :zwinker:

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 30.01.10 15:13 
Also ich denke immer noch, dass es doch so am einfachsten wäre, wenn er wirklich nur zwei unterschiedliche Sachen aufgerufen haben möchte:

Erst mal einfach eine Form-Variable deklarieren:
ausblenden Delphi-Quelltext
1:
DurchGang1GleichTrue:boolean;					

Und dann einfach in der Prozedur abfragen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if DurchGang1GleichTrue then
    begin
    Hier macht er das eine
    end
else
    begin
    Und hier mach er dann das andere
    end;
//Und hier dann fürs nächste mal den anderen auswählen:
DurchGang1GleichTrue :=not(DurchGang1GleichTrue );
fritz_07 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Di 02.02.10 23:26 
Hallo,

ich habe mal ein paar Sachen ausprobiert,bin aber noch nicht so richtig glücklich damit.
Hier mal mein Beispiel:
Eigentlich sind es sogar drei Abfragen.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
// Abfrage 1; prüfen ob Pfad eingegeben oder vergessen wurde

     begin

          if  (koned1=''or (koned2=''then                     

                  MessageDlg('Bitte Eingaben überprüfen',mtWarning,[mbRetry],0)
          else
             begin
                  SysUtils.ForceDirectories(koned1);
                  SysUtils.ForceDirectories(koned2);
                  HinweisJ;
             end;
     end;

// Abfrage 2; prüfen,ob Verzeichnisse erstellt wurden
 
     begin

          if not SysUtils.DirectoryExists(Dir2) then    
             begin
                  HinweisN;
             end;
       end;


//Abfrage 3; wird das Formular zum erstellen der Verzeichnisse noch einmal aufgerufen (weshalb auch immer),
//           wird geprüft,ob Verzeichnisse Vorhanden sind,wenn ja Abfrage 1 und 2 überspringen

     begin

          if SysUtils.DirectoryExists(Dir2) then         
             begin
                  HinweisV;
             
             end;
          end;

      end;


Ich habe es auch versucht, über die Button.Tag Abfrage zu lösen,hat aber nicht ganz funktioniert.

Soweit funktioniert es auch,nur das mit dem Überspringen bei der 3.Abfrage noch nicht.
Wie setze ich das in die richtige Reihenfolge?



Gruß fritz_07
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 02.02.10 23:27 
schon mal mit if-then-else-if-then-else-if-then probiert?

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 02.02.10 23:37 
ich alt mich jetzt zurück! :mrgreen:

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Xearox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Mi 03.02.10 14:53 
user profile iconfritz_07 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo

Ich versuche mein Problem mal etwas besser darzustellen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.Button1Click(Sender: TObject);
var koned1, koned2, Dir2 : String;                

begin

 if (koned1=''or (koned2=''then                                      //beim ersten Klick wird diese Abfrage ausgeführt
     MessageDlg('Bitte Eingaben überprüfen',mtWarning,[mbRetry],0)
      else
      begin
      SysUtils.ForceDirectories(koned1);
      SysUtils.ForceDirectories(koned2);
      end;


 

     begin                                      //und diese Abfrage soll erst beim zweiten Klick auf den Button ausgeführt werden                    
      
      if SysUtils.DirectoryExists(Dir2) then
          HinweisV
      end;

end;


Wie kann ich einen Zähler einbauen,der das Klicken des Buttons speichert?



Gruß fritz_07

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt


ausblenden Delphi-Quelltext
1:
2:
3:
4:
begin                                      //und diese Abfrage soll erst beim zweiten Klick auf den Button ausgeführt werden                    
  if SysUtils.DirectoryExists(Dir2) then
    HinweisV
end;


fehlt da nicht ein Semikolon?

ausblenden Delphi-Quelltext
1:
2:
if SysUtils.DirectoryExists(Dir2) then
    HinweisV;
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Mi 03.02.10 15:54 
Hier nochmals das gleiche, nur mit dem 'Tag' beim Button:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.btn1Click(Sender: TObject);
begin
  btn1.Tag := btn1.tag + 1;

  if btn1.Tag <= 1 then
  begin
    // hier das 1x Klick
    ShowMessage('1');
  end else
  begin
    // hier das 2x (und noch viel mehr) Klick
    ShowMessage('2');
  end;

end;
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Do 04.02.10 09:10 
user profile iconXearox hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
begin                                      //und diese Abfrage soll erst beim zweiten Klick auf den Button ausgeführt werden                    
  if SysUtils.DirectoryExists(Dir2) then
    HinweisV
end;


fehlt da nicht ein Semikolon?

ausblenden Delphi-Quelltext
1:
2:
if SysUtils.DirectoryExists(Dir2) then
    HinweisV;


Nein. In Delphi ist kein explizites Semikolon vor einem end notwendig.
Verleitet meiner Meinung nach zu schlechtem Stil.