AGB  ·  Datenschutz  ·  Impressum  







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

Labels vertikal dynamisch einordnen?

Ein Thema von AlexII · begonnen am 28. Jan 2014 · letzter Beitrag vom 28. Jan 2014
Antwort Antwort
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Labels vertikal dynamisch einordnen?

  Alt 28. Jan 2014, 20:17
Hallo,

ich habe folgendes Problem. Ich möchte 14 Labels vertikal, links am Rand nacheinander einordnen, hier ein Beispiel:

Zitat:
Titel: Mark Mascher

Text: Hier kommt ein langer,
langer Text... usw.

Preis: 14,00€
Nun habe ich mit Label.Top-Werter gerechnet, aber sobalt sich was in meinem Vorhaben ändert, z.B. kommt noch ein Label irgendwo dazwischen hinzu, dann muss ich Stundenlang meine Label.Top-Werte manuell neu berechnen.

Kann man irgendwie die Labels dynamisch bzw. automatisch nacheinander einordnen. Dabei ist es mir sehr wichtig, dass die Labels nicht in EIN String gepackt werden, den ich möchte mit den Label getrennt bestimmte Ereignisse erledigen.

Danke!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Labels vertikal dynamisch einordnen?

  Alt 28. Jan 2014, 23:08
Du könntest eine Funktion nutzen, der Du die Label übergibst und die Y automatisch incrementiert.
Etwa so:
Delphi-Quellcode:
function ShowLabel(aLabel: TLabel; var Y: Integer);
begin
  aLabel.Top := Y;
  ...
  Inc(Y, 16);
end;


...
  Y := 0;
  ShowLabel(LabelA, Y);
  ShowLabel(LabelB, Y);
...
Dann lassen sich leicht Anweisungen dazwischen fügen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Labels vertikal dynamisch einordnen?

  Alt 28. Jan 2014, 23:19
Align (alTop) kennst du schon?

Ansonsten gäbe es in neueren Delphis, oder als Fremdkomponente, auch Komponenten/Container, welche sowas machen.
> Delphi-Referenz durchsuchenTGridPanel, Delphi-Referenz durchsuchenTFlowPanel usw.

Oder du mußt einfach bei allen Kompoenten das OnResize abfangen und die Positionen neu berechnen. (machen die Container auch nicht anders)

Oder man trennt die GUI von der Logik.
> Da kann man im Hintergrund die Strings gern einzeln verwalten, aber in der Darstellung ist alles eine große Komponente (Edit, RichEdit, WebBrowser, ....).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Jan 2014 um 23:22 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Labels vertikal dynamisch einordnen?

  Alt 28. Jan 2014, 23:24
Eventuell das hier. Ist alles mit einem Label lösbar:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s1, s2, s3, s4, s5, s6: String; //usw. bis s14
  i: Integer;
  FormStr: String;
begin
  Label1.WordWrap := True;
  Label1.Width := 500;

  s1 := 'Titel: Mark Mascher';
  s2 := '';
  s3 := 'Text: Hier kommt ein langer,';
  s4 := 'langer Text... usw.';
  s5 := '';
  s6 := 'Preis: 14,00€';

  FormStr := '';
  for i := 1 to 6 do FormStr := FormStr + '%s ' + ^j; //To-Wert anpassen an Anzahl Strings

  Label1.Caption := Format(FormStr, [s1, s2, s3, s4, s5, s6]);
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Labels vertikal dynamisch einordnen?

  Alt 28. Jan 2014, 23:29
'%s ' + ^j

Und das soll jemand verstehen?
J = 10. Buchstabe = #10, also '%s' + #10 oder '%s'#10 (+ ist hier nicht nöig)

Wobei es im Windows ja eigentlich #13#10 heißt , oder einfach Delphi-Referenz durchsuchensLineBreak.

PS: Delphi-Referenz durchsuchenDupeString (Delphi-Referenz durchsuchenStringOfChar)
Delphi-Quellcode:
Label1.Caption := Format(DupeString('%s' + sLineBreak, 6), [s1, s2, s3, s4, s5, s6]);

// oder halt

Label1.Caption := s1 + sLineBreak + s2 + sLineBreak + s3 + sLineBreak + s4 + sLineBreak + s5 + sLineBreak + s6;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Jan 2014 um 23:35 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Labels vertikal dynamisch einordnen?

  Alt 28. Jan 2014, 23:42
^j ist alter Ascii-Code Steuercode LF (Line Feed / Zeilenvorschub). Es ist nicht nur einfach #10. Wikipedia schreibt dazu (bitte beachten was es unter Windows bedeutet):

Zitat:
Bewegt den Druckkopf/Cursor in die nächste Zeile. Wenn zwischen Sender und Empfänger abgesprochen, bedeutet es „New Line“, wobei die erste Druckposition der nächsten Zeile angefahren wird. Wird unter Unix und Mac OS X als „Zeilenendezeichen“ benutzt. Unter MS-DOS oder Microsoft Windows wird mit der Kombination „Carriage Return“ + „Line Feed“ eine Zeile beendet.
Ich nutze ^j seit dem ich denken kann, sehe aber ein, dass ich wohl einer der wenigen bin. Auch denke ich, dass das unter Windows seine Bedeutung behalten wird. Trotzdem ist unter Delphi #13#10 üblicher.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Labels vertikal dynamisch einordnen?

  Alt 28. Jan 2014, 23:56
Nicht nur unter Delphi.

Windows und Delphi (TStringList, ReadLn usw.) verstehen zwar fast immer alle möglichen Kombinationen (Windwos #13#10, Unix #10 und Mac #13),
aber eigentlich ist im Windows weitgehenst CRLF üblich.

Die MEMO's normalisieren das auch auf #13#10.
(Nur die aktuelle RichEdit-Version nutzt komischer Weise die #13, welches im Delphi aber teilweise versucht wurde abzufangen, was allerdings nicht gut und vorallem durchgängig gelingt).


OK, es wäre schön, wenn es soein Kürzel gäbe, was aber eine "passende" Zeichenfolge liefert, so wie das sLineBreak, was im Code manchmal echt umständlich/häßlich ist.
Miniaturansicht angehängter Grafiken
unbenannt3.png  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Jan 2014 um 00:01 Uhr)
  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 04:11 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