Autor |
Beitrag |
FiceGoesDelphi
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Do 10.01.08 10:25
Morgen,
mein Problem ist folgendes:
Ich speicher schon verschiedene UserSpezifische Eingaben in Edit-Feldern etc in einem ConfigurationsTool ab. Nun möchte ich aber auch die letzte Position von der Anwendung wissen und beim nächsten starten der Anwendung, diese an der gleichen Stelle auf dem Bildschirm öffnen.
Ich habe mir schon Gedanken gemacht, was ich alles beachten muss:
- Position verschieben wenn die Anwendung schon offen ist, damit nicht 2 Anwendungen genau aufeinander liegen.
- Überprüfen ob die letzte Position jetzt im sichtbaren Bereich wäre (Vorher 2 Monitore und jetzt nur 1 z. B.)
Ich hab nur keinerlei Anfangspunkt.
Screen.WorkAreaTop und Screen.WorkAreaLeft könnten mir helfen oder?
Aber ich habe mich noch nie wirklich mit sowas auseinander gesetzt.
Kennt vielleicht jemand ein gutes Tutorial oder kann mir nen Anfangs geben?
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 10.01.08 10:34
Ich glaube, Screen.Width und Screen.Height liefern dir Breite/Höhe des Bildschirms (Auch bei Multi-Monitoring Systemen (?))
Die Position der Form kannst du ja mit Formx.Top / Left ermitteln und dann in eine Ini-Datei per WriteInteger speichern. Beim nächsten Starten des Programms dann im Formcreate die Position setzen
Oder hast du ein anderes Problem/Hab ich was falsch verstanden?
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 10.01.08 10:35
Speicher einfach Left, Top, Width und Height der Form ab und lade diese Werte bei Programmstart. Zum Beispiel in einer Ini-Datei oder in der Registry. Zur "Gültigkeitsüberprüfung" sollten die Werte Screen.Width und Screen.Height ausreichen, evtl auch die Workarea-Variante.
Das Überdecken anderer Anwendungen abzufangen halte ich für unnötig.
Wenn du deine Form auch maximieren kannst, dann sit auch noch dieser Thread interessant.
_________________ We are, we were and will not be.
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Do 10.01.08 10:48
Erstmal vielen Dank für die Antworten!!
Die Größe der Form lasse ich vom User nicht verändern. Das ist somit erstmal uninteressant für mich.
Ich werde dann also Form.Top und Form.Left abspeichern und dann muss ich ja noch prüfen ob diese Werte (Top und Left) im Bereich der WorkArea sind.
Quelltext 1: 2:
| if (frmHistoryCleaner.Top < Screen.WorkAreaTop) and (frmHistoryCleaner.Left < Screen.WorkAreaLeft) then alles ok ^^ |

_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 10.01.08 10:54
Naja, top und left sollten größer als 0 (bzw. Workarea.Top) sein, top+height sollte kleiner als Screen.height sein, und left+width kleiner als Screen.width. Dann sollte die Form komplett sichtbar sein.
_________________ We are, we were and will not be.
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Do 10.01.08 10:57
Wieso gibt es nicht einfach eine einfache Funktion für?
Naja vielen Dank! Ich werde dann mal alle möglichkeiten abfragen, die du jetzt aufgezählt hast 
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Do 10.01.08 11:41
Gausi hat folgendes geschrieben: | Naja, top und left sollten größer als 0 (bzw. Workarea.Top) sein, top+height sollte kleiner als Screen.height sein, und left+width kleiner als Screen.width. Dann sollte die Form komplett sichtbar sein. |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if ( ( iTop + iLeft ) > Screen.WorkAreaTop ) and ( ( iTop + iLeft ) > 0 ) then begin if ( ( iTop + iHeight ) < Screen.Height ) then begin if ( ( iLeft + iWidth ) < Screen.Width ) then begin frmHistoryCleaner.Top := iTop; frmHistoryCleaner.Left := iLeft; end; end; end; |
Wenn ich mich nicht ganz vertan habe, habe ich alles was du gesagt hast mit eingebunden.
Das funktioniert soweit auch ganz gut solange ich EINEN MONITOR habe.
Sobald die Anwendung auf dem zweiten Monitor ist, wird die Anwendung auf den Hauptbilschirm zentriert geöffnet.
Tante Edit sagt:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if ( ( iTop + iLeft ) > Screen.WorkAreaTop ) and ( ( iTop + iLeft ) > 0 ) then begin if ( ( iTop + iHeight ) < Screen.DesktopHeight ) then begin if ( ( iLeft + iWidth ) < Screen.DesktopWidth ) then begin frmHistoryCleaner.Top := iTop; frmHistoryCleaner.Left := iLeft; end; end; end; |
So funktioniert es fast perkeft.
Jetzt muss ich nur noch irgendwie prüfen, ob das Fenster unter der Taskleiste verschwindet.
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Fr 11.01.08 10:24
Ich hab ein neues Problem hierbei.
Was ist wenn die Koordinaten Negativ sind?
Also man die Bildschirme einfach umdreht und nummer 2 Links ist!
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Mo 14.01.08 09:56
FiceGoesDelphi hat folgendes geschrieben: | Ich hab ein neues Problem hierbei.
Was ist wenn die Koordinaten Negativ sind?
Also man die Bildschirme einfach umdreht und nummer 2 Links ist! |
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mo 14.01.08 10:07
Kommt man mit Screen.DesktopRect weiter?
_________________ We are, we were and will not be.
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Mo 14.01.08 10:48
Gausi hat folgendes geschrieben: | Kommt man mit Screen.DesktopRect weiter? |
Morgen,
mit Screen.DesktopRect kann ich im Debugger sehen, dass ich negative Koordinaten erkenne.
Ich kann auch auf die einzelnen Koordinaten zugreifen. Aber wie muss ich das jetzt in meinen Code einbauen
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Koordinaten := Screen.DesktopRect;
if ( ( iTop + iLeft ) > Koordinaten.Top ) and ( ( iTop + iLeft ) > Koordinaten.Left ) then begin if ( ( iTop + iHeight ) < Screen.DesktopHeight ) then begin if ( ( iLeft + iWidth ) < Screen.DesktopWidth ) then begin frmHistoryCleaner.Top := iTop; frmHistoryCleaner.Left := iLeft; end; end; end; |
Man ist das schwer 
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Di 15.01.08 10:29
Ein weiteres Problem was mir noch eingefallen ist:
Wenn ich z. B. die "größe der Monitore" verändert habe (in den Einstellungen in denen man auch den Hauptmonitor links oder rechts positionieren kann) und das Fenster so positioniere, dass es auf beiden Monitoren ist, wäre in der Mitte ein "knick".
Das muss ja auch noch berücksichtigt werden.
*verzweifel*
Beim InternetExplorer geht das. Da funktioniert alles ...
Hallo?? Wenn die von Windoof das packen, wird das für uns doch kein Problem sein ... 
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 15.01.08 10:35
Um was für eine Anwendung geht es denn? Wird die regelmäßig eingesetzt an Stellen, wo häufig die Monitorkonfigration geändert wird? Ein Fenster, das sich über 2 Monitore erstreckt, darf imho auch einen Knick haben, wenn man die Monitore komisch positioniert.
Zu dem anderen: Einfach mal aufmalen, was so passieren kann, und wo die Koordinate 0/0 liegen kann, und was das so für Auswirkungen auf die erlaubten Positionen hat.
_________________ We are, we were and will not be.
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Di 15.01.08 10:54
Gausi hat folgendes geschrieben: | Um was für eine Anwendung geht es denn? Wird die regelmäßig eingesetzt an Stellen, wo häufig die Monitorkonfigration geändert wird? Ein Fenster, das sich über 2 Monitore erstreckt, darf imho auch einen Knick haben, wenn man die Monitore komisch positioniert.
Zu dem anderen: Einfach mal aufmalen, was so passieren kann, und wo die Koordinate 0/0 liegen kann, und was das so für Auswirkungen auf die erlaubten Positionen hat. |
Es geht um eine Anwendung, die von vielen verschiedenen Usern genutzt werden kann, die verschiedene Monitoreinstellungen haben. Die Anwendung wird eher selten benutzt aber ich soll von einer täglichen Nutzung ausgehen, welche sich in den nächsten Monaten durchaus realisieren kann.
Ich hab momentan einfach keinen Startpunkt. Das ist frustrierend.
Naja danke für deine Hilfe aber ich kriegs nicht hin *gg*
Ich hoffe mein Chef hat nachher mal 5 Minuten Zeit und erklärt mir das =/
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 15.01.08 12:00
FiceGoesDelphi hat folgendes geschrieben: | Es geht um eine Anwendung, die von vielen verschiedenen Usern genutzt werden kann, die verschiedene Monitoreinstellungen haben. Die Anwendung wird eher selten benutzt aber ich soll von einer täglichen Nutzung ausgehen, welche sich in den nächsten Monaten durchaus realisieren kann. |
Dann speichere doch die Position für jeden Nutzer und nicht global. Zum Beispiel eine Ini-Datei im Anwendungsdaten-Verzeichnis des Users. Dann kann jeder Nutzer das Programm so verschieben, wie er will, und man bekommt höchstens mal Probleme, wenn der Nutzer seine Monitore komplett umkonfiguriert.
_________________ We are, we were and will not be.
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Di 15.01.08 12:07
Gausi hat folgendes geschrieben: | FiceGoesDelphi hat folgendes geschrieben: | Es geht um eine Anwendung, die von vielen verschiedenen Usern genutzt werden kann, die verschiedene Monitoreinstellungen haben. Die Anwendung wird eher selten benutzt aber ich soll von einer täglichen Nutzung ausgehen, welche sich in den nächsten Monaten durchaus realisieren kann. | Dann speichere doch die Position für jeden Nutzer und nicht global. Zum Beispiel eine Ini-Datei im Anwendungsdaten-Verzeichnis des Users. Dann kann jeder Nutzer das Programm so verschieben, wie er will, und man bekommt höchstens mal Probleme, wenn der Nutzer seine Monitore komplett umkonfiguriert. |
Juhu... wir haben die ganze Zeit aneinander vorbei geredet.
Das mache ich schon längst! Für jeden User speicher ich die:
frmHistoryCleaner.Top
frmHistoryCleaner.Left
frmHistoryCleaner.Width
frmHistoryCleaner.Height
Die Form nun ganz normal wieder da zu öffnen, wo sie geschlossen wurde habe ich hinbekommen.
Die Form an einer Default-Position zu öffnen wenn sie nicht mehr zu sehen ist auf dem Desktop ist auch erledigt.
Aber nun auch darauf zu achten ob der Hauptbildschirm wirklich der erste von links ist, ist mein größtes Problem.
Also die Form auch auf negativen Koordinaten zu erzeugen. Und ausgerechnet mein Chef hat die Monitore so angeordnet (Rechts der Hauptbildschirm...)
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 15.01.08 12:14
Wenn der Hauptmonitor rechts ist, dann hat das DeskTopRect doch einen negativen Left-Wert, und Right ist die Breite des Hauptmonitors, oder? Und wenn der Hauptmonitor links ist, dann ist left=0 und right=Summe der beiden Monitor-Weiten.
Oder verstehe ich dein Problem immer noch nicht? 
_________________ We are, we were and will not be.
|
|