AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Instanzierte Formulare ermitteln

Ein Thema von coderi · begonnen am 11. Feb 2011 · letzter Beitrag vom 16. Feb 2011
Antwort Antwort
coderi

Registriert seit: 13. Jun 2008
Ort: Unterfranken
13 Beiträge
 
Delphi 2010 Professional
 
#1

Instanzierte Formulare ermitteln

  Alt 11. Feb 2011, 11:38
Hallo zusammen,

folgendes Problem :
ich rufe 3 mal die procedur auf:

procedure Tdmbspiel.showformular(caption:String);
begin
frmNormal := TfrmNormal.Create(Self,caption);
frmNormal.Show;
end;

Jetzt habe ich 3 mal das gleiche formular mit dem gleichen formularnamen, unterschiedlichen captions.

Hintergrund: Ich pflege stammdaten, welche immer die gleiche struktur haben, will aber nur ein
formular dafür haben.

Wie kann ich nun verhindern, dass ein formular mit der gleichen caption nicht zweimal aufgeht?

Nochmal: Ich möchte nicht showmodal haben, showmodal würde nur zum einmaligen öffnen des formulares führen. Ich brauch das ding parallel, aber nur einmal pro bereich offen.

'Caption1' = offen; 'Caption2' = offen. beim erneuten aufruf von create(self,'caption2') soll nix passieren.


ich hoffe ich habe ausführlich erklärt auf was ich hinausmöchte. Ich habe also ein instanziertes formular und möchte quasi das formular, wenn es mit den bedinungen schon offen ist, nicht nochmal öffnen können.


danke vorab für infos und hilfe
coderi
  Mit Zitat antworten Zitat
Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: bei Walsrode
165 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Instanzierte Formulare ermitteln

  Alt 11. Feb 2011, 11:45
Vielleicht hilft Dir dieser Schnipsel - ist bei uns zum Schauen, ob es Modal irgendwo auf ist:

Delphi-Quellcode:
for I := 0 to Screen.FormCount - 1 do
  if (ansiUpperCase(Screen.Forms[I].Caption) = ansiUpperCase(UeCaption)) then
  begin
    ..Nicht mehr öffnen, nach vorne holen
  end;
Carsten
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: Instanzierte Formulare ermitteln

  Alt 11. Feb 2011, 16:18
Folgende Procedure prüft, ob ein Formular schon offen ist und erzeugt es ggf. neu:
Delphi-Quellcode:
function FindOrCreateForm(FormClass: TFormClass; var Reference):Boolean;
var
   i : Integer;
begin
   for i := Screen.CustomFormCount-1 downto 0 do
   begin
      if Screen.CustomForms[i].ClassType = FormClass then
      begin
         TCustomForm(Reference) := Screen.CustomForms[i];
         Result := True; // gefunden
         Exit;
      end;
   end;
   Application.CreateForm(FormClass, Reference);
   Result := False; // neu erzeugt
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Instanzierte Formulare ermitteln

  Alt 12. Feb 2011, 22:03
procedure Tdmbspiel.showformular(caption:String);
begin
frmNormal := TfrmNormal.Create(Self,caption);
frmNormal.Show;
end;

ich hoffe ich habe ausführlich erklärt auf was ich hinausmöchte. Ich habe also ein instanziertes formular und möchte quasi das formular, wenn es mit den bedinungen schon offen ist, nicht nochmal öffnen können.
Das klingt für mich nach einem hausgemachten Design Problem. frmNormal wird duch erneuten Aufruf dieser Routine überschrieben, besser wäre es diesen Zeiger zu speichern - dann hast du später noch Zugriff auf dein Form. Du könntest so z.B. die erzeugten Formulare in einer TList speichern. Dann könntest du beim nächsten mal nachschauen, ob es bereits existiert. Wenn es statisch sein soll, kannst du dir auch einfach 3 Variablen anlegen und prüfen ob sie nil sind (natürlich die Forms dann mit FreeAndNil() zerstören).

Folgender Schnipsel erzeugt das Form wenn es nicht existiert und löscht es, wenn es existiert. Kannst du ja entsprechend abändern.
Delphi-Quellcode:
if frmNormal = nil then
begin
  frmNormal := TfrmNormal.Create(Self,caption);
  frmNormal.Show;
end
else
begin
  frmNormal.Hide;
  FreeAndNil(frmNormal);
end;

Geändert von arc (12. Feb 2011 um 22:09 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.332 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Instanzierte Formulare ermitteln

  Alt 16. Feb 2011, 13:14
Formulare sollten nicht mit Free oder FreeAndNil() freigegeben werden, sondern mit Release.
Grund steht in der Delphi-Hilfe zu Release.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf