Autor Beitrag
Nightfly
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 163



BeitragVerfasst: Fr 27.06.03 09:06 
Hi

verzeiht mir diese dumme frage, aber ich hab echt nix gefunden.

Gibt es eine Schleife, mittels der ich in einem Rutsch alle Objekte eines Typs verändern kann? z.B. möchte ich bei allen Grids auf meinem Formular die spalten anhand der Auflösung gleichmäßig aufteilen.

Pseudocode sähe so aus
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
with allen DBGrids do
begin 
Spaltenbreite := Bildschirmbreite:anzahlDerSpalten
 with allen Spalten do
 begin 
 breite := Spaltenbreite
 end;
end;


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt & Topic verschoben.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 27.06.03 09:26 
Hi,

such mal in der Delphi-Hilfe und hier im Forum nach FindComponent.

Gruß
Tino
oetzgemoeh
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 28



BeitragVerfasst: Fr 27.06.03 09:46 
Möglich wäre es zum Beispiel, alle der Form untergeordneten Komponenten nach einem bestimmten Typ zu durchsuchen und dann alle Komponenten dieses Typs entsprechend zu verändern.
Am Beispiel TStringgrid:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var i,breite:integer;
    p:^tstringgrid;
    c:tcomponent;
begin
for i:=0 to form1.ComponentCount-1 do
  begin
  c:=components[i];
  if c.ClassType=tstringgrid then
    begin
    p:=@c;
    breite:=round(form1.Width/p^.ColCount);
    p^.DefaultColWidth:=breite;
    end;
  end;
end;


Ist sicher komplizierter als nötig, aber funktioniert... :roll:
Nightfly Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 163



BeitragVerfasst: Fr 27.06.03 10:10 
hmmm, das mit den Zeigern is mir Unklar. Geht das auch ohne?

Mal eine ganz einfache Frage in diesem zusammenhang: ich hab ein Formular mit einem Button, der bloß ein was kann. Nämlich
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Sender.Caption:= 'Text';
end;


Zitat:
Fehlermeldung: Undefinierter Bezeichner Caption.


Ich dachte, die Variable Sender Entspricht dem Objekt, welches die Aktion ausgelößt hat.

Button1.Caption := 'Text' geht ja.

Moderiert von user profile iconTino: Delphi- und Quote-Tags hinzugefügt.

Wenn das mit dem Sender gehn würde könnte ich ja bei 10 Buttons überall dir Prozedur Button1Click eintragen, trotzdem verändert sich ja dan beim anklicken nich Button1, sondern der angeklickte. wie erreiche ich das?
oetzgemoeh
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 28



BeitragVerfasst: Fr 27.06.03 10:19 
Sender ist vom Typ TObject und hat deshalb nicht die Eigenschaft Caption.
Um die Caption zu verändern, musst Du Delphi erst klarmachen, dass es sich bei Sender um Einen Button handelt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
TButton(Sender).caption:='XYZ';
end;
oetzgemoeh
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 28



BeitragVerfasst: Fr 27.06.03 10:23 
Wobei mir einfällt:
Auf diese Weise ist auch Dein erstes Problem unkomplizierter zu lösen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to Form1.ComponentCount-1 do
  if Components[i].ClassType=TStringGrid then
    TStringGrid(Components[i]).DefaultColWidth:=Round(Form1.Width/TStringGrid(Components[i]).ColCount);
end;