AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Anzahl Formulare / Dynamisch Klassen ansprechen?

Anzahl Formulare / Dynamisch Klassen ansprechen?

Ein Thema von miLeRiAm · begonnen am 31. Okt 2008 · letzter Beitrag vom 31. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2   
miLeRiAm

Registriert seit: 3. Sep 2004
Ort: :/root
34 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Anzahl Formulare / Dynamisch Klassen ansprechen?

  Alt 31. Okt 2008, 11:17
moin moin,

ja, ich habe bereits die suchfunktion genutzt und einen hinweis darauf erhalten, dass "Screen.FormCount" das sein soll, was ich benötige. Ist es aber leider offensichtlich nicht ganz.

Delphi-Quellcode:
  for j := 0 to screen.FormCount-1 do
   for i := 0 to screen.forms[j].componentcount-1 do
   screen.forms[j].components[i].tag := ((j+1) * 10000) + i;
Problem: Ich habe derzeit 3 Formulare, die for geht also von 0 - 2, das überschreitet dann aber den Listindex?

Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt sms_manager.exe ist eine Exception der Klasse EListError mit der Meldung 'Listenindex überschreitet das Maximum (2)' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Ideen?


Edith meint: Kann es sein das "FormCount" eine andere Anzahl Formulare zurückgibt, als sich in dem Array "Forms" zurückgibt?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Anzahl Formulare in der Applikation

  Alt 31. Okt 2008, 11:19
Zitat:
for j := 0 to screen.FormCount-0 do
Wieso -0? Macht ja keinen Sinn.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Anzahl Formulare in der Applikation

  Alt 31. Okt 2008, 11:23
FormCount beinhaltet zB 2

dann geht deine Schleife

0
1
2

das Array hat die Felder

0
1

Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
miLeRiAm

Registriert seit: 3. Sep 2004
Ort: :/root
34 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Anzahl Formulare in der Applikation

  Alt 31. Okt 2008, 11:24
Zitat von DeddyH:
Zitat:
for j := 0 to screen.FormCount-0 do
Wieso -0? Macht ja keinen Sinn.
Zitat von Angel4585:
FormCount beinhaltet zB 2

dann geht deine Schleife

0
1
2

das Array hat die Felder

0
1

Tippfehler, ist natürlich -1.

Klappen tut es leider auch mit -1 nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Anzahl Formulare in der Applikation

  Alt 31. Okt 2008, 11:25
Und mit -1 kommt der Fehler auch?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
miLeRiAm

Registriert seit: 3. Sep 2004
Ort: :/root
34 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Anzahl Formulare in der Applikation

  Alt 31. Okt 2008, 11:30
Zitat von DeddyH:
Und mit -1 kommt der Fehler auch?
Ja, allerdings verstehe ich das nicht.

Ich habe 3 Forms.

TfrmMain
TfrmLogin
TfrmAddEntry

in der TfrmMain wird das ganze gemacht und die for geht bis zum Index 3 (???).


Delphi-Quellcode:
  for j := 0 to screen.FormCount-1 do


   for i := 0 to screen.Forms[j].ComponentCount-1 do screen.Forms[j].Components[i].Tag := ((j+1) * 10000) + i;


   for i := 0 to screen.Forms[j].ComponentCount-1 do

   if (screen.Forms[j].Components[i] is TButton) or
      (screen.Forms[j].Components[i] is TToolButton) or
      (screen.Forms[j].Components[i] is TLabel) or
      (screen.Forms[j].Components[i] is TMenuItem) or
      (screen.Forms[j].Components[i] is TCheckBox) or
      (screen.Forms[j].Components[i] is TRadioButton) or
      (screen.Forms[j].Components[i] is TTabSheet) or
      (screen.Forms[j].Components[i] is TSpeedButton) then
   begin

     if screen.Forms[j].Components[i] is TButton then
     handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TButton(screen.Forms[j].Components[i]).Caption);

     if screen.Forms[j].Components[i] is TToolButton then
     handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TToolButton(screen.Forms[j].Components[i]).Caption);

     if screen.Forms[j].Components[i] is TLabel then
     handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TLabel(screen.Forms[j].Components[i]).Caption);

     if screen.Forms[j].Components[i] is TMenuItem then
     handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TMenuItem(screen.Forms[j].Components[i]).Caption);

     if screen.Forms[j].Components[i] is TCheckBox then
     handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TCheckBox(screen.Forms[j].Components[i]).Caption);

     if screen.Forms[j].Components[i] is TRadioButton then
     handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TRadioButton(screen.Forms[j].Components[i]).Caption);

     if screen.Forms[j].Components[i] is TTabSheet then
     handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TTabSheet(screen.Forms[j].Components[i]).Caption);

     if screen.Forms[j].Components[i] is TSpeedButton then
     handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TSpeedButton(screen.Forms[j].Components[i]).Caption);

   end;

end;

Ach ja, wenn jemand einen -sauberen- (!) weg kennt, alle Captions von Componenten, die Captions haben dürfen in eine Liste zu speichern, immer her damit. Damit ärgere ich mich nämlich schon geraume Zeit herum. Der Code ist mittlerweile auch ziemlich Dirty, da ich ständig dran rumändere.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Anzahl Formulare in der Applikation

  Alt 31. Okt 2008, 11:33
Zuerst einmal fällt mir auf, dass da ein begin-end-Block fehlt. Eigentlich müsste auch eine Compiler-Warnung kommen, dass j nach Schleifendurchlauf undefiniert sei. Und evtl. könntest Du es mal mit RTTI versuchen, aber damit kenn ich mich auch nicht aus, die Forensuche sollte da aber weiterhelfen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
miLeRiAm

Registriert seit: 3. Sep 2004
Ort: :/root
34 Beiträge
 
RAD-Studio 2009 Pro
 
#8

Re: Anzahl Formulare in der Applikation

  Alt 31. Okt 2008, 11:41
Zitat von DeddyH:
Zuerst einmal fällt mir auf, dass da ein begin-end-Block fehlt. Eigentlich müsste auch eine Compiler-Warnung, dass j nach Schleifendurchlauf undefiniert sei. Und evtl. könntest Du es mal mit RTTI versuchen, aber damit kenn ich mich auch nicht aus, die Forensuche sollte da aber weiterhelfen.
i lol'ed in rL.

Danke, begin / end.. man. Ist noch zu früh
  Mit Zitat antworten Zitat
Frankfurtoder

Registriert seit: 27. Mär 2008
112 Beiträge
 
RAD-Studio 2010 Pro
 
#9

Re: Anzahl Formulare in der Applikation

  Alt 31. Okt 2008, 11:56
Formatieren hilft Der Code mit den If's sieht ja grausam aus.
Erik
Alles gut?
  Mit Zitat antworten Zitat
miLeRiAm

Registriert seit: 3. Sep 2004
Ort: :/root
34 Beiträge
 
RAD-Studio 2009 Pro
 
#10

Re: Anzahl Formulare in der Applikation

  Alt 31. Okt 2008, 12:10
Zitat von Frankfurtoder:
Formatieren hilft Der Code mit den If's sieht ja grausam aus.
Delphi-Quellcode:
 if handleList.Count = 0 then
 begin

  frmMain.handleList.Clear;

  for j := 0 to screen.FormCount-1 do
  begin

   for i := 0 to screen.Forms[j].ComponentCount-1 do
   begin
    screen.Forms[j].Components[i].Tag := ((j+1) * 10000) + i;
   end;

   for i := 0 to screen.Forms[j].ComponentCount-1 do
   begin

    comp := screen.Forms[j].Components[i];

    if (comp is TButton) or (comp is TToolButton) or (comp is TLabel) or (comp is TMenuItem) or
       (comp is TCheckBox) or (comp is TRadioButton) or (comp is TTabSheet) or (comp is TSpeedButton)
    then
     begin

      if comp is TButton then handleList.Add(IntToStr(comp.Tag)+'='+TButton(comp).Caption);
      if comp is TToolButton then handleList.Add(IntToStr(comp.Tag)+'='+TToolButton(comp).Caption);
      if comp is TLabel then handleList.Add(IntToStr(comp.Tag)+'='+TLabel(comp).Caption);
      if comp is TMenuItem then handleList.Add(IntToStr(comp.Tag)+'='+TMenuItem(comp).Caption);
      if comp is TCheckBox then handleList.Add(IntToStr(comp.Tag)+'='+TCheckBox(comp).Caption);
      if comp is TRadioButton then handleList.Add(IntToStr(comp.Tag)+'='+TRadioButton(comp).Caption);
      if comp is TTabSheet then handleList.Add(IntToStr(comp.Tag)+'='+TTabSheet(comp).Caption);
      if comp is TSpeedButton then handleList.Add(IntToStr(comp.Tag)+'='+TSpeedButton(comp).Caption);

     end;

   end;

  end;

 end;

Habe ich grade
Wurde langsam wirklich unübersichtlich.

Gefallen tut mir die Lösung aber dennoch nicht.

Stichwort: Mehrsprachigkeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 15:55 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