AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleifen-Problem

Ein Thema von Tommy1988 · begonnen am 16. Nov 2007 · letzter Beitrag vom 16. Nov 2007
Antwort Antwort
Tommy1988
(Gast)

n/a Beiträge
 
#1

Schleifen-Problem

  Alt 16. Nov 2007, 00:10
Also, wie man meinem Projekt im Freewareforum (GaGaEditor) entnehmen kann,
arbeite ich dran, dass wenn man den Cursor z.B. irgentwo zwischen
(nicht ) hat, ein PopUpMenu mit allen dazu
gültigen Attributen erscheint.

Ich dachte ich könnt es so lösen:
Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject); // 2000 MS
var
aTag: String;
begin
while aTag <> '<ado // nur ein tippfehler .. hat nix mit dem code zu tun =)
 begin
  aTag := Copy(SynMemo1.Text, CurPosition-1, 2);
  // CurPos.-1 = zurück gehen bis <a kommt und dann eine Teilstring von einer länge
  // von 2 zeichen kopieren
  Caption := aTag; // zum anlure, ob alles richtig ist (erstmal) als Caption ausgeben
 end;
end;
So.. Ich kann nicht sagen obs klappt (denke aber schon, müsste)
wenn da nicht ein Problem wäre:

Mein Programm HÄNGT wenn dieser Timer an ist ?!
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Schleifen-Problem (While)

  Alt 16. Nov 2007, 00:29
Wenn du nur 2 Zeichen kopierst und gegen einen 3 zeichen langen String prüfst wird er nie etwas finden
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#3

Re: Schleifen-Problem (While)

  Alt 16. Nov 2007, 00:35
habs folgender maßen probiert:

Delphi-Quellcode:
for i := CurPosition downto 0 do // ab CursorPosition bis Position 0 im Memo zählen
 begin
  while aTag <> '<ado
   begin
    aTag := Copy(SynMemo1.Text, i-1, 2);
    Caption := aTag;
   end;
 end;
Da hängt er auch
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Schleifen-Problem (While)

  Alt 16. Nov 2007, 00:53
Er muss hängen, weil du unter Umständen eine Endlosschleife damit baust

Versuchs mal so:

Delphi-Quellcode:
for i := CurPosition downto 1 do // ab CursorPosition bis Position 1 im Memo zählen
begin // 1 weil unten noch 1 abgezogen wird
  aTag := Copy(SynMemo1.Text, i-1, 2); // 2 Zeichen holen
  Caption := aTag; // debug
  if aTag = '<athen break; // wenn gefunden, dann aussteigen
end;
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#5

Re: Schleifen-Problem (While)

  Alt 16. Nov 2007, 01:02
Darf ich hier diesbezüglich noch eine andere Frage stellen?

Ich habe einen Hotkey registriert (einer geht)

2 nicht mehr:
Delphi-Quellcode:
procedure WmHotkey(var Msg: TMessage); message WM_HOTKEY;
procedure AttrHotKey(var Msg: TMessage); message WM_HOTKEY;
Kannst du da was zu sagen
"[Fehler] Unit1.pas(406): E2140 Doppelter Botschaftsmethoden-Index"

Sagt er nur ich weis nicht, wie ich sonst 2 HotKeys deklarieren sollte.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Schleifen-Problem (While)

  Alt 16. Nov 2007, 01:07
Ein Thread, eine Frage.

werte doch einfach msg innerhalb der procedure WMHotkey aus
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#7

Re: Schleifen-Problem (While)

  Alt 16. Nov 2007, 01:30
Alsooo.. ich hab es jetzt vielleicht nicht SO elegant gelöst, aber es funktioniert super.

Was geschiet:
Zuerst wird nach "vorne" gesucht (1. Schleife), und zwar nach dem End-tag "</a>",
Delphi-Quellcode:
procedure TForm1.TBXItem79Click(Sender: TObject);
var
aTag, aEndTag: String;
i, x: Integer;
Point: TPoint;
begin
 // erst nach </a> suchen
  for x:= CurPosition+2 {+2 hinzugefügt} to Length(SynMemo1.Lines.Text) do
   begin
    aEndTag := Copy(SynMemo1.Text, x, 4);
     if aEndTag = '</a>then
      begin
         for i := CurPosition-1 {-1 hinzugefügt}  downto 0 do
           begin
              aTag := Copy(SynMemo1.Text, i, 3);
               if aTag = '<a then
                begin
                  GetCaretPos(Point);
                  aLinkPopUp.Popup(Point.X+125, Point.Y+50);
                  break;
                end;
           end;
      end;
   end;
end;
{
Anmerkung zu den beiden in Klammern gesetzten Kommentaren:
OHNE den Zusatz -1, würde das Menu auch dann kommen, wenn der Cursor HINTER "a" (<Xa, da wo's X ist)
ist.
Ohne den Zusatz +1 würde das Menu auch dann kommen, wenn der Cursor zwischen [..]>und</a> wäre.
}
Über Verbesserungsvorschläge bezüglich des Codes wäre ich reichlich dankbar.
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#8

Re: Schleifen-Problem (While)

  Alt 16. Nov 2007, 16:10
Ok, ein Problem ist trotzdem aufgetreten:

[....] ...
Edit

- Problem gelöst -
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#9

Re: Schleifen-Problem (While)

  Alt 16. Nov 2007, 21:09
Folgendes Problem:
angenommen ich gebe folgenden html code ins memo ein:
<a href="">

aber lasse das </a> weg.

=> ich möchte gerne in DIESEM falle ab ">" bis zum nächsten "<" gehen. ist ein
"<" gefunden, soll hinter ">" ein "</a>" eingefügt werden.

Das klappt ja eigentlich auch, wenn es nicht nur so blöd wäre, dass immer weiter </a>'s hinzugefügt werden.

Delphi-Quellcode:
function SearchaEndTag(s: string): string;
var
  iPos, iNext: Integer;
begin
  iPos := 1;
  repeat
    iNext := PosEx('<a', s, iPos);
    if iNext = 0 then Break;
    iPos := PosEx('>', s, iNext);
    if iPos = 0 then Break;
    if Copy(s, Pred(iPos)+2, 4) <> '</a>then
      Insert('</a>', s, iPos+1);
  until iPos > Length(s);
  Result := s;
end;
bei dem von mir angepassten code ist das problem, wenn hinter dem ">" irgentein buchstabe, also nicht ein "</a" kommt, ein "</a" hinzugefügt wird.

Ich habs schon mit schleifen versucht aber klappt leider nicht.

wie kann ich am dem ersten ">" (also das hier: <a href="">)
überprüfen, ob danach nicht irgentwo ein "</a>" kommt?
also dass eventuelle buchstaben nach dem ersten ">" ignoriert werden.

oder, dass alle nach dem ersten ">" eventuellen buchstaben ignoriert werden, bis zum
nächsten "<" vom neuen tag gesucht wird, und DANN das "</a>" eingefügt wird
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 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