Autor |
Beitrag |
Tristan
      
Beiträge: 106
|
Verfasst: Mo 03.04.06 20:12
Hallo,
ich erzeuge dynmaisch mehrere Felder z.B. Memos, die nebeneinander sowie untereinander angeordnet werden sollen. Dass heißt wenn ich zwei memos erzeuge, dann beträgt die Breite eines solchen Memos Delphi-Quelltext 1: 2:
| Memo1.width:=Form1.Width div 2; Memo1.width:=Form1.Width div 2; |
Die Position des zweiten Memos ergäbe sich dann aus:
Delphi-Quelltext 1:
| Memo2.left:=Memo1.widht+10; |
Was für eine Lösung schlagt ihr vor, wenn ich 2 Elemente nebeneinander bzw. 4 Elemente auf jeder "Zeile" haben möchte und dann eine neue "Zeile" beginnen wöllte?
Also z.b. bei insgesamt 4 Memos z.b. 2 Memos auf der ersten Zeile; 2 Memos auf der nächsten Zeile...
Ist ein bisschen umständlich ausgedrückt ^^
Zuletzt bearbeitet von Tristan am Mo 03.04.06 23:01, insgesamt 1-mal bearbeitet
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 03.04.06 22:17
Moin!
Worum gehts hier eigentlich? Fragst du uns jetzt, ob wir dir erklären können, was du willst, oder wie...
cu
Narses
|
|
Tristan 
      
Beiträge: 106
|
Verfasst: Mo 03.04.06 23:02
öhh  ne ich wollte eigentlich wissen wie Ihr/Du das Problem lösen würdest. Bzw. ob du mir sagen kannst wie ich das am besten mache.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 03.04.06 23:07
Moin!
Tristan hat folgendes geschrieben: | ich wollte eigentlich wissen wie Ihr/Du das Problem lösen würdest. Bzw. ob du mir sagen kannst wie ich das am besten mache. |
Was denn? Dein Post ist IMHO so konfus, dass ich praktisch nicht verstehe, was du überhaupt für ein Problem hast...  Du wirst doch wohl selbst am besten wissen, ob oder wann du wo wieviele Memos haben willst, was sollen wir denn dazu sagen?
cu
Narses
|
|
Tristan 
      
Beiträge: 106
|
Verfasst: So 16.04.06 19:20
In der letzen Zeit ist leider nicht so viel geworden aber ich zeuge dir mal meinen Lösungsansatz:
(Die Komponentenbreite/höhe soll sich nach der Anzahl der zu erstellenden Elemente richten)
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:
| var VNC:TDelphiVNCViewer; Memo:TMemo; i,vbreite,vhoehe,vx,vy,ClientAnzahl:integer; Begin ClientAnzahl:=Listbox1.SelCount-1; Case ClientAnzahl of 1..2:Begin vbreite:=(Form1.Width div 2)-282; vhoehe:=vbreite; end; 3..4:Begin vbreite:=(Form1.Width div 2)-282; vhoehe:=vbreite; end; end;
vx:=125; vy:=50; Form1.Caption:='Gesamt: '+inttostr(Form1.width)+' VNC: '+inttostr(vbreite)+' Items: '+ inttostr(Listbox1.SelCount+1);
for I:=Listbox1.SelCount-1 downto 0 do Begin
Memo:=Tmemo.Create(self); with Memo do Begin name:='Viewer'+inttostr(Viewernumber); parent:=self; width:=VBreite; Height:=VHoehe; If I=1 then VX:=125;
Case I of 0..1:Begin left:=Vx; top:=0+vy; end; 2..3:Begin left:=Vx; top:=VHoehe+vy; end; end;
End; end; |
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 18.04.06 01:07
Moin!
Sorry, aber ich verstehe immer noch nicht, was eigentlich dein Problem ist?  Kannst du die Koordinaten nicht berechnen (anscheinend ja schon, oder?) oder klappt was an dem Code nicht...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Tristan 
      
Beiträge: 106
|
Verfasst: Di 18.04.06 09:35
irgendwie ist da der Wurm drin. Der Code funktioniert fehlerhaft - die Komponenten werden dargestellt aber halt immer noch nicht so wie ich möchte.
Ich habe zum besseren Verständis mal eine Skizze angefertigt....
@narses Hast du mein Prob verstanden bzw. kannst du mir da helfen? 
Einloggen, um Attachments anzusehen!
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 18.04.06 09:59
Moin!
Tristan hat folgendes geschrieben: | Ich habe zum besseren Verständis mal eine Skizze angefertigt....
@narses Hast du mein Prob verstanden bzw. kannst du mir da helfen?  |
Ich versuche mal eine Zusammenfassung: du möchtest 1, 2 oder 4 Komponenten unter Beibehaltung des Seitenverhältnisses anordnen, richtig?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Tristan 
      
Beiträge: 106
|
Verfasst: Di 18.04.06 12:29
Narses hat folgendes geschrieben: |
Ich versuche mal eine Zusammenfassung: du möchtest 1, 2 oder 4 Komponenten unter Beibehaltung des Seitenverhältnisses anordnen, richtig?
|
Genau nur das sich die Komponentenbreite auch nach der Anzahl der Elemente richten soll. Wenn man z.B. nur eine Komponente erzeugt, soll diese die volle Breite einnehmen. Wenn man zwei Komponenten erzeugt, soll jede Komponenten die Hälfte der gesamten Breite einnehmen.
D.h. die Größe müsste sich auch im Nachhinein noch ändern lassen. Wenn man also z.B. eine Komponente erzeugt und diese den gesamten Bildschirm bedeckt und man eine zweite Komponente hinzufügt, so muss sich die Breite der zuerst erzeugten Komponente nachträglich verändern.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 18.04.06 12:50
Na ja, aber wo ist das Problem? Ich meine, im Grunde musst du ja nur mittels FindComponent alle erzeugten Memos durchgehen und dann die neue Position und Größe setzen.
Und die Berechnung der Position ist ja relativ einfach:
Quelltext 1: 2: 3: 4: 5:
| Memo-Nummer div Spaltenanzahl = Zeile Memo-Nummer mod Spaltenanzahl = Spalte
Left = Spalte * (Form1.Width div Spaltenanzahl); Top = Zeile * (Form1.Height div Memo-Anzahl div Spaltenanzahl); |
Ich hoffe, ich hab mich da nicht vertan...
+/- 1 fehlt manchmal eventuell noch, ich habs jetzt nicht genau durchgerechnet und es kommt auch drauf an, ob du nullbasiert nummerierst.
|
|
Tristan 
      
Beiträge: 106
|
Verfasst: Di 18.04.06 13:57
Besten Dank! Genau sowas hatte ich mir vorgestellt, wobei ich den Befehl mod noch gar nicht kannte.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.Button1Click(Sender: TObject); var i,Zeile,Spalte,Spaltenanzahl:integer; Memo:array[1..4] of TMemo; begin For i:=1 to length(memo) do Begin Memo[i]:=TMemo.Create(nil); Spaltenanzahl:=2;
Zeile:=I div Spaltenanzahl; Spalte:=I mod Spaltenanzahl;
With Memo[i] do Begin Parent:=self; name:='Memo'+inttostr(i); Left:=Spalte*(Form1.Width div Spaltenanzahl); Top:=Zeile*(Form1.Height div length(Memo) div Spaltenanzahl); End;
End; end; |
Kannst du vielleicht nochmal drüberschauen? Die Spaltenaufteilung haut leider noch nicht ganz hin. Bei 4 Durchläufen betragen die Werte der Variablen Zeile:0; 1; 1; 2; - der Variablen Spalte:1; 0; 1; 0
Danke 
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 20.04.06 18:11
Ich seh es mir nachher an, aber ich glaube, du musst einfach die Schleife von 0 anfangen lassen, dann geht es.
|
|