Suchfunktion und noch paar andere fragen



  • hey... ich bin an einem projekt dran... einen text editor zu erstellen habe aber paar probleme

    wenn ich was mit meiner suchfunktion suchen will findet der nix
    wie man ein neues dokument erstellt
    und beim drucken... wenn man rechts über den rand schreibt wird das auch so gedruckt

    bin dankbar für jede hilfe 🙂



  • Hallo

    Solange deine Frage so vage ist, bleibt mir auch nur eine vage Antwort : benutzt den Debugger und die VCL-Doku, um deine Fragestellung zu präzisieren (vielleicht kannst du dann die Frage auch selbst beantworten).

    Für konkrete Antworten must du schon dein Konzept und deine Implementation erklären, relevanten Quellcode zeigen und/oder entsprechende Fehlerbeschreibung posten. Es gibt nämlich unzählige Möglichkeiten einen Texteditor zu schreiben, und wir wollen hier nicht raten welche du nimmst.

    bis bald
    akari



  • zur suchfunktion hab ich

    FindDialog1->Execute();
    

    wie man ein neues dokument erstellt weiß ich nicht und wollte fragen ob mir das jemand erklären kann, hab gedacht den inhalt von memo zu löschen weiß aber nicht wie das geht

    das hab ich bis jetzt zur druck funktion, aber er macht kein zeilenumbruch und druckt dann nur eine zeile und der rest ist weg

    int x;
            static int lineHoehe,lineCount,lineSeite;
    
            //Höhe einer Zeile berechnen
            lineHoehe=abs(MulDiv(Printer()->Canvas->Font->Size,GetDeviceCaps(Printer()->Handle,LOGPIXELSY),72));
            lineHoehe*=1.4;
            lineSeite=(Printer()->PageHeight/lineHoehe)-4;
    
            //Startzeile zum drucken festlegen
            lineCount=2;
    
            PrintDialog1 -> Execute();
    
            // Name für Druckjob festlegen
            Printer()->Title = "Text Editor";
    
            // Drucken beginnen
            Printer()->BeginDoc();
    
            for(x=0;x<mmEditor->Lines->Count;x++)
    	{
    	Printer()->Canvas->TextOut(200,lineCount*lineHoehe,mmEditor->Lines->Strings[x]);
    	lineCount++;
    
    	// ggf. neue Seite
    	if(lineCount==lineSeite)
    		{
    		lineCount=4;
    		Printer()->NewPage();
    		}
    	}
            // Drucken Ende
            Printer()->EndDoc();
    


  • Hallo

    1. Der TFindDialog ist nur ein reiner Eingabedialog. Er führt keine Suche durch, diese must du selber implementieren. Woher soll der Dialog denn auch wissen, in welcher Komponente er suchen soll?
    Eine Beispielimplementation findest du in der BCB-Hilfe zu der Methode TFindDialog::Execute, unter dem Zusatzlink "Beispiel"

    2. Solange dein Dokument nur aus dem TMemo besteht, must du in der Tat nur dessen Inhalt löschen

    mmEditor->Lines->Text = ""
    

    3. Dein bisheriger Code zum Drucken druckt die Zeilen des Memos so wie sie sind. Wenn du einzelne Zeilen wegen der Breite zusätzlich noch umbrechen lassen willst, must du das auch selber implementieren. Du siehst ja schon wie die Höhe einer Zeile berechnet wird, genauso kannst du auch die Breite berechnen lassen und dementsprechend zusätzliche Zeilenumbrücke einbauen.

    bis bald
    akari



  • danke klappt jetzt alles außer die suchfunktion die will noch nicht ganz, aber die mach ich dann später nochmal jetzt noch eine frage wie kann ich eine sicherheitsabfrage machen wie beim editor von MS das wenn man X drückt das der nochmal frägt ob man speichern will oder beenden



  • Hallo

    Zu deiner neuen Frage : Vermutlich suchst du die Events TForm::OnClose und TForm::OnCloseQuery.
    Aber da das nichts mehr mit den Originalfragen zu run hat, mach für Nachfragen zum Schließen bitte einen neuen Thread auf. Ein Thread ein Thema, ein Thema ein Thread.

    bis bald
    akari



  • meine suchfuktion geht immer noch nicht ....

    {
      int FoundAt, StartPos, ToEnd;
      // Suchbeginn nach der aktuellen Markierung 
      // (falls vorhanden), 
      // andernfalls am Textanfang starten
      if (RichEdit1->SelLength)
        StartPos = RichEdit1->SelStart + RichEdit1->SelLength;
      else
    
        StartPos = 0;
    
      // ToEnd ist die Länge von StartPos 
      // bis zum Ende des Textes im RTF-Eingabefeld
    
      ToEnd = RichEdit1->Text.Length() - StartPos;
    
      FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase);
      if (FoundAt != -1)
      {
        RichEdit1->SetFocus();
        RichEdit1->SelStart = FoundAt;
        RichEdit1->SelLength = FindDialog1->FindText.Length();
      }
    }
    


  • "Geht nicht" ist keine ausreichende Problembeschreibung.
    Hast du beim Ausprobieren das stMatchCase bedacht?
    Was sagt der Debugger; stehen in StartPos, ToEnd usw. sinnvolle Werte?


Log in to reply