Announcement

Collapse
No announcement yet.

Panels in allen Forms beeinflussen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Panels in allen Forms beeinflussen

    Hallo,

    ich habe ein kleines Problem, welches ich nicht ganz in den Griff kriege.
    Ich habe ein project innerhalb ich 20 Forms habe. Auf diesen Forms habe ich immer die gleichen panels plaziert. Über die Eigenschaft lege ich hier einen Text fest (panel1.capiton...)
    In meiner Form1 lese ich aus einer Datenbank die Information, welche auf allen panels erscheinen soll..

    mit
    for i := 0 to Screen.FormCount-1 do ScreenForms [1].color:=clblue;

    setze ich alle Forms auf blau.

    Wollte dies jetzt auch mit den panels machen,
    Funzt leider nicht, hat jemand eine Idee wie man so etwas machen könnte.

    Gruß Helmut

  • #2
    Hallo Helmut,<BR><BR>
    normalerweise ist das ein klassischer Observer.<BR>
    Man sollte eine Formularklasse erstellen, von der alle anderen Formulare abgeleitet werden.<BR>Diese erhält ein Observable, der sich am Observer registriert. Der Observer benachrichtigt dann alle Observales der Formulare.<BR>
    Der einfache Weg - Methode im Formular:<BR>

    <PRE>
    procedure TfrmMain.UpdatePanel;
    var
    i : Integer;
    begin
    for i := 0 to Componentcount -1 do
    begin
    if Component[i] is TPanel then
    TPanel(Component[i]).Caption := 'Text';
    end;
    end;

    </PRE>
    <BR>
    Fran

    Comment


    • #3
      Hallo Frank, erst mal vielen Dank für die Antwort. Habe folgendes in meinem Quellcode eingefügt:

      procedure Tbenutzer_dialog.FormActivate(Sender: TObject);
      var i:integer;
      begin
      for i := 0 to ComponentCount -1 do
      begin
      if components[i] is TPanel then
      TPanel (components.[i]).Caption := 'Hallo';
      end;
      end;

      Das funktioniert aber nur, wenn ich nur ein einziges Panel habe.
      Es funktioniert auch nur auf der ersten Form. Alle anderen haben immer noch den alten Text. Wie kann ich es realisieren, dass der Text in all meinen Formularen für ein bestimmtes Panel geändert wird.

      Vielen Dank im voraus

      Für Hilfe bin ich immer dankbar.

      Gruß Helmu

      Comment


      • #4
        Hallo Helmut,<BR><BR>
        Es liegt wohl daran, dass du in deiner Schleife eine 1 statt einem i hast.
        Du kannst auch Alles in einer Procedure unterbringen:
        <PRE>
        procedure TForm1.SetAllPanels;
        var
        i : Integer;
        j : Integer;
        begin
        for i := 0 to Screen.FormCount-1 do
        begin
        Screen.Forms[i].color:=clblue;
        for j := 0 to (Screen.Forms[i]).Componentcount -1 do
        begin
        if (Screen.Forms[i]).Components[j] is TPanel then
        TPanel(Screen.Forms[i].Components[j]).Caption := 'Text';
        end;
        end;
        end;
        </PRE&gt

        Comment


        • #5
          Wie kann ich es realisieren, dass der Text in all meinen Formularen für ein bestimmtes Panel geändert wird. <BR><BR>
          Wovon ist es denn abhängig, welches Panel geändert wird. Entweder arbeitest du mit den Tags und if TPanel(Screen.Forms[i].Components[j]).Tag = 1 then... oder beschreibst dein Problem noch etwas genauer. Dan kann ich dir mal ein kleines Beispiel mit Observer - Pattern erstellen.<BR><BR>
          Fran

          Comment


          • #6
            Hallo Frank,
            nochmals Danke.

            Ich will eigentlich nur folgendes...
            Habe 10 Forms, auf jeder Form habe ich
            panlel1, panel2 und panel3
            Will nun die Bezeichnung der Panels schnell und einfach ändern können, daher hole ich mir die Infos aus einer Datenbank.

            Beipspiel: panel1 = 'test', panel2 = 'test1' usw.

            In Form 1 soll dann das panel1 die Bezeichnung 'test'; die Form 2 das panel1 die Bezeichnung 'test' usw.
            Das gleiche gilt für panel2 usw.

            Wollte mir nur viel Arbeit ersparen.

            Für Hilfe immer dankbar,

            Gruß Helmu

            Comment


            • #7
              Hallo Helmut,<BR><BR>
              du kommst um eine Ableitung der Formulare bei einigermaßen sauberen Programmierstil nicht herum.<BR>
              Du machst ein neues Formular, nennst es z.B. frmCustomInfo und leitest deine 10 Forms von diesem (also der Klasse TfrmCustomInfo) ab.<BR>
              In frmCustomInfo erstellst du die 3 Panels mit den Namen Panel1, Panel2, Panel3. Achtung, wenn du bereits Forms abgeleitet hast, müssen diese beim Ändern des Basisforms in der IDE geöffnet sein, sonst sind Crash's vorprogrammiert.<BR>
              Jetzt haben auch deine abgeleiteten Forms die Panels als Member und du kannst in einer Procedure alle Panels ändern.<BR>
              In der uses des Forms (wo die Procedure definiert ist) muss die Unit von frmCustomInfo stehen.<BR>
              Die procedure sieht dann so aus:<BR>
              <PRE>
              procedure TfrmMain.SetAllPanels;
              var
              i : Integer;
              begin
              for i := 0 to Screen.FormCount-1 do
              if Screen.Forms[i] is TfrmCustomInfo then
              begin
              Screen.Forms[i].color:=clblue;
              TfrmCustomInfo(Screen.Forms[i]).Panel1.Caption := 'Text1';
              TfrmCustomInfo(Screen.Forms[i]).Panel2.Caption := 'Text2';
              TfrmCustomInfo(Screen.Forms[i]).Panel3.Caption := 'Text3';
              end;
              end;
              </PRE>
              Gruß, Fran

              Comment


              • #8
                Hallo Frank,

                vielen Dank für Deine Mühe - werd ich gleich heute abend probieren.

                Nochmals Danke

                Gruß

                Helmu

                Comment


                • #9
                  Hallo, hat was länger gedauert. Habe das jetzt ausprobiert. Es funktioniert eigentlich bei einem komplett neu angelegtem Projekt. Ich wollte dies nun übertragen in mein "echtes" Projekt. Das Programm weigert sich aber mit aller Macht dagegen, die Panels auf den Forms umzusetzten. Habe die Form innerhalb der Projektverwaltung als letztes gesetzt (War mein erster gedanke). Noch ne Idee ??
                  Es kommen keine Fehlermeldungen auch werden alle Forms durchgearbeitet.
                  Gruß
                  Helmu

                  Comment

                  Working...
                  X