| Autor | Beitrag | 
| Peter18 
          Beiträge: 489
 Erhaltene Danke: 2
 
 
 Delphi4
 
 | 
Verfasst: Di 28.11.17 11:29 
 
Ein freundliches Hallo an alle,
 in einem kleinen Anzeigeprogramm, das mir bestimmte Datenformate anzeigt, verwende ich "TOpenDialog" um eine Datei auszuwählen.
 Mit
 		                       Delphi-Quelltext 
 									| 1:
 | if OpenDialog1.Execute then					 |  öffne ich das Fenster. Es erscheint auf dem 2. Bildschirm. Wenn ich es auf den 1. Bildschirm ziehe, erscheint es bei erneutem Aufruf wieder auf dem 2..
 Kann ich das irgendwie beeinflussen?
 Grüße von der momentan sonnigen Nordsee
 Peter | 
|  | 
| Symbroson 
          Beiträge: 382
 Erhaltene Danke: 67
 
 Raspbian, Ubuntu, Win10
 C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
 
 | 
Verfasst: Di 28.11.17 16:09 
 
Schau mal hier Vielleicht kannst du damit die Position des Dialogs anpassen sodass er auf dem 1. Bildschirm erscheint._________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
 | 
|  | 
| Symbroson 
          Beiträge: 382
 Erhaltene Danke: 67
 
 Raspbian, Ubuntu, Win10
 C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
 
 | 
Verfasst: Di 28.11.17 16:38 
 
Ich hab das jetzt einfach mal ausprobiert und habe festgestellt, dass ich den Dialog nur durch nen Timer verzögert verschieben/skalieren kann. Das ist mein Ergebnis:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 
 | procedure TForm1.Button1Click(Sender: TObject);begin
 Memo1.Lines.Add('Loading');
 if OpenDialog1.Execute then Memo1.Lines.Add('Loaded');    end;
 
 procedure TForm1.OpenDialog1Show(Sender: TObject);
 begin
 Memo1.Lines.Add('OnShow');
 Timer1.Enabled := true;
 end;
 
 procedure TForm1.Timer1Timer(Sender: TObject);
 begin
 Timer1.Enabled := false;
 MoveWindow(GetParent(OpenDialog1.Handle), 60, 80, 500, 400, True);
 end;
 |  das kann man zusammenfassen - mag dir gefallen oder nicht - wie du willst: (Setzt voraus dass der Timer-Callback auf OpenDialog1Show gesetzt wird)
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 
 | procedure TForm1.Button1Click(Sender: TObject);begin
 Memo1.Lines.Add('Loading');
 if OpenDialog1.Execute then Memo1.Lines.Add('Loaded');    end;
 
 procedure TForm1.OpenDialog1Show(Sender: TObject);
 begin
 Memo1.Lines.Add('OnShow');
 
 if Timer1.Enabled then begin
 SetWindowPos(GetParent(OpenDialog1.Handle), HWND_TOPMOST, 100, 500, 0, 0, SWP_NOSIZE);
 end;
 Timer1.Enabled := not Timer1.Enabled;
 end;
 |  die eine auskommentierte Codezeile ist eine Alternative - probier mit beiden bisschen rum und schau was am besten Funktioniert    hoffe das hilft etwas weiter - probier es auch mal ohne den Timer - vielleicht geht das bei dir ja
 edit: die Memologs sind nur Debug - die kannst du auch weglassen_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
 
 Zuletzt bearbeitet von Symbroson am Di 28.11.17 16:46, insgesamt 2-mal bearbeitet
 | 
|  | 
| Frühlingsrolle Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Di 28.11.17 16:42 
 
- Nachträglich durch die Entwickler-Ecke gelöscht - | 
|  | 
| Peter18  
          Beiträge: 489
 Erhaltene Danke: 2
 
 
 Delphi4
 
 | 
Verfasst: Mi 29.11.17 14:44 
 
Hallo Symbroson,
 dank Dir für Deine Antwort.
 Mit
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 
 | procedure TForm1.OpenDialog1Show(Sender: TObject);begin
 SetWindowPos(GetParent(OpenDialog1.Handle), HWND_TOPMOST,100,100,0,0,SWP_NOSIZE);
 Abort;
 end;
 |  funktioniert es. Läst man "Abort" weg, funktioniert es nicht mehr. Die Positionierung findet anscheinend nach dem Aufruf von "OnShow" statt. "Abort" ist natürlich unschön, die Lösung mit dem Timer dagegen eleganter.
 Grüße von der Wolkigen Nordsee
 Peter | 
|  | 
| Frühlingsrolle Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Mi 29.11.17 18:07 
 
- Nachträglich durch die Entwickler-Ecke gelöscht - | 
|  | 
| Peter18  
          Beiträge: 489
 Erhaltene Danke: 2
 
 
 Delphi4
 
 | 
Verfasst: Do 30.11.17 18:03 
 
Hallo Frühlingsrolle,
 Anweisungen wie "Abort" und "Exit" springen aus einem Ablauf heraus. Wenn man hier nicht sehr sorgfältig ist und alle Eventualitäten berücksichtigt, kommt es leicht zu Fehlern, die selten auftreten und daher schwer zu finden sind.
 
 Statt "Exit" bevorzuge ich entsprechende Dinge in der Schleifenbedingung zu regeln. Bei "Abort" wird der Prozess abgebrochen. In diesem Fall weiß ich nicht einmal, was nach OnShow noch alles abläuft (keine Quelle). Daher ist die Lösung mit dem Timer eleganter, weil hier alles abgearbeitet wird und durch den Timer ein Ablauf nur unterbrochen wird. So kann es keine (oder nur selten) unschönen Überraschungen geben.
 
 Grüße von der Nordsee
 
 Peter
 | 
|  | 
| Frühlingsrolle Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Do 30.11.17 19:53 
 
- Nachträglich durch die Entwickler-Ecke gelöscht - | 
|  | 
| Peter18  
          Beiträge: 489
 Erhaltene Danke: 2
 
 
 Delphi4
 
 | 
Verfasst: Fr 01.12.17 12:12 
 
Hallo Frühlingsrolle,
 Vielleicht solltest Du noch einmal nachlesen um was es geht! (Siehe oben)
 	  |  Frühlingsrolle hat folgendes geschrieben  : |  	  | Ich weiss ehrlich gesagt nicht, warum an dieser Stelle überhaupt Abort() aufgerufen wird. ]Ich weiss ehrlich gesagt nicht, warum an dieser Stelle überhaupt Abort() aufgerufen wird. | 
 Unter dem Link von Symbroson wird eine Lösung beschrieben, die nur mit Abort funktioniert . Symbroson hat dann noch eine Lösung mit Timer angeboten.
 Wenn Du eine weitere, bessere Lösung anbieten kannst, gerne!
 Wie bereits bemerkt, ich habe nicht  den Quelltext, kann also auch nicht nachvollziehen, was in "TOpenDialog" alles geschieht und welche Nachrichten ausgetauscht werden! Daher auch meine Frage!
 Grüße von der Nordsee
 Peter | 
|  | 
| Frühlingsrolle Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Fr 01.12.17 13:15 
 
- Nachträglich durch die Entwickler-Ecke gelöscht - | 
|  |