![]() |
Delphi-Version: XE3
Hauptform verschwindet nach Aufruf eines anderen Forms
Hallo,
Ich habe ein Projekt mit ca 10 Formularen. Beim starten ist auch alles noch OK. Wenn ich dann im Mainform ein anderes Form aufrufe wird das neue Form auch angezeigt; jedoch verschwindet zur gleichen Zeit das Mainform (augenscheinlich nicht mehr sichtbar). Das neue Form wurde erst beim doppelklick auf ein Label Initialisiert (CreateForm) und dann angezeigt (Show) Wenn ich dieses Form in der DPR schon initialisiere dann friert die App ein (nicht bedienbar). Habt ihr Ideen/Hinweise für mich was ich prüfen könnte was das Problem sein kann hier? |
AW: Hauptform verschwindet nach Aufruf eines anderen Forms
Kannst du bitte mal den Code zeigen, der das Formular erzeugt?
Und evtl. ist im FormCreate oder FormShow oder so Code drin, der das Owner Form irgendwie versteckt? |
AW: Hauptform verschwindet nach Aufruf eines anderen Forms
Hallo,
ich habe eher die ziemlich alte Delphi-Version im Verdacht. Aber ein Minimal-Beispiel (MainForm + 2. Form), was das Problem zeigt, wäre trotzdem gut. |
AW: Hauptform verschwindet nach Aufruf eines anderen Forms
Deine Version ist auch nicht viel neuer. :wink:
Selbst bei XE und Älterem verschwinden auch keine Forms einfach so, außer jemand hat was falsch gemacht. Und natürlich kann man dazu nichts sagen, wenn man nicht weiß was gemacht wird. |
AW: Hauptform verschwindet nach Aufruf eines anderen Forms
Hallo,
doch es verschwindet z.B. bei Delphi 2007. Ursache ist ein verändertes Verhalten von Windows ab Vista. |
AW: Hauptform verschwindet nach Aufruf eines anderen Forms
Hmmm, hab einige XE-Programme und noch ein D7 am Laufen und da verschwindet nichts.
Dann hatten wir wohl Glück. Die Einzigen meiner/unserer (größeren) Probleme sind, mit der alten/neuen VCL, die Fokussteuerung bei Fensterwechsel, aber nur wenn man ein Fenster schließt und inzwischen/gleichzeitig das Anderes schloss, welches vorher aktiv war. und Auslesen/Setzen des ActiveControl/ActiveForm bei MDI und eingebetteten Forms (die als Frame missbraucht werden) und ![]() |
AW: Hauptform verschwindet nach Aufruf eines anderen Forms
Zitat:
Hier der Aufruf (in Mainform):
Code:
Formcreate und FormShow
procedure Tfrmmain.lblAnzahlReklamationDblClick(Sender: TObject);
var count: integer; begin if not Assigned(frmrekla) then Application.CreateForm(Tfrmrekla, frmrekla); // Das ist das problematische Form TryStrToInt(lblAnzahlReklamation.Caption,count); if count = 0 then begin // Neue Reklamation beginnen... frmrekla.edit_kvID.Text := Trim(edit_kvid.Text); frmrekla.edit_kvposID.Text := Trim(edit_posID.Text); frmrekla.Show; frmrekla.MarkFirst(Sender); end else begin // Reklamation aufrufen und Liste anzeigen... frmrekla.edit_kvID.Text := Trim(edit_kvid.Text); frmrekla.edit_kvposID.Text := Trim(edit_posID.Text); frmrekla.Show; frmrekla.LadeABs; frmrekla.MarkFirst(Sender); end; end;
Code:
Ich möchte hinzufügen, dass die App komplett mit XE3 entwickelt wurde.
procedure Tfrmrekla.FormCreate(Sender: TObject);
begin label_bestellweg.Caption := ''; end; procedure Tfrmrekla.FormShow(Sender: TObject); begin // combo_lief_lieferant.Text := ''; chkWarenbezug.Checked := False; edit_info.Text := ''; memo_defekt.Text := ''; edit_aus_abnr.Text := ''; edit_aus_posnr.Text := ''; edit_ab_id.Text := ''; edit_neulieferungbis.Text := ''; memo_anrede.Text := ''; memo_einleitung.Text := ''; memo_reaktion.Text := ''; chkkundendienst.Checked := False; edit_ab_lieftermin.Text := ''; edit_vorlage_datum.Text := ''; edit_vorlage_uhrzeit.Text := ''; edit_vorlage_betreff.Text := ''; memo_vorlage.Text := ''; edit_finanzID.Text := ''; edit_reklaID.Text := ''; frmmain.GetLieferanten(combo_lief_lieferant); LadeABs; qryimgcount.Active := false; qryimgcount.SQL.Clear; qryimgcount.SQL.Add('SELECT count(img_name) as anzahl_dokumente FROM beka_attachments WHERE img_kvID='+QuotedStr(main.frmmain.edit_kvID.Text)+' ORDER BY img_id DESC;'); qryimgcount.ExecSQL; qryimgcount.Active := true; if qryimgcount.RecordCount > 0 then begin qryimgcount.First; lblAnzahlDokumente.Caption := qryimgcount.FieldByName('anzahl_dokumente').AsString; end; qryimgcount.Active := false; end; Ich habe einen neuen PC bekommen und habe hier XE3 komplett neu installiert mit allen nötigen Komponenten. Bei den verwendeten TMS Komponenten sowie List&Label habe ich jeweils die aktuellsten Versionen gekauft und diese Installiert. List&Label war bisher Version 15. Update nun auf Version 25. Bei TMS hatte ich früher das TMS ComponentPack; das ist zwischenzeitlich durch das TMS VCL UI Pack ersetzt worden. Aktuelle Version vom TMS VCL UI Pack ist installiert. |
AW: Hauptform verschwindet nach Aufruf eines anderen Forms
mach es mal so
Delphi-Quellcode:
,
frmrekla := Tfrmrekla.Create(Self); // oder nil oder Application oder sonstwas nach Belieben als Owner
also selbsterstellte Forms genauso wie jede andere selbsterstellte Komponente. Obwohl es doch eigentlich dennoch nicht sein sollte, dass die MainForm dadurch verschwindet. (obwohl dieses CreateForm auch an MainForm rumpfuscht) PS: Zitat:
Du hast aber Glück, dass es hier keinen Fehler gibt ... wird nur sinnlos doppelt ausgeführt, das SELECT.
Delphi-Quellcode:
Dann noch das für SQL komplett völlig falsche QuoteStr.
qryimgcount.Close; // verständlicher/lesbarer als qryimgcount.Active := iegendwas;
qryimgcount.SQL.Text := 'SELECT count(img_name) as anzahl_dokumente FROM beka_attachments WHERE img_kvID=:id ORDER BY img_id DESC;'; qryimgcount.ParamByName('id').Text := main.frmmain.edit_kvID.Text: qryimgcount.Open; Warum nicht als Parameter? Denn mit diesem QuoteStr kann man keine SQL-Injection verhindern, da es die Pascal-String-Syntax benutzt, anstatt der Syntax für SQL-Strings. Danneine nicht initialisierte Variable bei
Delphi-Quellcode:
.
TryStrToInt(lblAnzahlReklamation.Caption,count);
Wieso liest niemand wie Warnungen des Compilers?
Delphi-Quellcode:
Und dann mal sehen wann wem auffällt, dass in dem IF-ELSE praktisch alle Codezeilen doppelt sind, abgesehn von Einer (nur um Die bräuchte man das IF machen)
if not TryStrToInt(lblAnzahlReklamation.Caption, count) then
count := 0; // oder count := StrToIntDef(lblAnzahlReklamation.Caption, 0); |
AW: Hauptform verschwindet nach Aufruf eines anderen Forms
Zitat:
zu dem EXECSQL: Heisst das, Open führt den Select auch schon aus? bzw. Active := true dann ebenfalls? Zitat:
Ich habe mir das SO selber beigebracht; heisst natürlich nicht, dass es so auch richtig ist. :roll: Edit: Ok, hab per Google Beispiele gefunden wie das mit den UniDac Komponenten geht. Scheint mir aber ein grosser Aufwand den ich hier betreiben muss um alle Abfragen derartig umzubauen :( Eine SQL-Injection will ich nicht verhindern (Ok, falsch ausgedrückt. Ich denke nicht, das hier eine Injektion geschieht. Das macht keiner unserer Mitarbeiter. Ich schätze ich bin auch der einzige dem der Begriff etwas sagt). Die Werte die hier in einem Query eingesetzt werden setze bzw. ermittle ich selber. Der Benutzer gibt hier keine Falschen Daten ein. Und von aussen kann niemand an das Programm ran. Das ist eine Software die ausschliesslich bei uns in der Firma verwendet wird. PS: Bisher hat das alles so funktioniert. Mit XE3. Das QuotedStr habe ich dann irgendwann eingeführt als ich mit qry.SQL.Add(...) auf probleme trat wenn ich die Werte mittels fieldname="wert" eingesetzt hatte. durch das QuotedStr wurde dann in der SQL-Abfrage feldname='Wert'; so konnte ich die Abfrage dann auch absetzen. Sicherlich aufwengiger als Parameter zu nutzen; jetzt im nachhinein gesehen sehe ich das auch ein nachdem ich den Thread erstellt habe und Deine Hinweise gelesen habe. Bei unserer "Dicken" App (200 forms) klappt es auch aktuell. Sicher noch Stellen anzupassen aber Sie läuft zumindest schonmal wieder. Ich schätze ich hätte in der Vergangenheit öfter mal einen Thread hier erstellen sollen bei Problemen :lol: |
AW: Hauptform verschwindet nach Aufruf eines anderen Forms
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe in der Zwischenzeit festgestellt, dass das Form nicht wirklich verschwindet.
Wenn ich mit der Maus über den eintrag in der Taskbar gehe dann kann ich das Fenster beim Mouseover über das Thumbnail der App auch sehen. Die Menupunkte aus dem Hauptfenster funktionieren auch weiterhin. Nur macht aktuell leider nur STRG-Q (Beenden) Sinn. Kann es sein, dass das Fenster irgendwie in einem Virtellen Desktop erscheint oder so? Bild 1. Vor Doppelklick auf das Label. Bild 2. Nach Doppelklick (Neues Fenster ist offen aber Mainform verschwunden). Bei Mouseover über das Thumbnail kann ich das Hauptfenster sehen, bekomme es aber nicht mehr "in den Fokus". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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