Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi eigenartig : ShowMessage??? (https://www.delphipraxis.net/6308-eigenartig-showmessage.html)

Alexander 6. Jul 2003 12:31


eigenartig : ShowMessage???
 
Hi,
ich habe eine Funktion für mein Programm geschireben (http://www.delphipraxis.net/viewtopi...65d8a8f8567d54)
Damit werden andere Fenster in ein PopUp-Menü und in eine ListView minimiert.
Jetzt habe ich aber ein Problem. ERstmal vorweg: Die Funktion wird definitiv nur einmal ausgeführt...
Also führe ich ganz normal die Funktion aus, wird sie scheinbar 2 mal ausgeführt. Zumindest werden 2 Einträge eingetragen.
Schreibe ich jedoch am Anfang der Funktion ein ShowMessage(''); und führe sie aus so funktioniert alles wie gewünscht (bisauf, dass die Message gezeigt wird)
Woran liegt das?
Delphi-Quellcode:
function hide1(i : integer; Listview1 : TListView) : Boolean;
var
 pos1 : Integer;
 title : String;
begin
  ShowMessage(''); //disee doofe Message......

 if (ListView1.Items.Item[i].Checked = true) then
  begin
   {vestecken...}
     SetLength(fenster,High(fenster)+2);
     SetLength(fenster[High(fenster)],2);

     title := GetText(StrToInt(ListView1.Items.Item[i].SubItems.Strings[0]));

     fenster[High(fenster),1] := title;
     fenster[High(fenster),0] := ListView1.Items.Item[i].SubItems.Strings[0];

     ShowWindow(StrToInt(fenster[High(fenster), 0]), SW_HIDE);

  end
  else
   MessageDlg('Fenster schon verborgen.', mtWarning, [mbok], 0);
end;
Das ist irgendwie verrückt!
Ich könnte mir höchstens Vorstellen, dass da irgendwie eine Zeitverzögerung oder sowas der Grund ist. Ein Sleep(1000) bringt aber auch nichts...
Habt ihr ne Ahnung wie ich das vernünftig lösen kann?
Oder wie ich diese Message anzeigen lassen und sofort wieder schließen kann?
Danke schon mal

Daniel B 6. Jul 2003 13:24

Hallo,

vielleicht versteckt es sich hinter dem Editor-Fenster, das hatte ich auch letztens als ich mit einem PopUp-Menü rumgespielt habe, da ist die Message immer aufgetaucht, hab sie aber nie gesehen. Minimiere doch auchmal das Editor-Fenster wenn Du es ausführst.

Grüsse, Daniel :hi:

Christian Seehase 6. Jul 2003 13:26

Moin Alexander,

sollte

Delphi-Quellcode:
SetLength(fenster,High(fenster)+2);
nicht besser

Delphi-Quellcode:
SetLength(fenster,Length(fenster)+1);
heissen?

Bei leerem Array wäre High(...) = -1, anschliessend 1 (statt 0), dann 3 (statt 1) usw.

Ob die Funktion nur einmal aufgerufen wird kannst Du eventuell auch mal dadurch prüfen, indem Du einen Zähler global definiertst, zu Beginn der Funktion hochzählst, und z.B. auf einem Label ausgibst oder in eine Datei schreibst. Dann wird die Auswirkung von ShowMessage unterbunden.

Alexander 6. Jul 2003 13:33

@daniel ich glaube du hast mich falsch verstanden. Die Message wird ja angezeigt das ist kein Problem. Wenn du dir mein Programm ankuckst wird das vielleicht klarer.
http://www.delphipraxis.net/viewtopi...65d8a8f8567d54

@christian
Zitat:

sollte

Source:
SetLength(fenster,High(fenster)+2);


nicht besser

Source:
SetLength(fenster,Length(fenster)+1);


heissen?
DAs macht doch eigentlich kein Unterschied, oder?

Nachdem Counter wird die Funktion wirklich 2 mal ausgeführt. Das kann aber eigentlich nicht sein, weil ich sie nur einmal aufrufe :shock:
Wo liegt jetzt der Fehler?

Christian Seehase 6. Jul 2003 13:47

Moin Alexander,

doch, das macht was aus, weil Du Löcher in Deinem Array bekommst, da Du ja immer in High(...) speicherst, und dadurch, dass Du die Länge um High+2 vergrösserst, speicherst Du immer in den ungeraden Indizes (sozusagen). Die anderen sind nicht initialisiert.

Wenn der Counter Dir zeigt, dass die Funktion tatsächlich zweimal aufgerufen wird, ist es denkbar, das die Funktion aus der heraus Hide1 aufgerufen wird zweimal ausgeführt wird.

Vielleicht solltest Du erst einmal den Zugriff auf Dein dynamisches Array korrigieren.

Delphi-Quellcode:
SetLength(Fenster,Length(Fenster)+1,2);
sollte auch gehen, um beide Dimensionen neu zu setzen.
Das ist zwar nicht so dokumentiert, funktioniert meines Wissens aber.

Alexander 6. Jul 2003 14:03

Das mit dem ShowMEssage verstehe ich zwar immer noch nicht, aber ich konnte es jetzt lösen. Ich, wie Christian vorgeschlagen hat, einen Counter mit reingebracht. Es wird überprüft jetzt, ob der Counter gerade oder ungerade ist.
So sollte es funktionieren.
Wenn ihr aber noch ne Idee habt, warum der Code "nur" einmal ausgeführt wird, wenn ein ShowMessage drinne ist, bin ich gespannt.
Danke nochmals


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