AGB  ·  Datenschutz  ·  Impressum  







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

Spalten und zeilen zur laufzeit

Ein Thema von Privateer3000 · begonnen am 8. Aug 2006 · letzter Beitrag vom 9. Aug 2006
Antwort Antwort
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#1

Spalten und zeilen zur laufzeit

  Alt 8. Aug 2006, 14:52
Hi leuts,

ich möchte eine Fläche mit Buttons füllen.
Dazu habe ich ein TStrings. Mit count
erhalte ich die anzahl x der einträge.

jetzt sollen x buttons erstellt werden.
aber nicht mehr als 5 untereinander,
ab dem 5. eine neue spalte und wieder 5.
Da die anzahl im TString variiert
kann ich die Zahlen nicht festlegen.

wie muss das aussehen?

greetz
Privateer3000
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.137 Beiträge
 
Delphi 12 Athens
 
#2

Re: Spalten und zeilen zur laufzeit

  Alt 8. Aug 2006, 14:59
mit DIV kannst du dir die nötigen Zeilen ausrechen, ansonsten gibt's noch MOD.

Delphi-Quellcode:
nötigeZeilen := (Strings.Count + 4) div 5;
//oder
nötigeZeilen := (Strings.Count - 1) div 5 + 1;
(Letzeres ist vorallem gut, wenn man mit veränderlichen Spalten arbeiten will)

Delphi-Quellcode:
Button.Left := (Strings.Count mod 5) * AbstandX + OffsetX;
Button.Top := (Strings.Count div 5) * AbstandY + OffsetY;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Spalten und zeilen zur laufzeit

  Alt 8. Aug 2006, 15:01
Mit DIV und MOD kannst du die Position im Raster berechnen.

[Edit: Zu langsam]
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Spalten und zeilen zur laufzeit

  Alt 8. Aug 2006, 15:17
ich raffs nich...

Delphi-Quellcode:
for ii:=0 to wiev -1 do
begin
kk:=stlist.Strings[ii];
AButton:=TButton.Create(Self);
AButton.Parent:=Form2;
AButton.Width:=100;
AButton.Height:=40;
Abutton.Top:=(AButton.Height*ii)+ii;
AButton.Left:=btleft;
AButton.Caption:=kk;
AButton.Tag:=ii;
end;
wiev ist der strings.count
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Spalten und zeilen zur laufzeit

  Alt 8. Aug 2006, 16:02
das verstehe ich nicht:
Delphi-Quellcode:
nötigeZeilen := (Strings.Count + 4) div 5;
//oder
nötigeZeilen := (Strings.Count - 1) div 5 + 1;
wo soll das untergebracht werden?

Danke leuts
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Spalten und zeilen zur laufzeit

  Alt 8. Aug 2006, 16:32
Schau mal her:

Delphi-Quellcode:
procedure CreateButtonField(s: TStrings; wcParent: TWinControl; maxRows: Integer;
  onClick: TNotifyEvent);
const
  BTN_WIDTH = 100;
  BTN_HEIGHT = 40;
  TOP_MARGIN = 10;
  LEFT_MARGIN = 10;
  VERT_SPACE = 10;
  HORZ_SPACE = 10;
var
  i, iCol, iRow: Integer;
  btn: TButton;
begin
  for i := 0 to Pred(s.Count) do
  begin
    iCol := i div maxRows;
    iRow := i mod maxRows;
    btn := TButton.Create(wcParent.Owner);
    btn.Caption := s[i];
    btn.Width := BTN_WIDTH;
    btn.Height := BTN_HEIGHT;
    btn.Parent := wcParent;
    btn.Top := TOP_MARGIN + (BTN_HEIGHT + VERT_SPACE) * iRow;
    btn.Left := LEFT_MARGIN + (BTN_WIDTH + HORZ_SPACE) * iCol;
    btn.OnClick := onClick;
    s.Objects[i] := btn;
  end;
end;

procedure TMainForm.InitButtonClick(Sender: TObject);
var
  i: Integer;
begin
  with ListBox do
  begin
    for i := 0 to Pred(Items.Count) do
      TButton(Items.Objects[i]).Free;
    Clear;
    for i := 0 to 20 + Random(5) do
      ListBox.Items.Add(IntToStr(i));
  end;

  CreateButtonField(ListBox.Items, Panel, 5, DemoButtonClick);
end;

procedure TMainForm.DemoButtonClick(Sender: TObject);
begin
  with Sender as TButton do
    ShowMessage(Caption);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Spalten und zeilen zur laufzeit

  Alt 8. Aug 2006, 16:42
Danke!
es setzt jetzt richtig!
@marabu
in deinem quelltext wird auch das onclick ereignis
ausgewertet. Kann man auch den die button.caption
senden um diese weiter zu verarbeiten.
Aber ich weiß schon...neues Thema -> neuer Thread

danke nochmal an alle
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Spalten und zeilen zur laufzeit

  Alt 8. Aug 2006, 18:51
Ich zeige die Caption im Ereignis onClick() mit ShowMessage() an, aber du kannst damit machen was du willst. Übrigens habe ich die Caption des Button aus einer StringList geholt und den Button in deren Objects-Liste eingetragen - für den Fall der Fälle ...

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Spalten und zeilen zur laufzeit

  Alt 9. Aug 2006, 10:07
Danke für die Hilfe

Ja, die caption habe ich auch benutzt,
funktioniert das auch wenn in den Captions Leerzeichen sind?
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#10

Re: Spalten und zeilen zur laufzeit

  Alt 9. Aug 2006, 10:46
Zitat von Privateer3000:
funktioniert das auch wenn in den Captions Leerzeichen sind?
Da bin ich mir sicher (auch wenn ich dies nicht teste): Captions sind Strings; ShowMessage übernimmt einen String; Strings dürfen Leerzeichen enthalten.

Aber warum probierst Du das nicht erst selbst aus, bevor Du die Allgemeinheit fragst? (Selber machen ist beim Lernen äußerst wichtig!)

Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:17 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