AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

eigenartig : ShowMessage???

Ein Thema von Alexander · begonnen am 6. Jul 2003 · letzter Beitrag vom 6. Jul 2003
Antwort Antwort
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#1

eigenartig : ShowMessage???

  Alt 6. Jul 2003, 13:31
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
Alexander
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#2
  Alt 6. Jul 2003, 14: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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 6. Jul 2003, 14:26
Moin Alexander,

sollte

SetLength(fenster,High(fenster)+2); nicht besser

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#4
  Alt 6. Jul 2003, 14: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
Wo liegt jetzt der Fehler?
Alexander
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 6. Jul 2003, 14: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.

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#6
  Alt 6. Jul 2003, 15: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
Alexander
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz