![]() |
Re: Wenn . dann Fenster öffnen wie bei Delphi
Hallo, das mit der Positionierung passt bei mir irgendwie nicht so richtig. ich habe es jetzt mit einer ListBox1 gemacht, aber die Position dieser ListBox1 ist falsch. Die Listbox wird nicht am punkt angezeigt. Was kann ich dagegen tun???
Mit freundlichen Grüßen Christian18 |
Re: Wenn . dann Fenster öffnen wie bei Delphi
hi christian,
[oh]TRichEdit.CaretPos;[/oh] liefert dir die Koordinaten, des Carets im Clientbereich des Richedits. du musst also noch die top- und left-werte des formulars und des richedits hinzuaddieren und dein fenster erscheint an der richtigen stelle. sprich:
Delphi-Quellcode:
Aenogym
procedure TForm1.Timer1Timer(Sender: TObject);
begin Timer1.Enabled := False; form_code.left := form1.left + richedit1.left + richedit1.caretpos.x; form_code.top := form1.top + richedit1.top + richedit1.caretpos.y; form_code.show; end; |
Re: Wenn . dann Fenster öffnen wie bei Delphi
das hatte ich auch schon versucht, funktioniert aber leider auch nicht.
|
Re: Wenn . dann Fenster öffnen wie bei Delphi
hm, das verstehe ich nicht......
dann muss caretPos einen falschen wert zurückliefern ich habs grad bei mir getestet und es klappt auch nicht... aber rein theorethisch muss es so gehen... Aenogym |
Re: Wenn . dann Fenster öffnen wie bei Delphi
ja theorisch ja. das denke ich auch, aber praktisch funktioniert das nicht. ich weiß auch nicht wieso, deshalb schreibe ich ja hier ins forum.
Mit freundlichen Güßen Christian18 |
Re: Wenn . dann Fenster öffnen wie bei Delphi
aha.
die delphi-hilfe erzählt mal wieder dünnpfiff ;) caretPos gibt nicht die pixel-koordinaten des carets zurück, sondern die spalte und die zeile... da heißt es dann: umrechnen. hier mal mein (getesteter) code:
Delphi-Quellcode:
form2 ist das fenster, welches aufklappt, wenn man . eingibt
if key = '.' then
begin form2.left := form1.Left + richedit1.Left + richedit.CaretPos.x * form1.canvas.TextWidth('W') + (form1.width - form1.ClientWidth); //abziehen des fensterrahmens form2.top := form1.top + richedit.top + richedit.caretpos.y * form1.canvas.Textheight('W') + (form1.height - form1.ClientHeight); //abzeihen des fensterrahmen form2.show; end; nachtrag: form1.canvas angefügt (damit du es besser siehst ;)). du müsstest dem canvas noch die schriftart den memo's geben, damit es die text-größe richtig ausgibt... hoffe, dass dir das hilft, Aenogym |
Re: Wenn . dann Fenster öffnen wie bei Delphi
hi,
kannst du mir mal dein Projekt schicken?? denn bei mir funktioniert es immer noch nicht. |
Re: Wenn . dann Fenster öffnen wie bei Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
jo,
ich habs nochmal überarbeitet :) ich hab in dem projekt eine listbox benutzt. aber der code für die benutzung eines formulars ist auch drin. Aenogym |
Re: Wenn . dann Fenster öffnen wie bei Delphi
ich weiß jetzt warum es bei mir nicht funktioniert hat, ich habe eine klammer vergessen. :-D
|
Re: Wenn . dann Fenster öffnen wie bei Delphi
wofür ist eigentlich was "W"???
Delphi-Quellcode:
(memo1.CaretPos.x * canvas.TextWidth('W')) + canvas.TextWidth('W');
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 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 by Thomas Breitkreuz