Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Größe von TWinControl-Komponenten beschränkt? (https://www.delphipraxis.net/22219-groesse-von-twincontrol-komponenten-beschraenkt.html)

Zottel 14. Mai 2004 10:28


Größe von TWinControl-Komponenten beschränkt?
 
HalliHallo

Ich weiss nicht mehr weiter. Vielleich könnt ihr mir ja helfen.
Es ist eine Herrausforderung an 2 Stellen in meinen Programmen aufgetreten:
In einem Planer für die Terminierung von Mitarbeitern ist in der Übersicht ein TADVStringGrid von TMS mit einer höhe von 1320 eingebaut.
Das ganze ist in einer ScrollBox. Aber einer bestimmten Höhe (scheint screen.height zu sein), wird das Grid nicht mehr neu gezeichnet. es ist einfach ein weißes Feld zu sehen. Der fehler tritt auch bei einem anderen grid auf.
Auf die Screen.height bin ich gekommen, weil bei mir der fehler bei einer auflösung von 1600*1200 nicht auftritt, während er bei einer 1280*1024 auflösung doch schon störend ist.
Das gleiche Problem tritt an einer anderen Stelle auf:
Wenn ich ein Panel länger machen will, als die bildschirmbreite, lässt es sich nicht weiter aufziehen.
Setzen kann ich das panel auf eine breite , die größer ist, als die bildschirmbreite. wenn ich dann aber versuche, das Panel per Mausclick@Runtime weiter aufzuziehen, schnuppert es zurück, oder geht nicht weiter..... :gruebel:

das ist die routine, die ich in MouseDown des Panels eingebunden habe:

Delphi-Quellcode:
procedure TForm1.MasterPanelMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var SicherungTop:Integer;
begin
  SicherungTop:=(Sender as TADVPanel).top;
  ReleaseCapture;
  (Sender as TADVPanel).Cursor:=crSizeWE;
  //TWinControl(Sender).Perform(WM_SysCommand,$F012,0); //verschieben
  //TWinControl(Sender).Perform(WM_SysCommand,$F001,0); //linke seite verändern
  TWinControl(Sender).Perform(WM_SysCommand,$F002,0); //rechte verändern
  //TWinControl(Sender).Perform(WM_SysCommand,$F003,0); //obere seite verändern
  //TWinControl(Sender).Perform(WM_SysCommand,$F004,0); //links oben verändern
  //TWinControl(Sender).Perform(WM_SysCommand,$F005,0); //rechts oben verändern
  //TWinControl(Sender).Perform(WM_SysCommand,$F006,0); //untere seite verändern
  //TWinControl(Sender).Perform(WM_SysCommand,$F007,0); //links unten verändern
  //TWinControl(Sender).Perform(WM_SysCommand,$F008,0); //rechts unten verändern
  (Sender as TADVPanel).Cursor:=crDefault;
end;
Wie kann ich die beschränkung aufheben? Größere Flachbildschirme für höhere Auflösungen sind abgelehnt worden :wink:
wie gesagt, ich weiss nicht mehr weiter....

danke schonmal im vorraus

[edit=sakura] [delphi]tags Mfg, sakura[/edit]

SirThornberry 14. Mai 2004 12:01

Re: Größe von TWinControl-Komponenten beschränkt?
 
Also, ich hab grad mal eine Scrollbox genommen, darein ein Panel gepackt, und im Create des Forms hab ich Panel.width auf 5000 gesetzt, Das Programm hab ich dann auf Vollbild gestretcht und die scrollbar in der scrollbox ist ungefähr ein 5tel der Sichtbaren fläche bei 1024... also scheints bei mir zu funktionieren.... Oder ich hab dein Problem missverstanden

Warum arbeitest du eigentlich mit Perform? Vielleicht liegt es ja daran weil bei dem eigentlichen Perform wenn man das mit der Maus macht das auch nicht größer geht weil die maus ja dann am bildschirmrand anschlägt

Zottel 14. Mai 2004 12:21

Re: Größe von TWinControl-Komponenten beschränkt?
 
Hmmm... dann scheint das bei dir hinzuhauen. Das grid wird ab einer bestimmten höhe einfach nicht mehr neu gezeichnet.....
bei mir scheint das auch hinzuhauen, aber bei den Teamleiter-Rechnern nicht.... misteriös...... ok. danke dir jedenfalls für ausprobieren. Liegt dann vielleicht am grafikkartentreiber....... ich muss nochmal ein paar versuche starten......

zu dem Perform:
Wenn du eine bessere Lösung hättest, wäre ich echt dankbar.
Denn das war das einzige, was ich gefunden hatte, womit man den Benutzer die größe einer Komponente ändern lassen kann, so wie er will.
Aber du hast schon recht. Bei der mausführung würde er an den rand stossen.....

Ddanke erstmal ;-)

SirThornberry 14. Mai 2004 13:06

Re: Größe von TWinControl-Komponenten beschränkt?
 
einfach
Delphi-Quellcode:
TWinControl(Sender).Width := 5000;
Ich glaub ich hab dich falsch verstanden, denn die lösung wäre zu simpel und mit top machst dus ja bereits so

Zottel 14. Mai 2004 13:28

Re: Größe von TWinControl-Komponenten beschränkt?
 
Ok. hat sich erledigt. hab ne routine gefunden, mit der man die groesse auch noch bessern ändern kann.
jezze ist nur noch das prob mit dem Grid... aber da werd ich auch noch ne möglichkeit finden ... :gruebel:


Vielen dank jedenfalls :-D

Zottel 14. Mai 2004 17:52

Re: Größe von TWinControl-Komponenten beschränkt?
 
Hmpf... das Grid und die Komponenten werden scheinbar nur bis zur Desktop-größe gepainted.
Es liegt also nicht an Treibern oder so.
Wenn ich das Grid die auflösung überschreitet, wird es nicht mehr gezeichnet.
Weiss einer zufällig, wie man das umgehen kann? Oder die größe des Bereiches ändern kann?

vielen dank schonmal

mschaefer 14. Mai 2004 21:46

Re: Größe von TWinControl-Komponenten beschränkt?
 
Moin moin Zottel

also normalerweise kann man mit Invalidate ein Zeichnen neu auslösen. Da du ber was mit StringGrid macht fällt mir dazu folgendes ein: Die sint aus einzelnen StrinListen zusammengebaut und das ist von der Speicherauslastung eher gruselig programmiert. Wenn man große Grid´s hat müßte man eingentlich mit Hash-Tables arbeiten. Als Fehlerquelle würde ich daher nach einer etwas an der Taktrenze arbeitenden Speichrbank oder einen lausigen Bildschirmtreiber ansehen. Probier Dein Programm mal auf mehren Rechnern aus. An ein reines Programmierproblem glaube ich da nicht.

Grüße // Martin

Muetze1 14. Mai 2004 21:50

Re: Größe von TWinControl-Komponenten beschränkt?
 
Moin!

Zitat:

Zitat von mschaefer
also normalerweise kann man mit Invalidate ein Zeichnen neu auslösen.

Nicht direkt. Invalidate markiert den Bereich des Controls nur als "dreckig", so dass dieses beim nächsten Paint im Update-Bereich des Paints liegt. Das Paint selber wird erst mit einem UpdateWindow(Handle) ausgelöst, Invalidate merkt das nur vor.

MfG
Muetze1

mschaefer 14. Mai 2004 21:59

Re: Größe von TWinControl-Komponenten beschränkt?
 
Hi Muetze1,

Excelente Beschreibung, so isses !

Danke // Martin

Zottel 14. Mai 2004 22:32

Re: Größe von TWinControl-Komponenten beschränkt?
 
Haut aber scheinbar doch nicht hin.
Das Grid scheint ab da nicht mehr zu existieren. Ich werd einfach das Grid runterschmeissen und aufm Canvas malen.....
Das es ja scheinbar nochnichtmal hinhaut, Labels so zu Createn, das sie sich bei einem Grid mit Scrollbars beim scrollen mitbewegen, bleibt mir nix anderes übrig.... :cry:

Danke jedenfalls.

mschaefer 14. Mai 2004 22:39

Re: Größe von TWinControl-Komponenten beschränkt?
 
Sag mal Zottel,

wieso steckst Du das Grid eigentlich in eine ScrollBox. Das Grod hat doch Scrollbalken.
Ist mir nicht klar ( da mein Zehnfingersystem schon Ausfallerscheinungen hat, kann das
aber auch am Müdigkeitslevel liegen...

Grüße // Martin

Zottel 14. Mai 2004 22:44

Re: Größe von TWinControl-Komponenten beschränkt?
 
Die Labels, die die eingetragenen Termine anzeigen, werden zur Laufzeit erzeugt.
Ich habe schon versucht, das grid mit scrollbalken und den Labels darauf zu erstellen, aber wenn ich dann das grid scrolle, bleiben die labels an der Stelle, wo sie waren. Irgendwo mußte ich da nen denkfehler haben. Naja.. die scrollbox mit grid und labels scrollen, war eine möglichkeit, dieses prob schnellstmöglichst zu umgehen. funzte auch bis zu dem zeitpunkt, als das grid mehr als 50 Plaätze fassen mußte. Ab da wurde es scheinbar zu groß... :gruebel:
Und seitdem bastel ich daran rum.

mschaefer 15. Mai 2004 10:45

Re: Größe von TWinControl-Komponenten beschränkt?
 
Moin, moin

Fein heute mit gutem Wachzustand und dennoch mit Fragen: Du schreibst Deine Termine in Labels
die auf einem Grid liegen. Offensichtlich benutzt Du dann nicht die Zellen zum eintragen. Hm wäre das nicht der übliche Weg ? Hier kannst Du doch auch Text Farbe und Ränder ändern.

Ach so, der Weg mit den Labels hat sicherlich auch noch andere Formatierungsmöglichkeiten.
Nehmen wir mal an Du würdest eine StringGrid - Komponenten ableiten, die an jeder Zelle ein
Label angebunden hat. Wenn die Labels dann standartmässig auf invisible stehen bräcuhtest Du diese bei Terminen nur auf visilbe zu schalten...

Grüße // Martin

Zottel 15. Mai 2004 11:48

Re: Größe von TWinControl-Komponenten beschränkt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moinmoin
Theoretisch richtig. Die labels habe ich nur genommen, weil man die anfassen und verscheiben können muss. Ausserdem Ist eine Gitterzelle ein Paltz an einem Tag. Folglich können 2 oder sogar 3 labels die schichten auf einem Platz anzeigen und leigen somit "in" einer Zelle.
Das Grid ist eigendlich nur dazu da, um die Labels aufzunehmen, die platznummer darzustellen und ein raster darzustellen ;-)

hab mal nen Screenshot in den ahnag gelegt......

Danke :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 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-2025 by Thomas Breitkreuz