Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wenn . dann Fenster öffnen wie bei Delphi (https://www.delphipraxis.net/30923-wenn-dann-fenster-oeffnen-wie-bei-delphi.html)

Christian18 1. Okt 2004 08:58


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.

Sharky 1. Okt 2004 09:05

Re: Wenn . dann Fenster öffnen wie bei Delphi
 
Zitat:

Zitat von Christian18
... Wenn ich einen Punkt eingebe, dann soll ein Fenster auf gehen. Wie bei Delphi auch....

:?:
Was für ein Fenster geht denn bei Delphi auf wenn ich irgendwo einen Punkt eingebe?

static_cast 1. Okt 2004 09:05

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.

static_cast 1. Okt 2004 09:06

Re: Wenn . dann Fenster öffnen wie bei Delphi
 
Zitat:

Zitat von Sharky
Zitat:

Zitat von Christian18
... Wenn ich einen Punkt eingebe, dann soll ein Fenster auf gehen. Wie bei Delphi auch....

:?:
Was für ein Fenster geht denn bei Delphi auf wenn ich irgendwo einen Punkt eingebe?

Er meint sicher das Code-Completion fenster ;)

Christian18 1. Okt 2004 09:25

Re: Wenn . dann Fenster öffnen wie bei Delphi
 
ja genau das Fenster Code ... was will ich auch so haben. Wie mache ich das???

Sharky 1. Okt 2004 09:28

Re: Wenn . dann Fenster öffnen wie bei Delphi
 
Zitat:

Zitat von Christian18
...Wie mache ich das???

Eigentlich hat static_cast schon alle Stichwörter geliefert ;-)

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;

Christian18 1. Okt 2004 09:35

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???

Sharky 1. Okt 2004 09:45

Re: Wenn . dann Fenster öffnen wie bei Delphi
 
Zitat:

Zitat von Christian18
...und wie bekomme ich von den Code Fenster dann die obere linke ecke an den punkt???

Schaue Dir mal TRichEdit.CaretPos an.

static_cast 1. Okt 2004 10:02

Re: Wenn . dann Fenster öffnen wie bei Delphi
 
Zitat:

Zitat von Christian18
was für ein Fenster für den Code würdet ihr dort nehmen??? eine ListBox1????

Eine ListBox ist nicht unbedingt sehr zu empfehlen, sie kann nicht ausserhalb des Forms angezeigt werden, du solltest zu anfang eine einfache Form anzeigen lassen, und später versuchen es über eine ableitung der THint klasse zu lösen.

static_cast 1. Okt 2004 10:11

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.

Christian18 1. Okt 2004 12:37

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

Aenogym 1. Okt 2004 12:44

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:
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;
Aenogym

Christian18 1. Okt 2004 12:48

Re: Wenn . dann Fenster öffnen wie bei Delphi
 
das hatte ich auch schon versucht, funktioniert aber leider auch nicht.

Aenogym 1. Okt 2004 13:33

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

Christian18 1. Okt 2004 13:44

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

Aenogym 1. Okt 2004 13:48

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:
  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;
form2 ist das fenster, welches aufklappt, wenn man . eingibt

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

Christian18 1. Okt 2004 14:06

Re: Wenn . dann Fenster öffnen wie bei Delphi
 
hi,

kannst du mir mal dein Projekt schicken?? denn bei mir funktioniert es immer noch nicht.

Aenogym 1. Okt 2004 14:26

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

Christian18 1. Okt 2004 14:56

Re: Wenn . dann Fenster öffnen wie bei Delphi
 
ich weiß jetzt warum es bei mir nicht funktioniert hat, ich habe eine klammer vergessen. :-D

Christian18 1. Okt 2004 14:59

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');

Aenogym 1. Okt 2004 15:09

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 10:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz