Autor Beitrag
Dennys
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 23.02.12 10:37 
Hallo zusammen,
ich habe ein kleines Problem und hoffe es kann mir jemand von euch helfen.
Auf einer Form habe ich CategoryPanelGroup.
Dort lege ich dynamisch Panels an. Auf diese Panels kommen noch andere Komponenten (Panel, checkbox und eine OrgChart).
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
var
  P: TCategoryPanel;
  mypanel : tspskinpanel;
  mycheckbox : TspSkinCheckRadioBox;
  neworgchart : TdxOrgChart;
for I := 0 to max - 1 do
    begin
//      Suche die EDV-Systeme
      P := TCategoryPanel.Create(CategoryPanelGroup1);
      P.Parent := CategoryPanelGroup1;
      P.PanelGroup := CategoryPanelGroup1;
      p.Caption := q_software.FieldByName('EDV_System').AsString;
      p.Height := 400;
      p.Name := 'CategoryPanel' + IntToStr(i);
      mypanel := TspSkinPanel.Create(P);
      mypanel.Parent := P;
      mypanel.Width := 230;
      mypanel.Align := alLeft;
      mypanel.SkinData := MainForm.spSkinData1;
      mypanel.Name := 'panel'+ IntToStr(I);

      mycheckbox := TspSkinCheckRadioBox.Create(mypanel);
      mycheckbox.Parent := mypanel;
      mycheckbox.SkinData := MainForm.spSkinData1;
      mycheckbox.Caption := 'Rotate Chart';
      mycheckbox.Visible := TRUE;
      mycheckbox.Show;
      mycheckbox.Name := 'cb' + IntToStr(i);
      mycheckbox.OnClick := checkboxClick;

      neworgchart:= TdxOrgChart.Create(P);
      neworgchart.parent := P;
      neworgchart.Align := alClient;
      neworgchart.Visible := TRUE;
      neworgchart.Name := 'organigramm'+ IntToStr(I);
      neworgchart.OnClick := organigrammClick;
    end;


Jetzt möchte ich über den Namen in CategoryPanelGroup das Organigramm finden.
Meine Idee war das über den Namen zu machen...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
  selectedcheckbox := (Sender as TspSkinCheckRadioBox);
  if selectedcheckbox.Checked = TRUE then
  begin
    test := '';
    test := 'organigramm'+ COPY(selectedcheckbox.Name, 35);
    showmessage(test);
    compo := TComponent(f_test.FindComponent(test));
    if compo <> nil then
    begin
      i := compo.ComponentIndex;
      if Components[i] is TLabel then TLabel(Components[i]).Font.Color := clRed;
      if Components[i] is TEdit then TEdit(Components[i]).Font.Color := clRed;
      if Components[i] is TCheckbox then TCheckbox(Components[i]).Font.Color := clRed;
      if Components[i] is TRadioButton then TRadioButton(Components[i]).Font.Color := clRed
    end
    else
      MessageBeep(0);
  end;


compo ist aber immer nil und ich verstehe nicht warum :-(
Hat jemand von euch eine Idee?
Gruß aus Münster
Dennys
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 434
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 23.02.12 11:02 
Wo kommt denn das f_test her?
Dennys Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 23.02.12 11:05 
f_test ist der Name des Formulars (ist halt ein Testformular :-) )
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 23.02.12 11:06 
Du erzeugst m,it dem Owner CategoryPanelGroup1, also entweder Owner umstellen oder CategoryPanelGroup1.FindComponent

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 434
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 23.02.12 11:13 
user profile iconDennys hat folgendes geschrieben Zum zitierten Posting springen:
f_test ist der Name des Formulars (ist halt ein Testformular :-) )


Hätt ich wegen des f_ selber drauf kommen können.

Ich denke ich weiß woher die Verwirrung stammt (siehe posting von bummi):

Die Checkboxes die per Code erstellt werden haben als Parent die Panels, also klappt form.findcomponent NICHT.

Erzeugt man in der IDE sowas ist das Formular der Owner, also klappt form.findcomponent
Dennys Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 23.02.12 11:19 
den Owner kann ich doch nicht umstellen weil sonst die Komponenten nicht auf dem CategoryPanel liegen, oder?
Ich hab auch schon das hier versucht...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    for i := 0 to ControlCount - 1 do
    begin
     if Components[i] is TLabel then
      begin
       Showmessage('TLabel');
      end;
    end;

Bringt aber auch nix :-(
ich finde das irgendwie unlogisch....
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 434
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 23.02.12 11:27 
versuch es mal so:
ausblenden Delphi-Quelltext
1:
2:
 mycheckbox := TspSkinCheckRadioBox.Create(my_form);
 mycheckbox.parent := my_panel


Dann wird die checkbox Teil der Components der Form, läßt sich dort mittels FindComponent finden.
Angezeigt wird es jedoch im betreffenden Panel.

Edit: das mit den Farben im Quellcode klappte nicht.
Also: Im Constructor der Checkbox das Form angeben, als Parent jedoch das Panel.


Zuletzt bearbeitet von mandras am Do 23.02.12 11:28, insgesamt 1-mal bearbeitet
Dennys Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 23.02.12 11:27 
sorry mandras, hab dein posting nicht gesehen...
es bringt aber leider weder ein
ausblenden Delphi-Quelltext
1:
2:
 compo := TComponent(mypanel.FindComponent(test));
 //myPanel ist das Panel auf dem die checkbox platziert ist

noch ein

ausblenden Delphi-Quelltext
1:
2:
 compo := TComponent(P.FindComponent(test));
 //P ist das CategoryPanel auf alle Komponneten der Kategorie platziert sind


Moderiert von user profile iconNarses: Beiträge zusammengefasst

Oh man
ich bin echt zu langsam für euch :-)
das mit dem color versteh ich nicht...

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Hi @all
das war es:
mycheckbox := TspSkinCheckRadioBox.Create(my_form);

Finde ich zwar immer noch komisch aber es funktioniert :-)
Danke an euch allen
Das ist ein echt gutes Forum hier....
Gruß aus Münster
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 434
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 23.02.12 11:54 
Um die Hierarchie der Komponenten anzeigen zu lassen kannst Du folgendes verwenden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.ShowComponents (C:TComponent);
var i:integer;
begin
 memo1.lines.add (C.Name+' hat folgende Unterkomponenten:');
 for i:=0 to C.componentcount-1 do
  memo1.lines.add (C.components[i].Name);
 for i:=0 to C.componentcount-1 do if C.Components[i].ComponentCount > 0 then
  ShowComponents(C.components[i]);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 Memo1.lines.clear;
 ShowComponents (self);
end;

(ShowComponents noch im Type-Bereich der Form definieren, Memo1 und Button 4 zu Testzwecken aufs Formula packen).

Das mit den Farben in meinem Posting vorher bezog sich darauf daß ich im Quelltext etwas farblich markieren wollte, was aber innerhalb der delphi-Tags nicht ging, daher hab ichs editiert.

Zur Logik von Owner und Parent - warum erhalten Komponenten von der IDE als Parent immer das Formular?
Das Formular mit allen Komponenten wird über das Streaming-System gespeichert.
Soll es aufgebaut werden müssen alle Komponenten in ein vorhandenes Parent gepackt werden. Und davon gibt es während des Einlesens aus dem Stream eben nur das Formular selbst da die Reihenfolge der Unterkomponenten nicht festliegt (eine Checkbox in einem Panel kann auftauchen bevor das Panel eingelesen wurde)
Evtl. gibt es noch mehr Gründe.
Dennys Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 23.02.12 12:06 
Ok,
verstanden und wieder was dazugelernt :-) :beer: :dance2: