AGB  ·  Datenschutz  ·  Impressum  







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

Kontrolle ob ein Fenster bereits geöffnet ist

Ein Thema von bezarre · begonnen am 13. Mai 2010 · letzter Beitrag vom 13. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
bezarre

Registriert seit: 30. Apr 2010
33 Beiträge
 
RAD-Studio 2009 Arc
 
#1

Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 16:49
Hallo,

ich habe ein kleines Problem, dass ich einfach nicht gelöst kriege.
Folgende Situation herscht:

Ein User kriegt eine Liste von Inhalten angezeigt. Auf jedes Item dieser Liste kann er klicken und es öffnet sich dann eine Detailansicht. Es soll aber nicht möglich sein, für z.B. Bild 1 die Detailansicht doppelt zu öffnen.

Delphi-Quellcode:


procedure TForm1.ListView1DblClick(Sender: TObject);
var
detail: TForm3;
begin
  if Assigned(ListView1.Selected) then
  begin
    if (user_id <> '0') then
     begin
        detail := TForm3.Create(self);
        detail.load(ListView1.ItemIndex);
        detail.Show;
     end;
  end;
end;
Wie finde ich jetzt heraus, ob der User schon eine Detailsansicht mit dem jeweiligen ItemIndex geöffnet hat? Ich habe auch scohn folgendes probiert gehabt:
Ich habe ein globals Array definiert
Delphi-Quellcode:
var
   detail : Array [0..100000] of TForm3;
Und habe dann mit der gleichen Funktion wie oben (außer das dort keine lokale Variable definiert ist), das Ganze geöffnet.
Delphi-Quellcode:
procedure TForm1.ListView1DblClick(Sender: TObject);
begin
  if Assigned(ListView1.Selected) then
  begin
    if (user_id <> '0') then
     begin
        detail[ListView1.ItemIndex] := TForm3.Create(self);
        detail[ListView1.ItemIndex].load(ListView1.ItemIndex);
        detail[ListView1.ItemIndex].Show;
     end;
  end;
end;
Nun hatte ich mir hier gedacht, dass ich vielleicht irgendwie das Array kontrollieren könnte ob das jeweilige Feld belegt wurde, ich weiß aber nicht wie. Was mich hierbei aber am meisten stört, ist das ich auf ein beschränktes Array angewiesen bin.
SetLength hat hier leider nicht funktioniert, da sich die Liste regelmäßig updated und die Länge daher bei jedem Update beliebig verändert wird.

Ich hoffe sehr ihr könnt mir helfen und versteht mein Problem.

Gruß
Micha

PS Weiß jemand, wie es möglich ist, bei Windows 7 in der Startleiste, beim klicken auf das Icon Aktionen anzuzeigen?
Micha
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 17:12
Nur so: Hast du eine Ahnung wie viel Speicherplatz 100000 Formen benötigen?

Nimm lieber ein Dynamisches Array, dann belegst du auch wirklich nur soviel Platz wie du benötigst...
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
bezarre

Registriert seit: 30. Apr 2010
33 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 17:27
Hallo,

ja ich weiß, aber ich schreib auch, dass SetLength leider einen Fehler auslöste.

// Edit
Habe es nochmal probiert, und jetzt funktioniert es mit dem dynamischen Array Die Hauptfrage bleibt weiterhin offen

Gruß
Micha
Micha
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 18:02
Zitat von bezarre:
ja ich weiß, aber ich schreib auch, dass SetLength leider einen Fehler auslöste.
Man könnte ja versuchen den Fehler zu finden. Aber generell würde ich das Konzept noch mal überdenken. Muss es denn für jeden Eintrag ein neues Fenster sein? Reicht es nicht immer das selbe Fenster zu nehmen und nur eben die entsprechenden Daten zu übergeben?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bezarre

Registriert seit: 30. Apr 2010
33 Beiträge
 
RAD-Studio 2009 Arc
 
#5

Re: Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 18:04
Hallo,

nein das reicht nicht. Das habe ich bewusst so gewählt.

Gruß
Micha
Micha
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 18:11
Begründe das mal. Eventuell findet sich eine bessere Lösung.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bezarre

Registriert seit: 30. Apr 2010
33 Beiträge
 
RAD-Studio 2009 Arc
 
#7

Re: Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 18:14
Hallo,

weil es sich hierbei um ein kleines Chatsystem handeln soll und man auch mit mehr als einer Person sprechen können soll

Ist ja nicht so cool, dass man wenn man sich ein anderes Bild angucken will und mit dem Ersteller chatten will, das Chatten mit einem anderen Abrechen muss bzw. von diesem weggerissen wird. Oder?
Hatte schon überlegt, das mit Registerkarten zulösen, fand das aber nicht so schön.

Gruß
Micha
Micha
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 18:20
Da reicht doch ein Formular aus. Für jeden Chatpartner wird es neu dynamisch erstellt mit den zugehörigen Daten für die Chatpartner.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bezarre

Registriert seit: 30. Apr 2010
33 Beiträge
 
RAD-Studio 2009 Arc
 
#9

Re: Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 18:24
Hallo,

das verstehe ich jetzt nicht.

Mehr mache ich doch jetzt auch nicht. Er gibt oben einen Bereich, in dem das Bild ist, darunter ist ein Feld in dem der Chatverlauf steht und darunter ein Eingabeformular.

Gruß
Micha
Micha
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Kontrolle ob ein Fenster bereits geöffnet ist

  Alt 13. Mai 2010, 18:52
Es gibt also nur eine Formularklasse (mit dem nichtssagenden Namen TForm3 - bitte ändern!) aber davon mehrere Instanzen?
Dann mach's doch so:

Delphi-Quellcode:
// suche Formular
function TForm1.FindMyForm(const value:string):TForm;
var
  i : integer;
  f : TForm3;
begin
  for i := ComponentCount-1 to 0 do // Suche von "hinten" beginnen,höhere Wahrscheinlichkeit die Formulare schnell zu finden
  begin
    if Components[i] is TForm3 then
    begin
      f := TForm3(Components[i]);
      if f.Caption = Value then
      begin
        Result := f;
        exit;
      end;
    end;
  end;
  Result := nil;
end;

procedure TForm1.FindOrCreateForm(const value:string);
var
  detail : TForm3;
begin
  detail := FindMyForm(value) as TForm3;
  if Assigned(detail) then
    detail.BringToFront // Formular schon vorhanden -> anzeigen
  else
  begin
    // Formular nicht vorhanden -> erzeugen
    detail := TForm3.Create(self);
    detail.load(value); // hier String statt Index übergeben
    detail.Caption := value;
    detail.Show;
  end;
end;
  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 20:59 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