Autor Beitrag
Tristan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 03.04.06 22:17 
Moin!

:gruebel:
Worum gehts hier eigentlich? Fragst du uns jetzt, ob wir dir erklären können, was du willst, oder wie... :?

cu
Narses
Tristan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Mo 03.04.06 23:02 
öhh :mrgreen: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 03.04.06 23:07 
Moin!

user profile iconTristan 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... :gruebel: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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)

ausblenden volle Höhe Delphi-Quelltext
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
{  VNC:=TdelphiVNCViewer.Create(self);}
   Memo:=Tmemo.Create(self);
    with Memo do
    Begin
    name:='Viewer'+inttostr(Viewernumber);
    parent:=self;
    //Anweisungen für die Aufteilung
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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... :gruebel:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Tristan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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? :wink:
Einloggen, um Attachments anzusehen!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 18.04.06 09:59 
Moin!

user profile iconTristan 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? :wink:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Di 18.04.06 12:29 
user profile iconNarses 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Di 18.04.06 13:57 
Besten Dank! Genau sowas hatte ich mir vorgestellt, wobei ich den Befehl mod noch gar nicht kannte.

ausblenden 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..4of 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 :wink:
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.