![]() |
variable felder, string aufspalten,....
hi
ich arbeite zur zeit an einem infoprojekt und könnte etwas hilfe gebrauchen^^ also....ich hab eine globale variable z vom typ integer. die wird auf formular 1 eingegeben. z muss zwischen 10 und 100 liegen und ungerade sein. soweit funktioniert alles wunderbar. jetzt möchte ich das jede zahl von 1 bis z in einem extra feld ausgegeben wird (bin mir noch nicht ganz sicher ob ich besser ein label oder statictext nehmen sollte?). mein problem ist ich weiß nicht wie ich das am besten mache. die zahlen sollten dabei in ziffern aufgespalten werden. also das z.b. bei 13 nicht ein feld mit 13 drin dasteht sondern ein feld mit 1 und ein feld mit 3. wär total nett wenn ihr mir sagen könntet wie ich das am besten auf die reihe kriege. ich hab delphi 7 falls das wichtig sein sollte. danke im voraus -web |
Re: variable felder, string aufspalten,....
Du könntest die Zahl in einen String umwandeln (brauchts du wahrscheinlich sowieso, um sie als Text ausgeben zu können) und den String dann mittels der Funktion "copy" in seine Teile zerlegen. Geht vielleicht auch einfacher, aber nur mal als Vorschlag.
Edit: Du kannst auch direkt auf ein Zeichen eines Strings zugreifen, in der Art:
Delphi-Quellcode:
Das entspräche dann dem ersten Zeichen in dem String.
MeinStringMitDerZahlDrin:=IntToStr(MeineZahl);
Label1.Caption:=MeinStringMitDerZahlDrin[1]; Guido |
Re: variable felder, string aufspalten,....
kleines Schnippsel, was du dir dann zurechtbiegen könntest
Delphi-Quellcode:
Macht nichts anderes, als die einzelnen Ziffern einer Zahl in ein Label zu schreiben...
s := inttostr(zahl); // s ist eine Stringvariable
for i := 1 to length(s) do label1.caption := label1.caption + s[i]+' '; Edit: komische Formatierung... |
Re: variable felder, string aufspalten,....
also....das hab ich grad ausprobiert...danke für den hinweis :)
aber mein prob ist noch....wie krieg ich das prog dazu mir alle zahlen von 1 bis z auszugeben? bis jetzt krieg ich immer nur z raus....bin noch immer für jede hilfe dankbar^^ (sry, blutiger anfänger.....) [edit] btw....aber eigentlich ist mein problem nicht die zahlen in ein label zu kriegen sondern in einzelne. ich glaub in einem label kann ich die danach nicht gut weiterverwenden. ich habe auch überlegt ein array zu erstellen. geht das überhaupt mit einer variable? [/edit] -web |
Re: variable felder, string aufspalten,....
Delphi-Quellcode:
[Edit: in einzelnen Labels:]
if TryStrToInt( s, z) then
for i := 1 to z do s2 := s2 + IntToStr(i) + ' ';
Delphi-Quellcode:
[/Edit]
with TLabel.Create( Form) do
begin Parent = Form; left := i*20; Top := 100; Name := 'Label'+IntToStr(i); Caption := IntToStr(i); end; |
Re: variable felder, string aufspalten,....
Hallo,
da bei z = 99 nicht gut alle Zahlen in einer Zeile angezeigt werden können, zielt alles auf eine zweidimensionale Darstellung hin. Dabei könnte die Komponente TStringGrid (Palettenseite "Zusätzlich") ganz hilfreich sein. Grüße vom marabu |
Re: variable felder, string aufspalten,....
Hallo Achim,
du hast natürlich recht, wir das das auch bewußt, der Code sollte ihm aber zum Verständnis reichen. |
Re: variable felder, string aufspalten,....
Also möchtest du jede Zahl in ein Label schreiben (von 1 bis z) oder nur in ein Label (1, 2, 3 ... z)?
Für das 1.: Zuerst brauchst du die Labels... Am besten in ein Array, dann sind die einfacher zu erreichen:
Delphi-Quellcode:
Nun musst du sie beim Anzeigen der Form erstellen:
var
lbls : array [0..99] of TLabel;
Delphi-Quellcode:
Diese musst du nun passend Anzeigen:
for i := 0 to 99 do
begin lbls[i] := TLabel.Create(<Besitzter>); // Das einzelne Label erstellen (Der Besitzter des Labels, ist normalerweise das Formular, und steht in der Varible "self") with lbls[i] do begin Parent := self; Top := <Y>; //Z.B.: i * 10 + 8; Der Y-Abstand => Dynamisch! Left := <X>; //Z.B.: 8; Der X-Abstand => Statisch! Visble := false; Caption := IntToStr(i + 1); end; end;
Delphi-Quellcode:
for i := 0 to z do // Alle Labels anzeigen, bis "z"
begin lbls[i].Visible := true; end; for i := z + 1 to 99 do // Den Rest ausblenden begin lbls[i].Visible := false; end; |
Re: variable felder, string aufspalten,....
danke für eure hilfe. leider kann ich die guten tipps erst am di in der schule testen wenn ich info hab. aber werdet sicher noch ne menge delphi-verzweiflung von mir zu hören kriegen^^
@xZise: ich möchte jede zahl in ein Label schreiben. und eigentlich sollten zweistellige zahlen noch aufgeteilt werden so das am ende in jedem label wirklich nur eine ziffer steht. -web |
Re: variable felder, string aufspalten,....
Zitat:
|
Re: variable felder, string aufspalten,....
ja. das ist mir so langsam auch klar geworden^^ aber jetzt hab ich das prog angefangen, jetzt will ich es auch fertig kriegen *g* naja, und ich hab noch max. 3 infostunden. aber wird schon....
-web |
Re: variable felder, string aufspalten,....
mal noch ne kleine frage hierzu:
Delphi-Quellcode:
ich krieg es nur hin das die zahlen untereinander stehen. wie kann ich programmieren, dass 9 labels in einer reihe stehen?
with lbls[i] do begin
Parent := self; Top := <Y>; //Z.B.: i * 10 + 8; Der Y-Abstand => Dynamisch! Left := <X>; //Z.B.: 8; Der X-Abstand => Statisch! Visble := false; Caption := IntToStr(i + 1); -web |
Re: variable felder, string aufspalten,....
Hallo,
das Prinzip ist einfach:
Delphi-Quellcode:
Die Konstanten kannst du an deine Bedürfnisse anpassen. Das Ergebnis liefert die Top und Left für Label[i] in Y und X - wenn ich keinen Fehler eingebaut habe.
function LabelToPoint(lbl: TLabel; index: Integer): TPoint;
const MarginLeft = 20; MarginTop = 30; LabelCols = 9; VertGap = 8; HorzGap = 8; begin Result := Point( MarginLeft - HorzGap + (index mod LabelCols) * (lbl.Width + HorzGap), MarginTop - VertGap + (index div LabelCols) * (lbl.Height + VertGap) ); end; Grüße vom marabu |
Re: variable felder, string aufspalten,....
danke für die hilfe. leider geht mein pc in info nicht richtig, also kann ich es erst morgen testen und euch dann weiter mit meiner unwissenheit nerven^^ danke für den tipp, werd's versuchen.
was mir grad noch einfällt: wenn in einem label z.b. 11 stehen hätte.....wie krieg ich es hin dass das in 2 label aufgespalten wird? ich würd das gerne selbst probieren aber ich hab inzwischen wegen den pc-probs richtigen zeitmangel mit meinem projekt. wenn ich alle labels mit einer bestimmten hintergrundfarbe kopieren und neu einfügen möchte mach ich das über copy, oder? danke für eure hilfe. -web |
Re: variable felder, string aufspalten,....
Zitat:
Dafür könntest prüfen, ob der in einen String umgewandelte Wert mehr als eine Stelle hat oder ob der vorherige Integer größer als 9 ist. Zitat:
Zitat:
Um die Frage zu beantworten, im Prinzip JA, denke ich (wenn ichs richtig verstanden habe, was du vorhast). |
Re: variable felder, string aufspalten,....
Zitat:
Zitat:
-web |
Re: variable felder, string aufspalten,....
sry, ich glaub ich bin inzwischen die blödheit in person....
ich krieg das string teilen und in 2 labels ausgeben einfach nicht auf die reihe. ich hab jetzt insgesamt in der prozedur stehen:
Delphi-Quellcode:
ich kriegs einfach nicht auf die reihe so weiter zu machen das ich die zahlen die größer als 9 sind in 2 benachbarten labels auszugeben. wie mach ich das jetzt am besten?
procedure tform1.geben;
var i : integer; s : string; lbls : array [0..99] of TLabel; begin with unit2.form2 do begin for i := 0 to 99 do begin lbls[i] := TLabel.Create (form2); // Das einzelne Label erstellen (Der Besitzter des Labels, ist normalerweise das Formular, und steht in der Varible "self") with lbls[i] do begin Parent := form2; Top := i*19 ; //dynamischer y-abstand Left := 19; //statischer x-abstand Visible := false; Caption := IntToStr(i + 1); end; end; for i := 0 to z do // labels bis z anzeigen begin lbls[i].Visible := true; end; for i := z to 99 do // anderen labels nicht anzeigen begin lbls[i].Visible := false; end; if i>9 then begin s := inttostr(i); end; spielen; end; end; thx für die ganzen hilfen aber ich kriegs absolut nicht auf die reihe.... -web |
Re: variable felder, string aufspalten,....
Hallo,
angenommen du hast deine Labels bereits alle erzeugt und sie stehen in einer TComponentList bereit:
Delphi-Quellcode:
Getippt und nicht getestet.
procedure ShowDigits(
cl: TComponentList; // Liste mit den Labels const number: Cardinal; // darzustellende Zahl var index: Integer // erster zu verwendender Label ); var s: string; i: Integer; begin s := IntToStr(number); for i := 1 to Length(s) do begin TLabel(cl[index]).Caption := s[i]; Inc(index); end; end; Das sind so wenige Zeilen - da solltest du dir einen Zugang erarbeiten können. Aufmunternde Grüße |
Re: variable felder, string aufspalten,....
danke :)
ich hab mein projekt jetzt fertig, muss es morgen vorstellen und abgeben. danke für die ganzen hilfen :) ich schreib euch dann was bei rausgekommen ist. -web |
Re: variable felder, string aufspalten,....
nochmal ein dickes thx!
hab auf mein programm 14 punkte, also ne 1 bekommen. :) thx an alle!! -web |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz