AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Hauptform verschwindet nach Aufruf eines anderen Forms
Thema durchsuchen
Ansicht
Themen-Optionen

Hauptform verschwindet nach Aufruf eines anderen Forms

Ein Thema von DonManfred · begonnen am 12. Okt 2020 · letzter Beitrag vom 19. Okt 2020
Antwort Antwort
Seite 1 von 2  1 2      
DonManfred

Registriert seit: 8. Nov 2007
Ort: Düren
55 Beiträge
 
Delphi 10.4 Sydney
 
#1

Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 12. Okt 2020, 12:25
Delphi-Version: XE3
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?

Geändert von DonManfred (12. Okt 2020 um 13:46 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.936 Beiträge
 
Delphi 12 Athens
 
#2

AW: Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 12. Okt 2020, 21:08
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?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 12. Okt 2020, 22:28
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.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 13. Okt 2020, 00:31
Deine Version ist auch nicht viel neuer.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 13. Okt 2020, 07:01
Hallo,
doch es verschwindet z.B. bei Delphi 2007.
Ursache ist ein verändertes Verhalten von Windows ab Vista.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 13. Okt 2020, 10:48
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
https://www.delphipraxis.net/205177-...rt-10-4-a.html
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
DonManfred

Registriert seit: 8. Nov 2007
Ort: Düren
55 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 13. Okt 2020, 10:55
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?
Ich würde behaupten wollen, dass da kein Code ist, der das Hauptform versteckt.

Hier der Aufruf (in Mainform):
Code:
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;
Formcreate und FormShow

Code:
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 möchte hinzufügen, dass die App komplett mit XE3 entwickelt wurde.

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.

Geändert von DonManfred (13. Okt 2020 um 10:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#8

AW: Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 13. Okt 2020, 11:25
mach es mal so 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:
Delphi-Quellcode:
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;
Warum ExecSQL?

Du hast aber Glück, dass es hier keinen Fehler gibt ... wird nur sinnlos doppelt ausgeführt, das SELECT.

Delphi-Quellcode:
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;
Dann noch das für SQL komplett völlig falsche QuoteStr.
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 TryStrToInt(lblAnzahlReklamation.Caption,count); .
Wieso liest niemand wie Warnungen des Compilers?
Delphi-Quellcode:
if not TryStrToInt(lblAnzahlReklamation.Caption, count) then
  count := 0;
// oder
count := StrToIntDef(lblAnzahlReklamation.Caption, 0);
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Okt 2020 um 11:34 Uhr)
  Mit Zitat antworten Zitat
DonManfred

Registriert seit: 8. Nov 2007
Ort: Düren
55 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 13. Okt 2020, 14:44
Warum ExecSQL?

Du hast aber Glück, dass es hier keinen Fehler gibt ... wird nur sinnlos doppelt ausgeführt, das SELECT.

Dann noch das für SQL komplett völlig falsche QuoteStr.
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.
Ich gebe zu der Code ist alt (Projekt begonnen 2008. Zuvor hatte ich nur wenig Erfahrung mit Delphi 6.

zu dem EXECSQL:
Heisst das, Open führt den Select auch schon aus? bzw. Active := true dann ebenfalls?

Dann noch das für SQL komplett völlig falsche QuoteStr.
Warum nicht als Parameter?
Ich nutze die Devart Uniconnector komponenten. Ich weiss ehrlich gesagt nicht, wie ich da Parameter einsetzen könnte.
Ich habe mir das SO selber beigebracht; heisst natürlich nicht, dass es so auch richtig ist.
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

Geändert von DonManfred (13. Okt 2020 um 15:18 Uhr)
  Mit Zitat antworten Zitat
DonManfred

Registriert seit: 8. Nov 2007
Ort: Düren
55 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Hauptform verschwindet nach Aufruf eines anderen Forms

  Alt 13. Okt 2020, 14:56
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".
Miniaturansicht angehängter Grafiken
snap1.jpg   snap2.jpg  

Geändert von DonManfred (13. Okt 2020 um 14:58 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:25 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