![]() |
Wenn . dann Fenster öffnen wie bei Delphi
Hallo,
ich habe eine RichEdit1 Komponennte auf meiner Form. Wenn ich einen Punkt eingebe, dann soll ein Fenster auf gehen. Wie bei Delphi auch. Wie mache ich das. Ich habe echt keine Idee. Was brauche ich für Komponnenten dazu. |
Re: Wenn . dann Fenster öffnen wie bei Delphi
Zitat:
Was für ein Fenster geht denn bei Delphi auf wenn ich irgendwo einen Punkt eingebe? |
Re: Wenn . dann Fenster öffnen wie bei Delphi
Hi,
ich hatte es mal so gelöst: Nimmst ein Timer stellst ihn auf Interval = 500, guckst in deinem Memo oder RichEdit ob ein Punkt gedrückt wurde und sagt dem Timer Enabled = True, oder wenn noch eine Taste gedrückt wird wieder False. und im OnTimer kannst du dein Code ausführen zum Fenster anzeigen. |
Re: Wenn . dann Fenster öffnen wie bei Delphi
Zitat:
|
Re: Wenn . dann Fenster öffnen wie bei Delphi
ja genau das Fenster Code ... was will ich auch so haben. Wie mache ich das???
|
Re: Wenn . dann Fenster öffnen wie bei Delphi
Zitat:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Timer1.Interval := 500; // Halbe Sekunde verzögerung Timer1.Enabled := False; end; procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char); begin if (key = '.') then // Es wurde ein Punkt eigegeben begin Timer1.Enabled := True; end else begin Timer1.Enabled := False; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; ShowMessage ('blubb'); // Hier kommt der Aufruf für dein "Code-Fenster" hin end; |
Re: Wenn . dann Fenster öffnen wie bei Delphi
ok das habe ich jetzt !
was für ein Fenster für den Code würdet ihr dort nehmen??? eine ListBox1???? und wie bekomme ich von den Code Fenster dann die obere linke ecke an den punkt??? |
Re: Wenn . dann Fenster öffnen wie bei Delphi
Zitat:
|
Re: Wenn . dann Fenster öffnen wie bei Delphi
Zitat:
|
Re: Wenn . dann Fenster öffnen wie bei Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab dir mal was zusammen geschustert, ist wirklich nur kurz und knapp, aber es sollte dir helfen.
|
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');
|
Re: Wenn . dann Fenster öffnen wie bei Delphi
die funktion Canvas.TextHeight bzw. Canvas.TextWidth gibt dir die höhe und breite des angegebenen buchstabens in Pixeln zurück. ich habe W genommen. du könntest auch irgendein anderes zeichen nehmen, da bei Courier New alle buchstaben gleich groß sind.
achtung: wenn du eine schrift mit variabler größe (zB Arial) nimmst, funktioniert der Code leider nicht mehr! Aenogym |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 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