Komponenten mit Scrollbar verschieben, aber nur bestimmt sichtbar?
-
Ich wollte mehrere Komponenten. z.b. TEdits beim bewegen der Scrollbar verschieben. Die Komponenten liegen auf einem Panel und die Scrollbar auch. Nun sollen die Komponeten aber nur auf dem Panel zusehen sein? Gibt es da einen Trick? Ich möchte nur ungern bei jeder Scrollaktion prüfen, ob meine Komponenten außerhalb des Panels sind und dann diese unsichtbar stellen, da es schon viele Komponenten sind.
Hat einer vielleicht eine Idee?
-
Pack deine ganzen Komponenten in eine ScrollBox (ich glaub bei zusätzlich).
Ich denke das ist genau das was du suchst.blue230
-
ah ok, das könnte klappen. und wie krieg ich die jetzt durchsichtig? weil meine labels sind irgendwie alle nicht mehr zu sehen ... (ich habe die scrollbox drübergelegt und dann nach hinten gesetzt). die buttons und editboxen sieht man, aber die labels nicht ...
-
Die Labels müssen in die ScrollBox gelegt werden.
Am besten geht das ganz links - wenn du im Design Modus bist dann siehst du dort am linken Fensterrand Struktur. Dort kannst du die jeweiligen Labels per drag and drop in die ScrollBox ziehen.
Sieht so aus wie bei nem Windows explorer. Stell dir vor die ScrollBox wäre ein Ordner und die Labels müssen darein.
-
Ok damit wäre jetzt schonmal mein Scrollproblem beseitigt
Aber irgendwie will die ScrollBox nicht scrollenwelche Eigenschaft muss ich umstellen, dass auch gescrollt wird in der Box?
-
Sitze gerade an einer ganz ähnlichen Problematik
Weis nicht was du mit geht nich zu scrollen genau meinst.
Falls du mit der Mausrad scrollen meinst so schau einfach mal in diesem Beitrag von mir da hatte ich auch das Prob das es nicht so wollte.http://www.c-plusplus.net/forum/viewtopic-var-t-is-229948.html
ansonsten was geht den nicht genau ?
blue230
-
naja ich meine, ich sehe keine scrollleiste bei mir und wenn ich dynamisch meine komponenten erstelle, welche dann irgendwann mit der platzierung unten aus der scrollbox anlangen, dann sollte man doch scrollen können, da sie ja dann sonst nicht mehr zu sehen sind. Bloß wie stell ich die Scrollfunktion ein? oder wie immer das auch geht
Ich will überhaupt erstmal scrollen können
ob mit oder ohne mausrad, ist mir zurzeit erstmal ziemlich wurscht. ich geb mich erstma mit kleinerm zufrieden ^^
-
Hallo
Die Scrollmöglichkeit kommt automatisch wenn du alles richtig machst. Als Minimalbeispiel :
- neues leeres Projekt
- ScrollBox erstellen, Höhe = 100 setzen
- 3 Labels in der ScrollBox erstellen, jeweils manuell Top auf 10, 60 und 120 einstellen
- Programm kompilierenDann ermöglicht die ScrollBox das Scrollen.
Wenn es bei dir nicht geht hast du etwas falsch gemacht. Was genau können wir hier nur raten. Ich tippe mal auf die nicht vorhandene Unterordnung der Komponenten unter die ScrollBox. Du hast die zwar im Bereich der ScrollBox positioniert, aber die Parent-Eigenschaft zeigt noch immer auf das Form und nicht auf die ScrollBox.bis bald
akari
-
Du hast vollkommen recht! Ich erstelle ja meine Labels und Edits während der Laufzeit und da habe ich glaub ich wirklich die Parenteigenschaft vergessen
-
So jetzt funktioniert das Bewegen aller Komponenten mit der ScrollBox. Aber wenn ich die Position des Vertikalscrollerbalken der ScrollBox auf Maximum setze, dann funktioniert meine Funktion irgendwie nicht mehr. Beim Klick auf den Button soll eine neue Reihe Komponenten erstellt werden (zur Laufzeit), um 30 tiefer (->Top). Aber nach ändern der Position des Scrollerbalkens vergrößert sich der Abstand der Komponentenreihen von 30 auf eine unbestimmte Variable. Ich weiß echt nicht, woran das liegen könnte.
Hier mein Code:
void __fastcall Tfrm_startPacker::btn_addClick(TObject *Sender) { if (edit_length->Text != "" && edit_height->Text != "" && edit_width->Text != "") { // CheckBox für Aktivierung zur Simulation des Packvorgangs check_simulator[i] = new TCheckBox(this); check_simulator[i]->Parent = scr_paletten; check_simulator[i]->Left = 20; check_simulator[i]->Top = 52 + i*30; check_simulator[i]->Checked = true; // Nummerierung durch Label lbl_palCount[i] = new TLabel(this); lbl_palCount[i]->Parent = scr_paletten; lbl_palCount[i]->Left = 50; lbl_palCount[i]->Top = 52 + i*30; lbl_palCount[i]->Caption = IntToStr(i); // Angabefelder // Übergabe der Länge der Palette edit_palLength[i] = new TEdit(this); edit_palLength[i]->Parent = scr_paletten; edit_palLength[i]->Left = edit_length->Left + grp_addPalette->Left; edit_palLength[i]->Top = 50 + i*30; edit_palLength[i]->Width = edit_length->Width; edit_palLength[i]->Text = edit_length->Text; edit_palLength[i]->Alignment = taCenter; // Übergabe der Breite der Palette edit_palWidth[i] = new TEdit(this); edit_palWidth[i]->Parent = scr_paletten; edit_palWidth[i]->Left = edit_width->Left + grp_addPalette->Left; edit_palWidth[i]->Top = 50 + i*30; edit_palWidth[i]->Width = edit_width->Width; edit_palWidth[i]->Text = edit_width->Text; edit_palWidth[i]->Alignment = taCenter; // Übergabe der Höhe der Palette edit_palHeight[i] = new TEdit(this); edit_palHeight[i]->Parent = scr_paletten; edit_palHeight[i]->Left = edit_height->Left + grp_addPalette->Left; edit_palHeight[i]->Top = 50 + i*30; edit_palHeight[i]->Width = edit_height->Width; edit_palHeight[i]->Text = edit_height->Text; edit_palHeight[i]->Alignment = taCenter; // Übergabe des Gewichts der Palette edit_palWeight[i] = new TEdit(this); edit_palWeight[i]->Parent = scr_paletten; edit_palWeight[i]->Left = edit_weight->Left + grp_addPalette->Left; edit_palWeight[i]->Top = 50 + i*30; edit_palWeight[i]->Width = edit_weight->Width; edit_palWeight[i]->Text = edit_weight->Text; edit_palWeight[i]->Alignment = taCenter; // Mitverschieben des Eingabefeldes grp_addPalette->Top += 30; // Scrollbalken nach ganz unten setzen //scr_paletten->VertScrollBar->Position = scr_paletten->VertScrollBar->Range; // i inkrementieren i++; } }
-
Ich glaube, es liegt daran, dass in der ScrollBox die Werte Komponente->Left und Komponente->Top beim Hedrunter- bzw nach Rechtsscrollen wieder kleiner werden. Aber wie kann ich diese zusatzvariable des Scrollen ausgleichen? Beim Erstellen neuer Komponenten bei Laufzeit ist dann die durchmultiplizierte Position (z.b. i*30) nicht mehr richtig ...