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/)
-   -   Form wird nicht korrekt positioniert (https://www.delphipraxis.net/180212-form-wird-nicht-korrekt-positioniert.html)

CocoPops 30. Apr 2014 22:42

Form wird nicht korrekt positioniert
 
Ich erstelle zum Test folgendermaßen ein neues Formular aus Form2 heraus:

Delphi-Quellcode:
var
 aForm: TForm;
begin
 aForm := TForm.Create(nil);

 aForm.Left := Form1.Left;
 aForm.Top := Form1.Top;
 aForm.Width := Form1.Width;
 aForm.Height := Form1.Height;
 aForm.Color := clBlack;

 aForm.AlphaBlend := True;
 aForm.AlphaBlendValue := 185;

 aForm.ShowModal;

 // ein bisschen Code

 aForm.Hide;
 aForm.Free;
Durch diesen Code möchte ich ein Formular mit Transparenz über das Hauptformular legen. Es wird logischerweise auch genau so erstellt.
Aber seltsamerweise ist dieses neue Formular NICHT an den Koordinaten wie das Form1. Es ist etwas über und etwas weiter links neben dem Form1.

Woran liegt das?

Aviator 1. Mai 2014 01:08

AW: Form wird nicht korrekt positioniert
 
Wahrscheinlich musst du den Rahmen der Form mit dazurechnen. Du kannst es ja testweise mal mit BorderStyle bsNone probieren, ob die Position dann stimmt.

Popov 1. Mai 2014 11:07

AW: Form wird nicht korrekt positioniert
 
So wie der Code da ist, ist nichts falsches dran. Selbst wenn das eine Fenster ein Dialog, das andere Normal oder Sonstwas, der Code passt das an.

Der Fehler liegt also nicht an dieser Stelle.

Sir Rufo 1. Mai 2014 11:26

AW: Form wird nicht korrekt positioniert
 
Das Problem liegt schon irgendwie in dem Code, da es die Verhaltensweise von
Delphi-Quellcode:
TForm
nicht berücksichtigt.

Dieser Code legt über die übergebene Form eine abgedunkelte Form.
Delphi-Quellcode:
procedure DarkenForm( AForm : TForm );
var
  LForm : TForm;
begin
  if not Assigned( AForm ) then
    raise EArgumentNilException.Create('AForm darf nicht NIL sein!');

  LForm := TForm.Create(AForm);
  try
    LForm.Position := poOwnerFormCenter;
    LForm.Width := AForm.Width;
    LForm.Height := AForm.Height;
    LForm.Color := clBlack;
    LForm.AlphaBlend := True;
    LForm.AlphaBlendValue := 182;
    LForm.ShowModal;
  finally
    LForm.Free;
  end;
end;
Allerdings frage ich mich, was das mit dem ShowModal soll, denn nun wird so lange gewartet, bis diese Form geschlossen wird und erst dann geht es weiter im Text ... ist also nicht wirklich die Lösung, es sei denn, man packt den Code in einen Thread ...

Sir Rufo 1. Mai 2014 11:33

AW: Form wird nicht korrekt positioniert
 
Generell zum Code sei noch folgendes gesagt:

Delphi-Quellcode:
var
 aForm: TForm;
begin
 aForm := TForm.Create(nil);

 aForm.Left := Form1.Left;
 aForm.Top := Form1.Top;
 aForm.Width := Form1.Width;
 aForm.Height := Form1.Height;
 aForm.Color := clBlack;

 aForm.AlphaBlend := True;
 aForm.AlphaBlendValue := 185;

 aForm.ShowModal;

 // ein bisschen Code

 aForm.Hide;
 aForm.Free;
Die Verwendung von der globalen Variablen
Delphi-Quellcode:
Form1
ist schon mal ganz übel.

Wenn man die MainForm der Anwendung damit meint, dann sagt man das auch mit Delphi-Referenz durchsuchenTApplication.MainForm.
Wenn es irgendeine Form sein soll, dann übergibt man diese als Parameter.

Nach Delphi-Referenz durchsuchenTForm.ShowModal wird der Code an dieser Stelle so lange unterbrochen, bis diese Form geschlossen wird ... das scheint nicht beabsichtigt zu sein ...

Delphi-Quellcode:
aForm.Hide
direkt vor
Delphi-Quellcode:
aForm.Free
ist nutzlos und kann ebenso entfallen.

Instanzen erzeugen ohne Ressource-Schutzblock ist auch sträfliches Unterlassen.

CocoPops 1. Mai 2014 11:55

AW: Form wird nicht korrekt positioniert
 
Zitat:

Die Verwendung von der globalen Variablen Form1 ist schon mal ganz übel.
Wieso sollte man denn nicht Form1. , Form2. usw. verwenden?
Zitat:

Wenn es irgendeine Form sein soll, dann übergibt man diese als Parameter.
Wie genau ist das gemeint? Davon habe ich noch nie etwas gelesen und dachte, Form1. , Form2. usw wäre normal.

Zitat:

Instanzen erzeugen ohne Ressource-Schutzblock ist auch sträfliches Unterlassen.
Es war nur ein Test :P

Ich habe deinen Rat mal umgesetzt und deinen Code zum Testen übernommen.
Selbst damit wird mein erzeugtes Fenster seltsamerweise an Position 0;0 angezeigt.

Dazu sei eventuell noch gesagt, dass das Form, aus dem ich diesen Code aufrufe, Modal ist. Daran könnte es liegen denke ich.
Hat sich erledigt. Selbst, wenn ich den Code aus dem MainForm aufrufe passiet dasselbe.

himitsu 1. Mai 2014 12:02

AW: Form wird nicht korrekt positioniert
 
Zitat:

Zitat von Sir Rufo (Beitrag 1257589)
Das Problem liegt schon irgendwie in dem Code, da es die Verhaltensweise von
Delphi-Quellcode:
TForm
nicht berücksichtigt.

Oder anders gesagt, der Wert von aForm.Position bestimmst, wie/wo Delphi im Visible/Show/ShowModal die Form dann darstellt, denn das wird erst beim Anzeigen (CMShowingChanged) bestimmt und überschreibt somit womöglich deine Werte.


Und jenachdem wie neu dein Delphi ist, würde ich auch noch mit PopupMode und PopupParent rumspielen, damit die aForm auch über der gewünschten Form drüber bleibt.


Zitat:

Instanzen erzeugen ohne Ressource-Schutzblock ist auch sträfliches Unterlassen
Wenn er stattdessen/alternativ wenigstens einen Owner angegeben hätte, dann hätte sich wenigstens wer notfalls ums Aufräumen gekümmert. :angle:

Sir Rufo 1. Mai 2014 12:05

AW: Form wird nicht korrekt positioniert
 
Zitat:

Zitat von CocoPops (Beitrag 1257591)
Zitat:

Die Verwendung von der globalen Variablen Form1 ist schon mal ganz übel.
Wieso sollte man denn nicht Form1. , Form2. usw. verwenden?

Weil du dir damit Abhängigkeiten in den Code holst, die dir irgendwann auf die Füße fallen. Benenne deine Form doch mal vernünftig und schon funktioniert nichts mehr.

Ansonsten ist dieses Thema hier schon mehrfach durchgekaut worden und bedarf keiner weiteren Diskussion, da es keine neueren Erkenntnisse geben würde (nur ein schales Echo bereits geführter Diskussionen)
siehe dazu auch http://www.delphipraxis.net/179859-u...ree-tform.html
Zitat:

Zitat von CocoPops (Beitrag 1257591)
Zitat:

Wenn es irgendeine Form sein soll, dann übergibt man diese als Parameter.
Wie genau ist das gemeint? Davon habe ich noch nie etwas gelesen und dachte, Form1. , Form2. usw wäre normal.

Hmmm, wie man eine Methode/Prozedur mit Parametern erstellt weißt du aber schon? :gruebel:
Zu der "Normalität" siehe Link oben ...
Zitat:

Zitat von CocoPops (Beitrag 1257591)
Zitat:

Instanzen erzeugen ohne Ressource-Schutzblock ist auch sträfliches Unterlassen.
Es war nur ein Test :P

Ich habe deinen Rat mal umgesetzt und deinen Code zum Testen übernommen.
Selbst damit wird mein erzeugtes Fenster seltsamerweise an Position 0;0 angezeigt.

Dazu sei eventuell noch gesagt, dass das Form, aus dem ich diesen Code aufrufe, Modal ist. Daran könnte es liegen denke ich.
Hat sich erledigt. Selbst, wenn ich den Code aus dem MainForm aufrufe passiet dasselbe.

Mein Code funktioniert einwandfrei in einem VCL-Projekt. Hast du ein FMX-Projekt? (Wäre manchmal hilfreich, dieses gleich im ersten Beitrag zu erwähnen)
Delphi-Quellcode:
unit UI_Form_Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TUIMain_Form = class( TForm )
    Button1 : TButton;
    procedure Button1Click( Sender : TObject );
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  UIMain_Form : TUIMain_Form;

implementation

{$R *.dfm}

procedure DarkenForm( AForm : TForm );
var
  LForm : TForm;
begin
  if not Assigned( AForm ) then
    raise EArgumentNilException.Create('AForm darf nicht NIL sein!');
  LForm := TForm.Create(AForm);
  try
    LForm.Position := poOwnerFormCenter;
    LForm.Width := AForm.Width;
    LForm.Height := AForm.Height;
    LForm.Color := clBlack;
    LForm.AlphaBlend := True;
    LForm.AlphaBlendValue := 182;
    LForm.ShowModal;
  finally
    LForm.Free;
  end;
end;

procedure TUIMain_Form.Button1Click( Sender : TObject );
begin
  DarkenForm(Self);
end;

end.
UPDATE
Die Angabe deiner Delphi-Version (auch im Profil) wäre durchaus hilfreich ...

CocoPops 1. Mai 2014 12:14

AW: Form wird nicht korrekt positioniert
 
Die Grundlagen kenne ich gut, Danke =) Nur "seltsame" Probleme machen mir immer zu schaffen.
Ich weiß absolut nicht woran es lag, aber ich habe Delphi neugestartet und nun funktioniert es :?::?:

Ich schaue mir das mal genauer an, denn das ist wirklich sehr komisch.
Ich denke ich werde Windows auch neuinstallieren, denn auch Windows macht manchmal was es will.

Sir Rufo 1. Mai 2014 12:24

AW: Form wird nicht korrekt positioniert
 
Zitat:

Zitat von CocoPops (Beitrag 1257594)
Die Grundlagen kenne ich gut, Danke =) Nur "seltsame" Probleme machen mir immer zu schaffen.
Ich weiß absolut nicht woran es lag, aber ich habe Delphi neugestartet und nun funktioniert es :?::?:

Ich schaue mir das mal genauer an, denn das ist wirklich sehr komisch.
Ich denke ich werde Windows auch neuinstallieren, denn auch Windows macht manchmal was es will.

Was funktioniert jetzt?

Dein Code, mein Code, irgendein Code, ...

Wenn du so programmierst wie du hier antwortest, dann wage ich zu vermuten, dass das größte Problem direkt vor deinem Bildschirm sitzt ;)

Popov 1. Mai 2014 12:31

AW: Form wird nicht korrekt positioniert
 
@CocoPops

Sowas wäre besser:
Delphi-Quellcode:
var
 aForm: TForm;
begin
 aForm := TForm.Create(nil);

 aForm.Left := Self.Left;
 aForm.Top := Self.Top;
Vorausgesetzt der Code befindet sich in der gleichen Unit. Denn änderst du den Namen von Form1, mußt du jeden einzelnen Eintrag im Code auch ändern.

CocoPops 1. Mai 2014 12:36

AW: Form wird nicht korrekt positioniert
 
Zitat:

Zitat von Sir Rufo (Beitrag 1257596)
Zitat:

Zitat von CocoPops (Beitrag 1257594)
Die Grundlagen kenne ich gut, Danke =) Nur "seltsame" Probleme machen mir immer zu schaffen.
Ich weiß absolut nicht woran es lag, aber ich habe Delphi neugestartet und nun funktioniert es :?::?:

Ich schaue mir das mal genauer an, denn das ist wirklich sehr komisch.
Ich denke ich werde Windows auch neuinstallieren, denn auch Windows macht manchmal was es will.

Was funktioniert jetzt?

Dein Code, mein Code, irgendein Code, ...

Wenn du so programmierst wie du hier antwortest, dann wage ich zu vermuten, dass das größte Problem direkt vor deinem Bildschirm sitzt ;)

Es ist einfach unglaublich, wie man sich hier teilweise beleidigen lassen muss. Muss das sein?
Das habe ich schon öfters gelesen. Nur weil die Antworten nicht auf Uni-Niveau sind, heißt das nicht, dass wir dumm sind und uns so beleidigen zu lassen haben!

Beitrag wurde gemeldet.

Sir Rufo 1. Mai 2014 12:43

AW: Form wird nicht korrekt positioniert
 
Zitat:

Zitat von CocoPops (Beitrag 1257598)
Es ist einfach unglaublich, wie man sich hier teilweise beleidigen lassen muss. Muss das sein?
Das habe ich schon öfters gelesen. Nur weil die Antworten nicht auf Uni-Niveau sind, heißt das nicht, dass wir dumm sind und uns so beleidigen zu lassen haben!

Beitrag wurde gemeldet.

:shock: bitte?

Kannst du bitte mal erklären, wie spätere Leser deine Antwort interpretieren sollen?
Dieses Forum ist nicht nur dafür da Hilfe für die eigenen Probleme zu bekommen, sondern auch hilfreich für Andere zu sein. Wenn dein Problem gelöst wurde, dann sollte für alle Anderen auch klar erkennbar sein, was jetzt die Lösung war.

Scheint allerdings noch nicht überall angekommen zu sein ...

CocoPops 1. Mai 2014 12:51

AW: Form wird nicht korrekt positioniert
 
Dieses Forum sollte man als nicht-Student oder nicht-studierter, da wir alle doof zu sein scheinen, tunlichst meiden.

Sir Rufo 1. Mai 2014 12:57

AW: Form wird nicht korrekt positioniert
 
Zitat:

Zitat von CocoPops (Beitrag 1257600)
Dieses Forum sollte man als nicht-Student oder nicht-studierter, da wir alle doof zu sein scheinen, tunlichst meiden.

Ich denke jeder "normale" Mensch sollte in der Lage sein eine Antwort wie:
Zitat:

Oh, nach dem Neustart funktioniert dein Code jetzt
zu formulieren und späteren Lesern würde eine Nachfrage erspart.

Ist das tatsächlich zuviel verlangt? :gruebel:
(Ich lerne gerne dazu)

Daniel 1. Mai 2014 13:05

AW: Form wird nicht korrekt positioniert
 
Der Wunsch nach präziser Kommunikation ist keinesfalls überzogen. Wir alle investieren hier Freizeit für uns und andere - und da sollte es das Mindeste sein, dass alle Beteiligten nach Kräften zur Lösung beitragen. Ein ungehemmter Informationsfluss ist wesentlicher Bestandteil davon.

Da der Fragesteller aber auf eigenen Wunsch das Forum verlassen hat, sollte sich das Thema erledigt haben.

Popov 1. Mai 2014 13:20

AW: Form wird nicht korrekt positioniert
 
Meine Oma, eine sehr kluge Frau, sagte früher - man sollte nie einen Brief schreiben wenn man verärgert ist, man sollte erst eine Nacht darüber schlafen. Vielleicht sollte man das auch bei Abmeldungen so machen.

Perlsau 1. Mai 2014 13:28

AW: Form wird nicht korrekt positioniert
 
@Sir Rufo: Hey, du vergraulst dem Daniel seine User :lol:

Spaß beiseite: Ich fand deine Antwort weder beleidigend noch herabwürdigend und schon gar nicht einer Meldung würdig. Das liegt daran, daß ich beim Lesen genau denselben Eindruck hatte:

Zitat:

Zitat:

Wenn es irgendeine Form sein soll, dann übergibt man diese als Parameter.
Wie genau ist das gemeint? Davon habe ich noch nie etwas gelesen und dachte, Form1. , Form2. usw wäre normal.
Nicht zu wissen, was es heißt, ein Objekt als Parameter zu übergeben, ist eindeutig auf mangelhafte Grundkenntnisse zurückzuführen. Darauf hingewiesen zu werden hat den "vergraulten" User so schwer getroffen, daß er davonlaufen mußte.

Zitat:

Zitat von Popov (Beitrag 1257607)
Meine Oma, eine sehr kluge Frau, sagte früher - man sollte nie einen Brief schreiben wenn man verärgert ist, man sollte erst eine Nacht darüber schlafen. Vielleicht sollte man das auch bei Abmeldungen so machen.

Sehr richtig:!: Häufig besteht der Impuls, zu antworten, gar nicht im Wunsch nach einer sinnvollen Entgegnung, sondern im Abreagieren der eigenen inneren Spannungen. Deshalb genügt es häufig schon, die Antwort zwar zu verfassen, aber nicht wirklich abzusenden, sondern meinetwegen ins Notepad zu kopieren und abzuspeichern. Schaut man sich seine "Ergüsse" etwas später an, kann man dann oft selbst erkennen, was der eigentliche Zweck dieser Entgegnung war.

Popov 1. Mai 2014 13:59

AW: Form wird nicht korrekt positioniert
 
Was meinte mal mein fauler Kollege, nach dem er wiederholt Mist bei der Arbeit fabriziert hat (was letztendlich auch auf mich zurückfällt), ich danach Tacheles mit ihm über die Arbeit und seine Arbeitseinstellung geredet habe, er sich darüber beim Chef beschwerte, der Chef sich daraufhin sonderbarerweise nicht für den Mist und Arbeitseinstellung des Kollegen interessiert hat, sondern mit mir darüber sprach, dass ich Tacheles mit dem Kollegen sprach? Was sagte der Kollege da? Er sagte: der Ton macht die Musik ;)

So ist das nun mal im Leben, es geht oft nicht um die Frage ob man evtl. recht hat oder nicht, sondern wie man es sagt. Und ich muss es wissen ;)

Perlsau 1. Mai 2014 14:48

AW: Form wird nicht korrekt positioniert
 
Wenn der Ton ausgeblendet ist wie z.B. in einem Internetforum, wird er vom Rezipienten häufig "hinzugedichtet": Es geht oft nicht darum, was man hier schreibt, sondern wie der Empfänger sich selbst das "vorliest". Das wiederum ist z.T. davon abhängig, welchen speziellen Prägungen er in der Vergangenheit ausgesetzt war. Ist er z.B. von irgendwelchen stigmatisierenden Äußerungen wie "du bist zu blöd" oder "du kannst eh nix" oder "du machst alles falsch" traumatisiert (was in unserer Gesellschaft keine Seltenheit darstellt), wird ihn jeder noch so kleine Hinweis auf irgend eine Unfähigkeit zwangsläufig kränken – völlig unabhängig davon, ob die Aussage zutrifft oder nicht. Das kann man in sehr vielen Foren sehr häufig beobachten. Fachforen wie dieses hier sind nunmal nicht dazu da, Grundlagen zu vermitteln; die werden vorausgesetzt.

Stevie 2. Mai 2014 02:27

AW: Form wird nicht korrekt positioniert
 
Naja, ich fand den Kommentar hier schon ziemlich bissig - den hätte man sich auch sparen können:
Zitat:

Zitat von Sir Rufo (Beitrag 1257596)
Wenn du so programmierst wie du hier antwortest, dann wage ich zu vermuten, dass das größte Problem direkt vor deinem Bildschirm sitzt ;)

Ich kann aus eigener Erfahrung sagen, dass sowas nicht immer gut ankommt - man liest halt je nach Persönlichkeit einen gewissen "Unterton" rein bei sowas - da ändert dann auch bei demjenigen ein Zwinkersmiley nix dran.

Außerdem neigen einige generell dazu über die Beantwortung der konkreten Frage hinaus auch noch den TE über sämtliche anderen Dinge belehren zu wollen. Manchmal muss man es einfach gut sein lassen und da nicht weiter drauf eingehen :)

Perlsau 2. Mai 2014 10:18

AW: Form wird nicht korrekt positioniert
 
Wenn ein Fragesteller einfachste Zusammenhänge nicht zu begreifen scheint (kenn ich nicht, hab ich noch nie von gehört usw.), dann wird das von versierten Usern durchaus bemerkt und daher auch thematisiert. Das kommt natürlich schonmal nicht gut an, wenn der Fragesteller sich selbst als guten und versierten Programmierer betrachtet und nun erkennen muß, daß er eigentlich gar nichts weiß, zumindest nicht im Verhältnis zu Usern, die ihr täglich Brot damit verdienen und daher quasi rund um die Uhr im Delphi-Code stecken.

Wenn du daher als Argument anführst, ein bestimmter Kommentar sei bissig, dann solltest du anständigerweise auch bemerken und nicht unwerwähnt lassen, wie dieser Kommentar regelrecht provoziert wurde:
Zitat:

Zitat von CocoPops (Beitrag 1257594)
Die Grundlagen kenne ich gut, Danke =) Nur "seltsame" Probleme machen mir immer zu schaffen.
Ich weiß absolut nicht woran es lag, aber ich habe Delphi neugestartet und nun funktioniert es :?::?:
Ich schaue mir das mal genauer an, denn das ist wirklich sehr komisch.
Ich denke ich werde Windows auch neuinstallieren, denn auch Windows macht manchmal was es will.

Da kennt also einer die Grundlagen gut, und deshalb kommt er auch darauf, daß ein Delphi-Neustart das Problem schon beheben wird. Und wenn nicht, dann muß es an Windows liegen, also wird das auch gleich mal neu installiert. Das ist Anfänger-Herumgerate! Das fällt schließlich nicht nur mir auf, der ich ja auch kein Vollprofi bin, obwohl ich seit über 5 Jahren beinahe täglich programmiere. Hey, da gibt's manchmal Schüler, die in ihrem Umfeld als der Programmierer gelten und sich schwer beleidigt zurückziehen, wenn man ihnen rät, doch erst einmal die Grundlagen zu erlernen. Wie heißt es noch so schön: Ähnlichkeiten mit lebenden Personen sind weder Absicht noch Zufall, sondern waren unvermeidbar. Oder anders ausgedrückt: Wer weiter oben steht, hat einen weiteren Blick und kann Dinge erkennen, die andere, die weiter unten stehen, erst sehr viel später bemerken. Daraufhin beleidigt zu sein und gar sofort den Account zu kündigen ist einfach nur kindisch.

Popov 2. Mai 2014 14:07

AW: Form wird nicht korrekt positioniert
 
Mit dem Programmieren ist es fast wie mit dem Sex (in dem Fall wäre das DP das Dr. Sommer Team). Wenn man mit dem Programmieren anfängt, ist alles noch neu und man hat selbst viele Fragen. Genau wie über Sex. Irgendwann aber hat man seine Erfahrungen gesammelt und ist ein Experte (oder zumindest gut). Auf jeden Fall weiß man alles darüber. Am Anfang hilft man den Anderen gerne und teilt sein Wissen. Man hat ja gerade selbst alles gelernt und kann sich noch gut dran erinnern wie Kleinigkeiten einen hindern können. Mit der Zeit wird man immer besser, alles wird zu Routine und dann kommt jemand und fragt: kann man vom küssen schwanger werden? Und dann denkt man sich: wie dumm ist das denn? Was ist das denn für eine dumme Frage?

Ja, mit dem Programmieren ist es fast wie mit dem Sex ;)

Perlsau 2. Mai 2014 14:09

AW: Form wird nicht korrekt positioniert
 
Der gute Popov muß halt immer da letzte Wort haben, nicht wahr? Wenn's weiter nix ist, das sei dir gegönnt :stupid:

Popov 2. Mai 2014 14:16

AW: Form wird nicht korrekt positioniert
 
Ach ja, das sagen viele zu mir und haben damit letztendlich das letzte Wort ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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