![]() |
eigenartig : ShowMessage???
Hi,
ich habe eine Funktion für mein Programm geschireben ( ![]() 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:
Das ist irgendwie verrückt!
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; 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 |
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: |
Moin Alexander,
sollte
Delphi-Quellcode:
nicht besser
SetLength(fenster,High(fenster)+2);
Delphi-Quellcode:
heissen?
SetLength(fenster,Length(fenster)+1);
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. |
@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.
![]() @christian Zitat:
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? |
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:
sollte auch gehen, um beide Dimensionen neu zu setzen.
SetLength(Fenster,Length(Fenster)+1,2);
Das ist zwar nicht so dokumentiert, funktioniert meines Wissens aber. |
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