Tag tomsamson.
ich öffne ein modeless dialog per js,soweit so gut,wenn ich aber die Höhe ändere (durch ändern des dialogHeight Parameters),verschiebt es immer das Dialogfenster an die Position,wo es ursprünglich geöffnet wurde.
So ganz ohne relevanten Code kann ich dir vorerst nur die Lektüre von MSDN: showModelessDialog-Methode empfehlen.
Siechfred
Hallo Siechfred,danke für die Antwort,
auf msdn hab ich schon geschaut,aber da wird nur erklärt,wie man das modeless dialog benutzt,leider steht da nichts zu meinem Problem.
Ich hoffe mit einem Beispiel wird mein Problem klarer:
Ok,das folgende bitte einfach in eine Textdatei einfügen und dann als html datei speichern:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>showModelessDialog Method</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1">
<META NAME="AUTHOR" CONTENT="InetSDK">
<META NAME="MS.LOCALE" CONTENT="EN-US">
<META NAME="ROBOTS" CONTENT="noindex">
<SCRIPT>
function fnResize(){
mywindow.dialogHeight="300px"
}
function fnRandom(iModifier){
return parseInt(Math.random()*iModifier);
}
function fnSetValues(){
var iHeight=oForm.oHeight.options[oForm.oHeight.selectedIndex].text;
if(iHeight.indexOf("Random")>-1){
iHeight=fnRandom(document.body.clientHeight);
}
var iWidth=oForm.oWidth.options[oForm.oWidth.selectedIndex].text;
if(iWidth.indexOf("Random")>-1){
iWidth=fnRandom(document.body.clientWidth);
}
var iTop=oForm.oTop.options[oForm.oTop.selectedIndex].text;
if(iTop.indexOf("Random")>-1){
iTop=fnRandom(screen.height);
}
var iLeft=oForm.oLeft.options[oForm.oLeft.selectedIndex].text;
if(iLeft.indexOf("Random")>-1){
iLeft=fnRandom(screen.width);
}
var sEdge=oForm.oEdge.options[oForm.oEdge.selectedIndex].text;
var bCenter=oForm.oCenter.options[oForm.oCenter.selectedIndex].text;
var bHelp=oForm.oHelp.options[oForm.oHelp.selectedIndex].text;
var bResize=oForm.oResize.options[oForm.oResize.selectedIndex].text;
var bStatus=oForm.oStatus.options[oForm.oStatus.selectedIndex].text;
var sFeatures="dialogHeight: " + iHeight + "px; dialogWidth: " + iWidth + "px; dialogTop: " + iTop + "px; dialogLeft: " + iLeft + "px; edge: " + sEdge + "; center: " + bCenter + "; help: " + bHelp + "; resizable: " + bResize + "; status: " + bStatus + ";";
return sFeatures;
}
function fnOpen(){
/* The method constructor looks like:
showModelessDialog(
sURL="The page that is opened"
sArguments="Extra values or object references"
sFeatures="features of the window";
)
*/
var sFeatures=fnSetValues();
mywindow=window.showModelessDialog("SMLD_target.htm", oForm.oArguments.value, sFeatures)
}
</SCRIPT>
<!-- SAMPLE_STYLE_START -->
<LINK REL="stylesheet" HREF="/workshop/basicSDKIE4.css"
TYPE="text/css">
<!-- SAMPLE_STYLE_END -->
</HEAD>
<!--TOOLBAR_START-->
<!--TOOLBAR_EXEMPT-->
<!--TOOLBAR_END-->
<BODY TOPMARGIN=0 LEFTMARGIN=0 BGPROPERTIES="FIXED" BGCOLOR="#FFFFFF"
LINK="#000000" VLINK="#808080" ALINK="#000000">
<BLOCKQUOTE CLASS="body">
<H1>showModelessDialog Method</H1>
<P>This sample demonstrates the use of the <b>showModelessDialog</b> method. Select the possible values for the supported parameters to adjust how the modeless dialog box is displayed. Click the Push To Create button to open the modeless dialog box based upon the selected values.
The method syntax used to open the window is displayed at the bottom of the page when the dialog box is opened.</P>
<FORM NAME="oForm">
<FIELDSET><LEGEND><b>showModelessDialog Method Options</b></LEGEND>
<TABLE>
<TR><TD><LABEL FOR=dHeight>Dialog Box Height (Integer)</LABEL></TD><TD><SELECT ID="dHeight" NAME=oHeight><OPTION>-- Random --<OPTION>150<OPTION>200<OPTION>250<OPTION>300<OPTION>400<OPTION>500</SELECT></TD></TR>
<TR><TD><LABEL FOR=dWidth>Dialog Box Width (Integer)</LABEL></TD><TD><SELECT ID="dWidth" NAME=oWidth><OPTION>-- Random --<OPTION>150<OPTION>200<OPTION>250<OPTION>300<OPTION>400<OPTION>500</SELECT></TD></TR>
<TR><TD><LABEL FOR=dTop>Dialog Box Top (Integer)</LABEL></TD><TD><SELECT ID="dTop" NAME=oTop><OPTION>-- Random --<OPTION>150<OPTION>200<OPTION>250<OPTION>300<OPTION>400<OPTION>500<OPTION></SELECT></TD></TR>
<TR><TD><LABEL FOR=dLeft>Dialog Box Left (Integer)</LABEL></TD><TD><SELECT ID="dLeft" NAME=oLeft><OPTION>-- Random --<OPTION>150<OPTION>200<OPTION>250<OPTION>300<OPTION>400<OPTION>500<OPTION></SELECT></TD></TR>
<TR><TD><LABEL FOR=dCenter>Dialog Box Center (Boolean / TOP and LEFT must be set to an empty value [last option])</LABEL></TD><TD><SELECT ID="dCenter" NAME=oCenter><OPTION>Yes<OPTION>No</SELECT></TD></TR>
<TR><TD><LABEL FOR=dEdge>Dialog Box Edge (String)</LABEL></TD><TD><SELECT ID="dEdge" NAME=oEdge><OPTION>Raised<OPTION>Sunken</SELECT></TD></TR>
<TR><TD><LABEL FOR=dHelp>Dialog Box Help (Boolean)</LABEL></TD><TD><SELECT ID="dHelp" NAME=oHelp><OPTION>Yes<OPTION>No</SELECT></TD></TR>
<TR><TD><LABEL FOR=dResize>Dialog Box Resizable (Boolean)</LABEL></TD><TD><SELECT ID="dResize" NAME=oResize><OPTION>Yes<OPTION>No</SELECT></TD></TR>
<TR><TD><LABEL FOR=dStatus>Dialog Box Status (Boolean)</LABEL></TD><TD><SELECT ID="dStatus" NAME=oStatus><OPTION>Yes<OPTION>No</SELECT></TD></TR>
<TR><TD><LABEL FOR=dArguments>Dialog Box Arguments</LABEL></TD><TD><SELECT NAME=oArguments ID="dArguments">
<OPTION VALUE="Dialog Box Arguments # 1">Dialog Box Arguments # 1</OPTION>
<OPTION VALUE="Dialog Box Arguments # 2">Dialog Box Arguments # 2</OPTION>
<OPTION VALUE="Dialog Box Arguments # 3">Dialog Box Arguments # 3</OPTION>
<OPTION VALUE="Dialog Box Arguments # 4">Dialog Box Arguments # 4</OPTION>
</SELECT>
</TD></TR>
<TR><TD><LABEL FOR=dCommand>Create Modeless Dialog Box</LABEL></TD><TD></TD></TR>
<TR><TD></TD><TD ID=oFeatures></TD></TR>
</TABLE>
<br>
<br>
<INPUT ID="dCommand" NAME=oCommand TYPE=button VALUE="Push To Create" onclick="fnOpen()">
<br>
<br>
<INPUT ID="dCommand" NAME=oCommand TYPE=button VALUE="resize" onclick="fnResize()">
</FORM>
<!-- START_PAGE_FOOTER -->
<BR><BR><BR>
© <A CLASS="clsIncCpyRt" HREF="http://www.microsoft.com/isapi/gomscom.asp?TARGET=/info/cpyright.htm" TARGET="_top">2002 Microsoft Corporation. All rights reserved. Terms of use</A>.
<!-- END_PAGE_FOOTER -->
</BLOCKQUOTE>
</BODY>
</HTML>
Das ist nur das Beipiel von msdn mit einem zusätzlichen Button,mit dem man das Problem simulieren kann.In der gespeicherten HTML Daeti kann man jetzt per druck auf "push to create" ein modeless dialog mit random properties öffnen.Nach dem öffnen des dialogs dieses einfach ein bischen herumdraggen.Wenn man jetzt den resize button drückt,wird das Fenster zwar in seiner Höhe geändert (gewünschtes Resultat) aber leider auch an die Position geschoben,wo es ursprünglich geöffnet wurde,bleibt also nicht da,wo man es vor dem resizen hingedragt hatte.(=ungewünschtes Resultat)
Weis jemand,wie man dieses verschieben durch ändern der dialogheight vermeiden kann?
Ich habe keine Lösung gefunden,mit der man das umgehen kann,deshalb wollte ich einen workaround machen,bei dem man sich vor dem resizen die position des dialogfensters merkt,dann die höhe ändert und dann das Fenster an die gemerkte position zurückschiebt.
Das habe ich unter anderem so probiert:
var oldx=this.screenLeft-4//alte position des Fensters merken
var oldy=this.screenTop-30
dialogLeft=oldx
dialogTop=oldy
dialogHeight=newHeight+"px"//fensterhöhe ändern
dialogLeft=oldx//Fenster an alte Position zurückschieben
dialogTop=oldy
Leider scheint bei der Eigenschaft screentop die Höhe der titlebar des dialogfensters mit reinzuspielen,leider ist die aber bei verschiedenen windows versionen unterschiedlich (win2k/winxp mit klassik style und win xp modern style haben unterschiedliche titlebar höhen).
Bei winxp mit modern style ist die titlebar 30 hoch,deshalb ziehe ich beim merken von oldy 30 von screentop ab.
Leider funktioniert diese Lösung so also nur für eine Windows version,bei anderen verschiebt es das Fenster leicht,da die titlebar dort eine andere Höhe hat.
Falls es keine Möglichkeit gibt,das verschieben des dialogs durch ändern der dialogheight zu vermeiden,weis jemand,wie man die position des dialogs so erhählt/berechnet,dass man das Fenster nach dem resizen dorthin zurückschieben kann (und dass bei allen win versionen geht)?