![]() |
Form wird nicht korrekt positioniert
Ich erstelle zum Test folgendermaßen ein neues Formular aus Form2 heraus:
Delphi-Quellcode:
Durch diesen Code möchte ich ein Formular mit Transparenz über das Hauptformular legen. Es wird logischerweise auch genau so erstellt.
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; 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? |
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.
|
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. |
AW: Form wird nicht korrekt positioniert
Das Problem liegt schon irgendwie in dem Code, da es die Verhaltensweise von
Delphi-Quellcode:
nicht berücksichtigt.
TForm
Dieser Code legt über die übergebene Form eine abgedunkelte Form.
Delphi-Quellcode:
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 ...
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; |
AW: Form wird nicht korrekt positioniert
Generell zum Code sei noch folgendes gesagt:
Delphi-Quellcode:
Die Verwendung von der globalen Variablen
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;
Delphi-Quellcode:
ist schon mal ganz übel.
Form1
Wenn man die MainForm der Anwendung damit meint, dann sagt man das auch mit ![]() Wenn es irgendeine Form sein soll, dann übergibt man diese als Parameter. Nach ![]()
Delphi-Quellcode:
direkt vor
aForm.Hide
Delphi-Quellcode:
ist nutzlos und kann ebenso entfallen.
aForm.Free
Instanzen erzeugen ohne Ressource-Schutzblock ist auch sträfliches Unterlassen. |
AW: Form wird nicht korrekt positioniert
Zitat:
Zitat:
Zitat:
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. |
AW: Form wird nicht korrekt positioniert
Zitat:
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:
|
AW: Form wird nicht korrekt positioniert
Zitat:
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 ![]() Zitat:
Zu der "Normalität" siehe Link oben ... Zitat:
Delphi-Quellcode:
UPDATE
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. Die Angabe deiner Delphi-Version (auch im Profil) wäre durchaus hilfreich ... |
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. |
AW: Form wird nicht korrekt positioniert
Zitat:
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 ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 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